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

本文详细介绍了如何使用SpringBoot、Mybatis和Swagger实现用户注册和登录功能,包括实体类设计、DAO与Service接口操作、Controller层API配置以及Swagger接口文档生成。

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


1.实现流程图

在这里插入图片描述

2.后台业务开发

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

    @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>
    
    • SwaggerConfig配置类
    /**
     * 创建Swagger2的配置类
     * @Configuration 注解:表示配置类
     * @EnableSwagger2 注解:启用Swagger2
     * 1:配置生成的文档信息
     * 2:配置生成规则
     */
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket getDocket() {
    
            // 创建API信息构建器
            ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();
            // 创建标题
            apiInfoBuilder.title("接口文档说明")
                    // 创建描述
                    .description("SpringBoot整合Swagger2")
                    // 创建版本
                    .version("1.0")
                    // 创建联系人
                    .contact(new Contact("测试", "http://www.baidu.com", "123@qq.com"));
    
            // 创建ApiInfo对象
            ApiInfo apiInfo = apiInfoBuilder.build();
    
            // 返回指定生成的文档类型
            return new Docket(DocumentationType.SWAGGER_2)
                    // 生成文档的封面信息:标题、描述、版本、联系方式
                    .apiInfo(apiInfo)
                    // 选择需要生成文档的接口
                    .select()
                    // 指定生成文档的接口范围
                    .apis(RequestHandlerSelectors.basePackage("com.cy.api.controller"))
                    // 对哪些请求路径生成文档:any:所有
                    .paths(PathSelectors.any())
                    .build();
        }
    }
    

3.启动项目,测试结果

在这里插入图片描述

在这里插入图片描述

无人机地形分类目标检测数据集一、基础信息数据集名称:无人机地形分类目标检测数据集数据规模:- 训练集:5,888张航拍图片- 验证集:1,684张图片- 测试集:834张图片分类类别:- 建筑(Building)- 稻田(Cropland-Rice Field)- 干燥岩层(Dry Rock)- 草地(Grass)- 房屋(House)- 道路(Road)- 零散树木(Scattered Trees)- 水域(Water)标注格式:YOLO格式标注,包含归一化坐标的边界框与类别标签,适配主流目标检测框架数据特性:无人机高空视角采集,覆盖多种典型地形地貌,包含建筑群、农业区、自然景观等复杂场景二、适用场景地理空间智能分析:支持卫星/无人机影像自动解译系统开发,用于地形分类与地表覆盖分析智慧农业监测:识别稻田、农作物分布等农业用地特征,辅助产量预估与农田管理基建规划应用:检测道路网络、建筑群分布,为城市扩展与基础设施建设提供数据支持环境研究:分析水域分布与植被覆盖变化,助力生态保护与自然灾害监测三、核心优势多维度地形覆盖:8大类精细分类,涵盖人工建筑、农业用地、自然地貌三大维度,满足复杂场景需求精准空间标注:经专业地理信息团队标注,边界框精准定位小型目标(如独立房屋)与延展性目标(如道路)航拍视角适配:专为俯视角度优化,包含不同光照条件下的地形特征,增强模型实际部署能力工程友好性:严格划分训练/验证/测试集,YOLO格式即装即用,支持快速迁移至YOLOv5/v7/v8等主流检测框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的泪丶烫伤我的脸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值