spring boot学习--简易web服务--接入MyBatis

95 阅读2分钟

上文简易的web服务中,明显在存在多个用户需要登录的时候,是无法满足的。所以本人引入MyBatis通过操作数据库解决多用户查询,密码配对问题

前置条件

  1. java基础知识,maven的使用
  2. jdk的基本了解
  3. mysql的使用
  4. 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='聊天-用户表'

image.png

编写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;
    }
}

启动,进行调试

image.png

image.png

可以看到我们输入不同的username后得到的用户数据就不一样啦。至此,简单的实现了通过接入MyBatis实现对数据库的操作