• Spring Boot+Mybatis:实现数据库登录注册与两种properties配置参数读取


    〇、参考资料

    1、hutool介绍

    https://blog.csdn.net/abst122/article/details/124091375

    2、Spring Boot+Mybatis实现登录注册

    https://www.cnblogs.com/wiki918/p/16221758.html

    3、Spring Boot读取自定义配置文件

    https://www.yisu.com/zixun/366877.html

    4、Spring Boot读取properties配置文件的两种方式

    https://blog.csdn.net/weixin_42352733/article/details/121830775

    一、概述

    1、技术栈

    Spring Boot+Mybatis+Lombok+Hutool+Slf4j+thymeleaf

    2、项目截图

    二、登录注册(后台)

    1、数据库设计

    表结构:

    表数据:

    建表语句:

    1. CREATE TABLE `user` (
    2. `id` int NOT NULL AUTO_INCREMENT COMMENT '用户表id',
    3. `username` varchar(50) NOT NULL COMMENT '用户名',
    4. `password` varchar(50) NOT NULL COMMENT '用户密码,MD5加密',
    5. `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
    6. `phone` varchar(20) DEFAULT NULL COMMENT '手机号',
    7. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    8. `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
    9. PRIMARY KEY (`id`)
    10. ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表'

    2、POJO(Entity)编写-UserBean.java

    1. package com.boulderaitech.entity;
    2. import com.fasterxml.jackson.annotation.JsonFormat;
    3. import lombok.AllArgsConstructor;
    4. import lombok.Data;
    5. import lombok.NoArgsConstructor;
    6. import java.io.Serializable;
    7. import java.util.Date;
    8. @Data //提供了set、get方法及toString
    9. @AllArgsConstructor
    10. @NoArgsConstructor
    11. public class UserBean implements Serializable {
    12. private Integer id; //为什么用Integer,不用int
    13. private String username;
    14. private String password;
    15. private String email;
    16. private String phone;
    17. @JsonFormat(pattern = "yyyy-MM-mm HH:mm:ss")
    18. private Date create_time;
    19. @JsonFormat(pattern = "yyyy-MM-mm HH:mm:ss")
    20. private Date update_time;
    21. }

    3、Controller编写-UserController.java

    1. package com.boulderaitech.controller;
    2. import cn.hutool.core.lang.Opt;
    3. import cn.hutool.core.util.StrUtil;
    4. import com.boulderaitech.entity.UserBean;
    5. import com.boulderaitech.service.UserService;
    6. import lombok.extern.slf4j.Slf4j;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Controller;
    9. import org.springframework.web.bind.annotation.RequestMapping;
    10. import org.springframework.web.bind.annotation.RequestMethod;
    11. @Slf4j
    12. @Controller // 不能用@RestController
    13. public class UserController {
    14. //将Service注入Web层
    15. @Autowired
    16. UserService userService;
    17. //用户测试
    18. @RequestMapping("/hello")
    19. public String hello() {
    20. return "login";
    21. }
    22. @RequestMapping("/register")
    23. public String register() {
    24. return "signup";
    25. }
    26. @RequestMapping(value = "/login", method = RequestMethod.POST)
    27. public String login(String username,String password) {
    28. UserBean userBean = userService.login(username,password);
    29. log.info("username:{}",username);
    30. log.info("password:{}",password);
    31. //hutool-core 核心,包括Bean操作、日期、各种Util等
    32. if(StrUtil.isNotEmpty(username)) {
    33. if(userBean != null) {
    34. return "success";
    35. //方法引用-遍历集合
    36. //Opt.ofEmptyAble(userBean).ifPresent(System.out::println);
    37. }
    38. } else {
    39. return "用户名不允许为空";
    40. }
    41. return "error";
    42. }
    43. @RequestMapping(value = "/signup", method = RequestMethod.POST)
    44. public String signup(String username,String password) {
    45. userService.insert(username,password);
    46. return "success";
    47. }
    48. }

    4、Service编写-UserService.java

    1. package com.boulderaitech.service;
    2. import com.boulderaitech.entity.UserBean;
    3. import com.boulderaitech.mapper.UserMapper;
    4. import org.springframework.stereotype.Service;
    5. import javax.annotation.Resource;
    6. @Service
    7. public class UserService {
    8. //将dao层属性注入service层,为什么不用Autowired
    9. @Resource
    10. private UserMapper userMapper;
    11. public UserBean login(String username, String password) {
    12. return userMapper.getInfo(username,password);
    13. }
    14. public void insert(String username, String password) {
    15. userMapper.saveUser(username,password);
    16. }
    17. }

    5、Mapper编写-UserMapper.java

    1. package com.boulderaitech.mapper;
    2. import com.boulderaitech.entity.UserBean;
    3. import org.apache.ibatis.annotations.Insert;
    4. import org.apache.ibatis.annotations.Mapper;
    5. import org.apache.ibatis.annotations.Param;
    6. import org.apache.ibatis.annotations.Select;
    7. @Mapper //添加Mapper注解,就不用写xml的mapper映射文件了
    8. public interface UserMapper {
    9. //多个参数要加@Param修饰
    10. //思考:xml中的代码片段怎么配
    11. @Select("SELECT * FROM user WHERE username=#{username} AND password= #{password}")
    12. UserBean getInfo(@Param("username") String username,@Param("password") String password);
    13. @Insert("INSERT INTO user(username,password) VALUE(#{username},#{password})")
    14. void saveUser(@Param("username") String username,@Param("password") String password);
    15. }

    6、配置文件编写-application.properties

    1. # Spring Boot端口号
    2. server.port=9088
    3. # 数据源配置
    4. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    5. spring.datasource.password=qaz123
    6. spring.datasource.username=root
    7. spring.datasource.url=jdbc:mysql://192.168.40.111:3306/visualization?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    8. spring.thymeleaf.prefix=classpath:/templates/

    7、启动类编写-KettleProcessorApplication.java

    1. package com.boulderaitech;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. /**
    5. * Spring Boot启动类,加Spring Boot注解,调用Spring的静态run方法
    6. */
    7. @SpringBootApplication
    8. public class KettleProcessorApplication {
    9. public static void main(String[] args) {
    10. SpringApplication.run(KettleProcessorApplication.class);
    11. }
    12. }

    三、登录注册(前台)

    1、登录页面-login.html

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>login</title>
    6. </head>
    7. <body>
    8. <form role="form" action = "/login" method="post">
    9. 账号:<input type="text" id="username" name = "username"> <br>
    10. 密码:<input type="password" id = "password" name = "password"> <br>
    11. <input type="submit" id = "login" value = "登录">
    12. </form>
    13. <a href="/register">注册</a>
    14. </body>
    15. </html>

    2、注册页面-signup.html

    1. <!--注册页面-->
    2. <!DOCTYPE html>
    3. <html lang="en">
    4. <head>
    5. <meta charset="UTF-8">
    6. <title>注册</title>
    7. </head>
    8. <body>
    9. <form role="form" action="/signup" method="post">
    10. 请输入姓名:<input type="text" name="username" id="name"><br>
    11. 请输入密码:<input type="password" name="password" id="password"><br>
    12. <input type="submit" name="sign" value="提交">
    13. </form>
    14. </body>
    15. </html>

    3、成功页面-success.html

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>success</title>
    6. </head>
    7. <body>
    8. <h1>欢迎,恭喜登录成功/注册成功</h1>
    9. </body>
    10. </html>

    4、失败页面-error.html

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>error</title>
    6. </head>
    7. <body>
    8. <h1>登录失败!</h1>
    9. </body>
    10. </html>

    四、配置读取

    1、配置编写-kettle.properties

    1. # 读取properties的两种方式:https://blog.csdn.net/weixin_42352733/article/details/121830775
    2. environment=xuelei-www
    3. kettle.repository.type=database
    4. kettle.repository.username=admin
    5. kettle.repository.password=admin

    2、POJO(Entity)编写-KettleRepositoryBean.java

    1. package com.boulderaitech.entity;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. import org.springframework.boot.context.properties.ConfigurationProperties;
    6. import org.springframework.stereotype.Component;
    7. @Data
    8. @Component
    9. @NoArgsConstructor
    10. @AllArgsConstructor
    11. @ConfigurationProperties(prefix = "kettle.repository")
    12. public class KettleRepositoryBean {
    13. private String type;
    14. private String username;
    15. private String password;
    16. }

    3、Controller编写-PropertiesController.java

    1. package com.boulderaitech.controller;
    2. import com.boulderaitech.entity.KettleRepositoryBean;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.beans.factory.annotation.Value;
    5. import org.springframework.context.annotation.PropertySource;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.RestController;
    8. @RestController //Controller和RestCOntroller的区别
    9. @PropertySource("classpath:kettle.properties") //默认是application.properties
    10. public class PropertiesController {
    11. @Value("${environment}")
    12. private String envName;
    13. @Autowired
    14. private KettleRepositoryBean kettleRepositoryBean;
    15. @RequestMapping("/getEnv")
    16. public String getEnv() {
    17. return "hello " + envName;
    18. }
    19. @RequestMapping("/getRepoInfo")
    20. public String getRepoInfo() {
    21. return "hello " + kettleRepositoryBean.toString();
    22. }
    23. }

    五、验证

    1、登录

    2、注册

    3、读取单个配置

    4、读取实体类配置(多个)

  • 相关阅读:
    git使用
    【JAVA刷题初阶】刷爆力扣第十弹——二叉树
    Compose 类型稳定性注解:@Stable & @Immutable
    跨域推荐(Cross-Domain Recommendation)的最新综述
    【学习笔记】MySQL(Ⅲ)
    vim练级攻略(精简版)
    JavaScript-es6-新版语法-export-import
    lambda表达式
    Java基础 | Stream流原理与用法总结
    高并发下单例线程安全
  • 原文地址:https://blog.csdn.net/USTSD/article/details/128108197