Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[网页五子棋][用户模块]数据库设计和配置(MyBatis)、约定前后端交互接口、服务器开发

[网页五子棋][用户模块]数据库设计和配置(MyBatis)、约定前后端交互接口、服务器开发

作者头像
椰椰椰耶
发布于 2025-05-29 00:55:14
发布于 2025-05-29 00:55:14
9000
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

数据库

数据库设计

完成注册登录以及用户分数管理

创建 java_gobang 数据库, user 表,表示用户信息和分数信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create database if not exists java_gobang;  
  
use java_gobang;  
  
drop table if exists user;  
create table user (  
    userId int primary key auto_increment,  
    username varchar(50) unique,  
    password varchar(50),  
    score int,         -- 天梯积分  
    totalCount int,    -- 比赛总场数  
    winCount int       -- 获胜场数  
);  
  
insert into user values (null, 'zhangsan', '123', 1000, 0, 0);  
insert into user values (null, 'lisi', '123', 1000, 0, 0);  
insert into user values (null, 'wangwu', '123', 1000, 0, 0);

配置 MyBatis

使用 MyBatis 来连接并操作我们的数据库

1. Spring 配置

修改 Spring 的配置文件,使用数据库可以被连接上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:  
  application:  
    name: java_gobang  
  
  datasource:  
    url: jdbc:mysql://127.0.0.1:3306/java_gobang?characterEncoding=utf8&useSSL=false  
    username: root  
    password: 20230153018  
    driver-class-name: com.mysql.cj.jdbc.Driver  
  
mybatis:  
  mapper-locations: classpath:mapper/**Mapper.xml
  • 如果 driver-class-name 报错,可能是没有引入 Maven 依赖的原因
2. 创建实体类

创建一个实体类:用户

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package org.example.model;  
  
public class User {  
    private int userId;  
    private String username;  
    private String password;  
    private int score;  
    private int totalCount;  
    private int winCount;  
  
    public int getUserId() {  
        return userId;  
    }  
  
    public void setUserId(int userId) {  
        this.userId = userId;  
    }  
  
    public String getUsername() {  
        return username;  
    }  
  
    public void setUsername(String username) {  
        this.username = username;  
    }  
  
    public String getPassword() {  
        return password;  
    }  
  
    public void setPassword(String password) {  
        this.password = password;  
    }  
  
    public int getScore() {  
        return score;  
    }  
  
    public void setScore(int score) {  
        this.score = score;  
    }  
  
    public int getTotalCount() {  
        return totalCount;  
    }  
  
    public void setTotalCount(int totalCount) {  
        this.totalCount = totalCount;  
    }  
  
    public int getWinCount() {  
        return winCount;  
    }  
  
    public void setWinCount(int winCount) {  
        this.winCount = winCount;  
    }  
}
3. 创建 Mapper 接口
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package org.example.model;  
  
/**  
 * 接口里面创建一些典型的方法  
 */  
public interface UserMapper {  
    // 往数据库中插入一个用户,用于注册功能  
    void insert(User user);  
  
    // 根据用户名,来查询用户的详细信息,用于登录功能  
    User selectByName(String userName);  
}
4. 使用 MyBatis

实现 MyBatis 的相关 xml 配置文件,来自动实现数据库操作

实现 UserMapper.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="org.example.java_gobang.model.UserMapper">  
    <insert id="insert">  
        insert into user values(null, #{username}, #{password}, 1000, 0, 0);  
    </insert>  
  
    <select id="selectByName" resultType="org.example.java_gobang.model.User">  
        select * from user where username = #{username};  
    </select>  
</mapper>

约定前后端交互接口

登录接口

请求:

  • POST /login HTTP/1.1
  • Content-Type: application/x-222-form-urlencoded
  • username=zhangsan&password=123

响应:

  • HTTP/1.1 200 OK
  • Content-Type: application/json { userId: 1, username: ‘zhangsan’, score: 1000, totalCount: 0, winCount: 0 }
  • 如果登录失败,就返回一个无效的 user 对象
    • 比如,这里的每个属性都是空着的,像 userId => 0

注册接口

请求:

  • POST /register HTTP/1.1
  • Content-Type: application/x-www-form-urlencoded
  • username=zhangsan&password=123

响应:

  • HTTP/1.1 200 OK
  • Content-Type: application/json { userId: 1, username: ‘zhangsan’, score: 1000, totalCount: 0, winCount: 0 }

前后端交互的接口,在约定的时候,是有很多种交互方式的

  • 这里约定好了之后,后续的后端/前端代码,都要严格地遵守这个约定来写代码

获取用户信息

服务器获取到当前登录用户的信息

  • 程序运行过程中,用户登录了之后,让客户端随时通过这个接口,来访问服务器,获取到自身的信息

请求:

  • GET /userInfo HTTP/1.1

响应:

  • HTTP/1.1 200 OK
  • COntent-Type: application/json { userId: 1, username: ‘zhangsan’, score: 1000, totalCount: 0, winCount: 0 }

服务器开发

创建 api.UserAPI 类,主要实现三个方法:

  • login:用来实现登录逻辑
  • register:用来实现注册逻辑
  • getUserInfo:用来实现登录成功后显示用户分数的信息

login

在登录的时候,我们要做的关键操作就是:

  • 根据用户传进来的 username,去数据库里面查一下,看查到的结果能不能和传入进来的 password 匹配
    • 匹配:登陆成功
    • 不匹配:登录失败
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@PostMapping("/login")  
@ResponseBody  
public Object login(String username, String password, HttpServletRequest req) {  
    // 关键操作,就是根据 username 去数据库中进行查找,  
    // 如果能找到匹配的用户,并且密码也一直,就认为登录成功  
    User user = userMapper.selectByName(username); 
    System.out.println("[login] username=" + username);  
    if (user == null || !user.getPassword().equals(password)) {  
        // 登录失败  
        System.out.println("登录失败!");  
        return new User();  
    }  
    HttpSession httpSession = req.getSession(true);  
    httpSession.setAttribute("user", user);  
    return user;  
}
  • HttpServletRequest:可以通过这个对象获取或创建 Session,以及访问其他 HTTP 属性
  • getSession(true)
    • 如果当前请求中没有带上已有的 Session ID,或者 Session 已过期,就会创建一个新的 HttpSession 对象
    • 如果存在有效的 Session,会返回当前 Session
  • getSession(false)
    • 如果当前请求没有有效的 Session,会返回 null,不会创建新的 Session
  • httpSession.setAttribute("user", user)
    • Session 保存一项属性,键是 “user”,值是当前登录的用户对象
    • 保存后,在接下来的任何请求中,只要该用户带着同一个 Session ID(通常通过 cookie 自动携带),就能取出这个对象

register

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@PostMapping("/register")  
@ResponseBody  
public Object register(String username, String password) {  
    try {  
        User user = new User();  
        user.setUsername(username);  
        user.setPassword(password);  
        userMapper.insert(user);  
        return user;  
    }catch (org.springframework.dao.DuplicateKeyException e) {  
        User user = new User();  
        return user;  
    }  
}
  • } catch (org.springframework.dao.DuplicateKeyException e) {
    • 如果数据库表中设置了 username 为唯一索引(UNIQUE),当插入一个已存在的用户名时会抛出此异常
    • 这个异常来自 SpringDataAccessException 系列,专门处理数据库层的错误

getUserInfo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@GetMapping("/userInfo")  
@ResponseBody  
public Object getUserInfo(HttpServletRequest req) {  
    try {  
        HttpSession httpSession = req.getSession(false);  
        User user = (User) httpSession.getAttribute("user");  
        return user;  
    }catch (NullPointerException e) {  
        return new User();  
    }  
}

完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package org.example.java_gobang.api;  
  
import jakarta.annotation.Resource;  
import jakarta.servlet.http.HttpServletRequest;  
import jakarta.servlet.http.HttpSession;  
import org.example.java_gobang.model.User;  
import org.example.java_gobang.model.UserMapper;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.PostMapping;  
import org.springframework.web.bind.annotation.ResponseBody;  
import org.springframework.web.bind.annotation.RestController;  
  
@RestController  
public class UserAPI{  
  
    @Resource  
    private UserMapper userMapper;  
  
    @PostMapping("/login")  
    @ResponseBody  
    public Object login(String username, String password, HttpServletRequest req) {  
        // 关键操作,就是根据 username 去数据库中进行查找,  
        // 如果能找到匹配的用户,并且密码也一直,就认为登录成功  
        User user = userMapper.selectByName(username);  
        System.out.println("[login] username=" + username);  
        if (user == null || !user.getPassword().equals(password)) {  
            // 登录失败  
            System.out.println("登录失败!");  
            return new User();  
        }  
        HttpSession httpSession = req.getSession(true);  
        httpSession.setAttribute("user", user);  
        return user;  
    }  
  
    @PostMapping("/register")  
    @ResponseBody  
    public Object register(String username, String password) {  
        try {  
            User user = new User();  
            user.setUsername(username);  
            user.setPassword(password);  
            userMapper.insert(user);  
            return user;  
        }catch (org.springframework.dao.DuplicateKeyException e) {  
            User user = new User();  
            return user;  
        }  
    }  
  
    @GetMapping("/userInfo")  
    @ResponseBody  
    public Object getUserInfo(HttpServletRequest req) {  
        try {  
            HttpSession httpSession = req.getSession(false);  
            User user = (User) httpSession.getAttribute("user");  
            return user;  
        }catch (NullPointerException e) {  
            return new User();  
        }  
    }  
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
[网页五子棋][匹配模块]实现胜负判定,处理玩家掉线
当前发现此处有一个空指针异常问题,我们怀疑 onlineUserManager 是空的
椰椰椰耶
2025/06/11
610
[网页五子棋][匹配模块]实现胜负判定,处理玩家掉线
网页端五子棋对战(二)---数据库连接&&用户登录注册接口设计&&postman验证
这个默认生成的是properties配置文件,但是我们可以使用更流行的yum文件,如图所示,这个里面的相关的配置可以从之前的项目里面拿,基本大同小异,就是这个名字改一下;
阑梦清川
2025/02/24
1110
网页端五子棋对战(二)---数据库连接&&用户登录注册接口设计&&postman验证
IntelliJ IDEA spring mvc +mybatis 环境搭建服务器(下)直接使用类来生成Mapper:
上篇是使用xml配置来完成mysql数据库的操作,本文将使用注解形式,当然由于本文是较基础的入门级,存在许多地方欠考虑的地方,请大家多包涵。由于代码较简单就省略注释和讲解了。 直接使用类来生成Mapper: package com.nothing.Mapper; import com.nothing.Model.User; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; im
用户1127566
2018/06/06
5590
SpringBoot集成Spring Security(1)——入门程序
因为项目需要,第一次接触 Spring Security,早就听闻 Spring Security 功能强大但上手困难,学习了几天出入门道,特整理这篇文章希望能让后来者少踩一点坑(本文附带实例程序,请放心食用)
全栈程序员站长
2022/09/09
8540
SpringBoot集成Spring Security(1)——入门程序
Spring Boot电商项目
前言:这是我学SpringBoot以来第一个实际应用性的项目,还是有必要写个笔记记录一下,以便之后复习和部分知识重复利用。
害恶细君
2022/11/22
1.5K0
Spring Boot电商项目
❤️爆肝六万字最全总结Java数据库编程MyBatis(建议收藏)
链接:https://pan.baidu.com/s/1FIDi_9QiTuhb4x7pksGOUQ 提取码:kevf
Maynor
2021/10/09
4000
❤️爆肝六万字最全总结Java数据库编程MyBatis(建议收藏)
【从0做项目】Java音缘心动(2)———登录、统一返回设计
全局响应处理,它可以拦截所有被@Controller和@RestController注解修饰的类里的方法(后面为方便描述统一叫Controller方法了哈)。他就是一个增强类
三三是该溜子
2025/02/22
700
【从0做项目】Java音缘心动(2)———登录、统一返回设计
MyBatis-事务管理
项目建立步骤: 1、在src目录下建立dp.properties文件,存放配置信息(需要自己在Oracle数据库建表)
时间静止不是简史
2020/07/27
2780
MyBatis-事务管理
[网页五子棋][对战模块]实现游戏房间页面,服务器开发(创建落子请求/响应对象)
椰椰椰耶
2025/06/01
870
[网页五子棋][对战模块]实现游戏房间页面,服务器开发(创建落子请求/响应对象)
【JavaEE初阶】博客系统后端
创建blog_system项目.将之前写的博客系统前端代码复制到webapp目录下.
xxxflower
2023/10/16
3170
【JavaEE初阶】博客系统后端
MyBatis实现增删改查
生成器这里选择Maven,然后名称可以自己命名,Archetype这里可以使用默认的也可以自己添加,这里使用自己添加的
愷龍
2022/12/20
5740
MyBatis实现增删改查
4. 项目1 —— 实现一个简易博客系统
本项目需要实现一个简易的博客系统,其中功能包括: 1)注册新用户 2)登陆已有用户 3)显示博客列表,包括文章的作者和文章的内容 4)点击文章就会跳转到文章详情 5)发布新博客 6)删除自己的博客
小雨的分享社区
2022/10/26
3280
4. 项目1 —— 实现一个简易博客系统
Mybatis | Mybatis学习笔记(上)
Maven没有在build中配置resource,导致资源读取不到,因为正常情况下,xml配置文件应该放在resources目录下,而Maven约定大于配置,所以可能读取不到
啵啵鱼
2022/11/23
9090
Mybatis | Mybatis学习笔记(上)
springboot第15集:MyBatis分页
我们在测试SQL的时候,要是能够在控制台输出 SQL 的话,是不是就能够有更快的排错效率?
达达前端
2023/10/08
2160
springboot第15集:MyBatis分页
SSM框架(五)Mybatis的配置和CRUD操作
MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) →对象关系映射
HcodeBlogger
2020/07/14
4620
MyBatis入门
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
Java团长
2018/08/03
4080
MyBatis入门
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache softwarefoundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
一觉睡到小时候
2019/07/04
3900
MyBatis入门
杨校老师课堂之Java EE框架实训宠归于好项目开发(二)
1. 编码 ---- 1.1 创建程序包名 cn.javabs.pet.entity cn.javabs.pet.mapper cn.javabs.pet.service.impl cn.javabs.pet.service cn.javabs.pet.controller cn.javabs.pet.util cn.javabs.pet.test ---- 客户模块: 1.2 创建实体类 package cn.javabs.entity; public class Users { // 客户编号
杨校
2020/12/16
7320
Mybatis案例升级版——小案例大道理
纯Mybatis案例升级版——小案例大道理 前言: 这几天看了一本书《原则》,在上面看到了一句话叫“每个人都把自己眼界的局限当成世界的局限”,大学生是?,大学就是鱼缸,世界很大,希望大家好好努力,不要
泰斗贤若如
2019/09/09
5200
Mybatis案例升级版——小案例大道理
jsp整合mybatis案例
读者可以在此基础上,完善下修改 和删除操作,如果修改和删除,是汉字的话,可能会有get传值乱码问题,可以到tomcat的conf目录下,修改server.xml,在connector标签下,增加URIEncoding="utf-8"即可。
张哥编程
2024/12/17
770
相关推荐
[网页五子棋][匹配模块]实现胜负判定,处理玩家掉线
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验