上文简易的web服务中,明显在存在多个用户需要登录的时候,是无法满足的。所以本人引入MyBatis通过操作数据库解决多用户查询,密码配对问题
前置条件
- java基础知识,maven的使用
- jdk的基本了解
- mysql的使用
- spring boot 框架总体设计概念
本次学习目的
学习在spring boot中操作MySQL数据
修改pom.xml文件,引入MyBatis依赖包
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- MyBatis Starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.2</version> <!-- 版本号根据实际需求调整 -->
</dependency>
<!-- 数据库驱动,例如 MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
修改配置文件application.yml
# 数据源配置
spring:
application:
name: one
server:
port: 6688
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.2.220:3306/jstu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: jstu
password: 123456
简历一个简单的用户表
建表语句
CREATE TABLE `gw_chat_users` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(100) NOT NULL COMMENT '用户名称', `password` varchar(100) NOT NULL COMMENT '密码', `nickname` varchar(200) NOT NULL COMMENT '昵称', `avatar` varchar(500) NOT NULL COMMENT '头像', `sex` tinyint(1) NOT NULL DEFAULT '1' COMMENT '性别 1-男 2-女 3-未知', `is_used` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已被占用 1-是 0-否', `login_count` int(11) NOT NULL DEFAULT '0' COMMENT '登录次数', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COMMENT='聊天-用户表'
编写mapper
这里只做一个简单的用户查询操作
package com.example.mapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM `gw_chat_users` " +
"WHERE `username` = #{username} limit 1")
User getUserByUsername(String username);
}
编写实体类entity,用于映射数据库字段到java类中
package com.example.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.io.Serializable;
import java.util.Date;
@TableName(value = "gw_chat_users", autoResultMap = true)
public class User implements Serializable {
@TableId("id")
private Integer id;
/**
* 用户账号
*/
@TableField("username")
private String username;
/**
* 用户昵称
*/
@TableField("nickname")
private String nickname;
/**
* 用户昵称
*/
@TableField("password")
private String password;
/**
* 用户头像
*/
@TableField("avatar")
private String avatar;
/**
* 用户性别
*/
@TableField("sex")
private Integer sex;
/**
* 登录次数
*/
@TableField("login_count")
private Integer loginCount;
/**
* 登录次数
*/
@TableField("create_time")
private Date createTime;
public Integer getId () {return id;}
public String getUsername(){return username;}
public String getNickname(){return nickname;}
public String getPassword() {return password;}
public String getAvatar(){return avatar;}
public Date getCreateTime(){return createTime;}
public Integer getSex() {return sex;}
public Integer getLoginCount() {return loginCount}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("username", getUsername())
.append("password", getPassword())
.append("nickname",getNickname())
.append("avatar", getAvatar())
.append("sex", getSex())
.append("login_count", getLoginCount())
.append("create_time", getCreateTime())
.toString();
}
}
控制器逻辑调整一下
package com.example.one;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@RestController
public class LoginController {
private static final Logger logger = LoggerFactory.getLogger(LoginController.class);
@Resource
UserMapper userMapper;
@GetMapping("/login")
public String login(@RequestParam("username") String username, @RequestParam("password") String password) {
User user = userMapper.getUserByUsername(username);
logger.warn(user.toString());
if (!Objects.equals(password, user.getPassword())) {
return "密码错误";
}
return "hello:" + username;
}
}
启动,进行调试
可以看到我们输入不同的username后得到的用户数据就不一样啦。至此,简单的实现了通过接入MyBatis实现对数据库的操作