一、引言
作者将代码上传到了Gitee,小伙伴可以直接Clone项目到本地
项目地址:https://gitee.com/cai-zijing/SpringBoot_MybatisPlus_Login_Demo.git
再告诉大家一个非常好用的插件Gitee,主要功能为在IDEAL中与远程仓库进行可视化交互
输入项目地址一步解决项目克隆
二、项目结构
三、代码
3.1 pom.xml依赖
注意MybatisPlus虽然是Mybatis的扩展,但是在xml依赖中不可加Mybatis
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.bcn</groupId>
<artifactId>Login_MybatisPlus_Demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Login_MybatisPlus_Demo</name>
<description>Login_MybatisPlus_Demo</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!--mp代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.2 applicaiton.yml配置文件
因人喜好是否将application.propertie重命名为application.yml
server:
port: 9091
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://localhost:3306/login?serverTimezone=UTC
servlet:
multipart:
max-request-size: 100MB
max-file-size: 50MB
# Show sql
logging:
level:
com:
example:
mapper: debug
3.3 User实体类
@Data各个属性getter、setter等方法
@AllArgsConstructor有参构造函数
@NoArgsConstructor无参构造函数
package com.bcn.login_mybatisplus_demo.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author 大白菜
* @date Created in 2022/9/27 9:29
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@TableId(type = IdType.AUTO)
public Integer uid;
public String uname;
public String uaccount;
private String upassword;
public User(String uname, String uaccount, String upassword) {
this.uname = uname;
this.uaccount = uaccount;
this.upassword = upassword;
}
}
3.4 UserMapper接口层
注意MybatisPlus中Mapper是需要继承BaseMapper的,BaseMapper提供了常见的CRUD方法,这就是与Mybatis最大的不同
@Mapper MybatisPlus数据访问层标志
@Repository SpringBoot数据访问层标志
package com.bcn.login_mybatisplus_demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bcn.login_mybatisplus_demo.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
* @author 大白菜
* @date Created in 2022/9/27 9:30
*/
@Repository
@Mapper
public interface UserMapper extends BaseMapper<User> {
User searchByUaccount(String uact);
}
3.5 UserService业务接口层
当业务需求较为简单时,该层可舍弃,只用ServiceImpl即可
package com.bcn.login_mybatisplus_demo.service;
import com.bcn.login_mybatisplus_demo.pojo.User;
/**
* @author 大白菜
* @date Created in 2022/9/27 9:31
*/
public interface UserService {
public String loginService(String uact, String upwd);
public String registerService(User user);
}
3.6 UserServiceImpl业务层
@Service 业务层标志
userMapper.insert(T)方法是BaseMappaer中的方法,我们不需要在xml中写sql即可使用,这些CRUD方法提高了一定的开发效率
package com.bcn.login_mybatisplus_demo.service.ServiceImpl;
import com.bcn.login_mybatisplus_demo.mapper.UserMapper;
import com.bcn.login_mybatisplus_demo.pojo.User;
import com.bcn.login_mybatisplus_demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 大白菜
* @date Created in 2022/9/27 9:31
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
@Override
public String loginService(String uact, String upwd) {
User user = userMapper.searchByUaccount(uact);
if (user != null) {
if (upwd.equals(user.getUpassword())) {
return "SUCCESS";
} else {
return "密码错误";
}
}
return "此用户不存在";
}
@Override
public String registerService(User user) {
User userE = userMapper.searchByUaccount(user.getUaccount());
if (userE == null) {
if ("".equals(user.getUpassword())) {
return "请输入密码";
} else if ("".equals(user.getUname())) {
return "请输入用户昵称";
} else {
userMapper.insert(user);
return "SUCCESS";
}
}
return "用户已存在";
}
}
3.7 UserController控制层
@SuppressWarnings({"all"}) 控制台输出过滤掉警告信息
@RestController控制层标志,等价于@Controller+@ResponseBody
@RequestMapping() 对外接口地址
package com.bcn.login_mybatisplus_demo.controller;
import com.bcn.login_mybatisplus_demo.pojo.User;
import com.bcn.login_mybatisplus_demo.service.ServiceImpl.UserServiceImpl;
import com.bcn.login_mybatisplus_demo.util.Result;
import com.bcn.login_mybatisplus_demo.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 大白菜
* @date Created in 2022/9/27 9:31
*/
@SuppressWarnings({"all"})
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
UserServiceImpl userServiceImpl;
@RequestMapping("/login")
public Result login(@RequestParam String uact, @RequestParam String upwd) {
String msg = userServiceImpl.loginService(uact, upwd);
if (("SUCCESS").equals(msg)) {
return ResultUtil.success("登录成功");
} else {
return ResultUtil.error(msg);
}
}
@RequestMapping("/register")
public Result login(@RequestBody User user) {
String msg = userServiceImpl.registerService(user);
if (("SUCCESS").equals(msg)) {
return ResultUtil.success("注册成功");
} else {
return ResultUtil.error(msg);
}
}
}
3.8 Result、ResultCode、ResultUtil 返回结果工具类
在正式开发中,我们返回给前端除了Body之外,还需要状态码与状态信息,这就需要使用到Result工具类,其返回效果如下
Result类
package com.bcn.login_mybatisplus_demo.util;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author 大白菜
* @date Created in 2022/9/27 9:34
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {
private Integer code;
private String msg;
private T data;
}
ResultCode类
package com.bcn.login_mybatisplus_demo.util;
/**
* @author 大白菜
* @date Created in 2022/9/27 9:35
*/
public enum ResultCode {
// 自定义枚举内容
SUCCESS(200, "Success"),
ERROR(-100, "Error");
private Integer code;
private String msg;
ResultCode(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
ResultUtil类
package com.bcn.login_mybatisplus_demo.util;
/**
* @author 大白菜
* @date Created in 2022/9/27 9:34
*/
public class ResultUtil {
/**
* 成功且带数据
**/
public static Result success(Object object) {
Result result = new Result();
result.setCode(ResultCode.SUCCESS.getCode());
result.setMsg(ResultCode.SUCCESS.getMsg());
result.setData(object);
return result;
}
/**
* 成功但不带数据
**/
public static Result success() {
return success(null);
}
/**
* 失败
**/
public static Result error(Object object) {
Result result = new Result();
result.setCode(ResultCode.ERROR.getCode());
result.setMsg(ResultCode.ERROR.getMsg());
result.setData(object);
return result;
}
}
3.9 Mapper.xml映射文件
使用Mybatis需要在resource下创建mapper文件夹,里面存放各类xml映射文件
<?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="com.bcn.login_mybatisplus_demo.mapper.UserMapper">
<select id="searchByUaccount" resultType="com.bcn.login_mybatisplus_demo.pojo.User">
select *
from user
where uaccount = #{uaccount}
</select>
</mapper>
3.10 login.sql数据库文件
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`uname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`uaccount` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`upassword` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '皮卡丘', '123456', '123456');
INSERT INTO `user` VALUES (4, '杰尼龟', '1234567', '123456');
INSERT INTO `user` VALUES (7, '妙蛙种子', '12345678', '123456');
SET FOREIGN_KEY_CHECKS = 1;
版权归原作者 北村南 所有, 如有侵权,请联系我们删除。