irpas技术客

【BackEnd】SpringBoot整合MybatisPlus实现登录注册功能(适合初学者)_北村南_mybatisplus 注册

大大的周 5682

?一、引言

作者将代码上传到了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;


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #MybatisPlus #注册