0
点赞
收藏
分享

微信扫一扫

SpringBoot+Mybatis+Swagger实现用户注册、登录功能

Sky飞羽 2022-04-13 阅读 104

文章目录


1.实现流程图

在这里插入图片描述

2.后台业务开发

  • 添加实体类(entity、beans、pojo)

    • 使用Easy Code插件快速生成,参考:https://blog.csdn.net/yinwq/article/details/106028976(可自行修改生成模板)
    @ApiModel(value = "User实体类", description = "用户(Users)实体类")
    @Data
    public class Users implements Serializable{
    	private static final longserialVersionUID = 624362698554707695L;
    	/** 主键id */
    	@ApiModelProperty(value = "主键id")
    	private Integer userId;
    	/** 用户名 */
    	@ApiModelProperty(value = "用户名")
    	private String username;
    	/** 密码 */
    	@ApiModelProperty(value = "密码")
    	private String password;
    	/** 头像 */
    	@ApiModelProperty(value = "头像")
    	private String userImg;
    	/** 注册时间 */
    	@ApiModelProperty(value = "注册时间")
    	private Date userRegtime;
    	/** 更新时间 */
    	@ApiModelProperty(value = "更新时间")
    	private Date userModtime;
    }
    
  • 完成DAO层

    • 创建DAO接口、自定义操作方法
    public interface UserDAO {
    	// 添加用户
        int addUser(Users user);
        // 根据用户名查询用户
        Users getUserByName(String name);
    }
    
    • 创建DAO接口对应的Mapper.xml文件并完成配置
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPEmapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.cy.dao.UserDAO">
        <insert id="addUser">
    		insert into users(username, password, user_img, user_regtime, user_modtime) values (#{username}, #{password}, #{userImg}, #{userRegtime}, #{userModtime})
    	</insert>
    
        <select id="getUserByName" resultType="com.cy.entity.Users">
    		SELECT 
    			user_id as userId,
                username,
                password,
                user_img as userImg,
                user_regtime as userRegtime,
                user_modtime as userModtime
            FROM 
    			users
            WHERE 
    			username = #{name}
    	</select>
    </mapper>
    
  • 完成Service层

    • 创建Service接口、自定义操作方法
    public interface UserService {
    	// 添加用户
        ResultVo addUser(String name, String password);
        // 根据用户名查询用户
        ResultVo checkLogin(String name, String password);
    }
    
    
    • 创建Service接口对应的ServiceImpl实现类
    @Service
    public class UserServiceImpl implements UserService {
    
    	@Resource
        private UserDAO userDAO;
    
        @Transactional
        public ResultVo addUser(String name, String password) {
    		synchronized(this) {
    	        // 1. 根据用户名查询用户是否存在
                Users user = userDAO.getUserByName(name);
    
                // 2. 如果用户不存在,则添加用户
                if(user == null) {
    			    String pwd = MD5Utils.md5(password);
                    user = new Users();
                    user.setUsername(name);
                    user.setPassword(pwd);
                    user.setUserImg("img/default.jpg");
                    user.setUserRegtime(new Date());
                    user.setUserModtime(new Date());
                    int addUser = userDAO.addUser(user);
                    if(addUser > 0) {
    				    return new ResultVo(200, "注册成功", user);
    			    }else{
    					return new ResultVo(500, "注册失败", null);
    				}
    	        }else{
    				// 3. 如果用户存在,则返回用户已存在
    			    return new ResultVo(500, "用户已存在", null);
    			}
    		}
       }
    
    	@Override
        public ResultVo checkLogin(String name, String password) {
    		// 1. 根据用户名查询用户是否存在
            Users user = userDAO.getUserByName(name);
            if(user == null) {
    			return new ResultVo(500, "用户不存在", null);
    		} else {
    			// 2. 如果用户存在,则校验密码是否正确
                String pwd = MD5Utils.md5(password);
                if(pwd.equals(user.getPassword())) {
    				return new ResultVo(200, "登录成功", user);
    			} else {
    				return new ResultVo(500, "密码错误", null);
    			}
            }
        }
    }
    
  • 完成Controller层

    • 创建Controller类
    @RestController
    @RequestMapping("/user")
    @Api(tags = "用户管理模块")
    public class UserController{
    
    	@Resource
        private UserService userService;
    
        @PostMapping("/register")
    	@ApiOperation("用户注册")
    	@ApiImplicitParams({
    		@ApiImplicitParam(name = "username",value = "用户名",dataType = "String",required = true),
            @ApiImplicitParam(name = "password",value = "密码",dataType = "String",required = true)
        })
    	public ResultVo register(@RequestParam("username")String username, @RequestParam("password")String password) {
    		return userService.addUser(username, password);
    	}
    		
    	@GetMapping("/login")
    	@ApiOperation("用户登录")
    	@ApiImplicitParams({
    		@ApiImplicitParam(name = "username",value = "用户名",dataType = "String",required = true),
            @ApiImplicitParam(name = "password",value = "密码",dataType = "String",required = true)
        })
    	public ResultVo login(@RequestParam("username")String username, @RequestParam("password")String password) {
    		return userService.checkLogin(username, password);
    	}
    }
    
  • 其他类和配置

    • 公用返回结果Vo
    @ApiModel(value = "ResultVo", description = "公用返回结果Vo")
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class ResultVo{
    
    	@ApiModelProperty(value = "状态码", example = "200")
    	private Integer code;
    
        @ApiModelProperty(value = "返回信息", example = "success")
    	private String msg;
    
        @ApiModelProperty(value = "返回数据", example = "data")
    	private Object data;
    }
    
    • MD5Utils工具类
    public class MD5Utils{
    	public static String md5(String password) {
    		//生成一个md5加密器
    	    try{
    			MessageDigest md = MessageDigest.getInstance("MD5");
    	        //计算MD5 的值
    	        md.update(password.getBytes());
    	        //BigInteger 将8位的字符串 转成16位的字符串 得到的字符串形式是哈希码值
    	        //BigInteger(参数1,参数2) 参数1 是 1为正数 0为0 -1为负数
    	        return new BigInteger(1, md.digest()).toString(16);
    		} catch (NoSuchAlgorithmException e) {
    				e.printStackTrace();
    		}
    		return null;
    	}
    }
    
    • 配置数据源
    # 配置数据源
    spring:
      datasource:
        druid:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://localhost:3306/数据库?characterEncoding=utf-8&useSSL=false
          username: 数据库用户名
          password: 数据库密码
          # 初始化容器大小
          initial-size: 1
          # 最小连接数
          min-idle: 1
          # 最大连接数
          max-active: 20
    
    # 配置映射文件路径及实体类包名
    mybatis:
      type-aliases-package: com.cy.entity
      mapper-locations: classpath:mapper/*Mapper.xml
    
    • 启动类
    @SpringBootApplication
    @MapperScan("com.cy.dao")
    @ComponentScan(basePackages ={"com.cy"})
    public class ApiApplication{
    	public static void main(String[]args) {
    		SpringApplication.run(ApiApplication.class, args);
    	}
    }
    
    • pom.xml
    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
       <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.5.12</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>mapper</artifactId>
        <packaging>jar</packaging>
    
        <properties>
            <java.version>1.8</java.version>
            <mysql.version>5.1.47</mysql.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
                <scope>runtime</scope>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
    
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.2</version>
            </dependency>
    				
    				<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>3.0.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-spring-boot-starter</artifactId>
                <version>3.0.3</version>
            </dependency>
        </dependencies>
    </project>
    

3.启动项目,测试结果

  • swagger接口文档地址:http://localhost:8080/doc.html

在这里插入图片描述

在这里插入图片描述

举报

相关推荐

0 条评论