• 4.1 配置Mysql与注册登录模块


    😊如果写的可以帮到你,可以点个赞吗,你的支持就是我写下去的动力。😊

    本文阅读大概 30 分钟, 自己写加思考大概 2 ~ 5 小时。建议:代码可以手抄, 但不要复制。


    1. 整体框架

    整体框架


    2. 配置MySQL


    2.1 下载MySQL

    1. Windows下载地址

    2. 建议下载第二个:


    mysql下载


    2.2 安装MySQL

    点击下载成功的安装包:


    在这里插入图片描述


    在这里插入图片描述


    其他页面全选默认即可


    2.3 配置MySQL

    1.C:\Program Files\MySQL\MySQL Server 8.0\bin(如果安装到了其他目录,填写相应目录的地址即可)添加到环境变量PATH中,这样就可以在任意目录的终端中执行mysql命令了。我这里使用的是自己电脑原来安装的MySQL Server 5.7,本质上没有什么区别。


    在这里插入图片描述


    在这里插入图片描述


    在这里插入图片描述


    2. mysql服务的关闭与启动(默认开机自动启动,如果想手动操作,可以参考如下命令)
    打开命令行,输入以下命令
    关闭:net stop mysql80
    启动:net start mysql80

    或者右击我的电脑,选择 管理 ->服务和应用程序 -> 服务 -> MySQL 可以选择手动 或者关闭。


    在这里插入图片描述


    3. mysql的常用操作:注意每一条命令需要加分号;结尾。

    • 连接用户名为root,密码为123456的数据库服务:mysql -uroot -p123456
    • show databases; :列出所有数据库
    • create database kob;:创建数据库
    • drop database kob;:删除数据库
    • use kob;:使用数据库kob
    • show tables;:列出当前数据库的所有表
    • create table user(id int, username varchar(100));:创建名称为user的表,表中包含id和username两个属性。
    • drop table user;:删除表
    • insert into user values(1, 'yxc');:在表中插入数据
    • select * from user;:查询表中所有数据
    • delete from user where id = 2;:删除某行数据

    具体操作如下:


    在这里插入图片描述


    在这里插入图片描述


    • 创建数据库kob
    • 在kob下创建表user
    • 插入两条数据

    在这里插入图片描述


    4. 使用工具来操作数据库。
    我自己也不喜欢写sql语句( ),所以平常使用 Navicat for MySQL绿色版 or Navicat for MySQL 来操作数据库,连接上直接就是按钮操作,挺方便的!刚开始接触sql的同学可以多写写hh,至于教程的话网上一大堆,百度一下花个几分钟学一下就行。
    界面大概如下:


    在这里插入图片描述


    2.3 IDEA连接MySQL

    1. 连接,点击右边的数据库 -> + -> 数据源 -> MySQL,输入账号、密码、数据库名称,这里是kob,点击测试连接,成功后点击应用就可以了。


    在这里插入图片描述


    在这里插入图片描述


    在这里插入图片描述


    2. 操作数据库
    连接成功后打开数据库,打开我们创建的表user


    在这里插入图片描述


    3. 配置SpringBoot

    3.1 添加依赖

    1.pom.xml下添加依赖,依赖可以 Maven仓库地址 中寻找。
    Spring Boot Starter JDBC
    Project Lombok
    MySQL Connector/J
    mybatis-plus-boot-starter
    mybatis-plus-generator
    具体如下:

    <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starter-jdbcartifactId>
         <version>2.7.0version>
    dependency>
    <dependency>
          <groupId>org.projectlombokgroupId>
           <artifactId>lombokartifactId>
           <version>1.18.22version>
           <scope>providedscope>
    dependency>
    <dependency>
           <groupId>mysqlgroupId>
           <artifactId>mysql-connector-javaartifactId>
           <version>8.0.28version>
    dependency>
    <dependency>
           <groupId>com.baomidougroupId>
           <artifactId>mybatis-plus-boot-starterartifactId>
           <version>3.5.1version>
    dependency>
    <dependency>
           <groupId>com.baomidougroupId>
           <artifactId>mybatis-plus-generatorartifactId>
           <version>3.5.1version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    选择哪个版本号,都可以,个人习惯是最新的几个版本里选用的人最多的版本。
    点击 maven 的重新加载,刷新 Maven


    在这里插入图片描述


    2.application.properties中添加数据库配置:

    //输入你自己的用户和密码
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.url=jdbc:mysql://localhost:3306/kob?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    • 1
    • 2
    • 3
    • 4
    • 5

    点击运行 出现报错 可能是因为路径问题。
    点击运行,输入网址 http://127.0.0.1:8080/pk/index/ 显示界面就成功了


    在这里插入图片描述


    3.2 实现简单的CRUD

    1. SpringBoot中的常用模块
    pojo层:将数据库中的表对应成Java中的Class
    mapper层(也叫Dao层):将pojo层的class中的操作,映射成sql语句
    service层:写具体的业务逻辑,组合使用mapper中的操作
    controller层:负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面


    在这里插入图片描述


    详细解释:
    后面补充


    2.
    取消软件包压缩:设置 -> 树外观 -> 压缩空的中间软件包

    2.1backend 下创建 pojo 包 创建一个类 User,将数据库中的表 User转化为 Java 中的 User.class

    @Data
    @NoArgsContructor
    @AllArgsContructor
    public class User {
        private Integer id;
        private String username;
        private String password;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述


    2.2backend创建mapper 包,创建一个 Java 类的接口 UserMapper

    @Mapper
    public interface UserMapper extends BaseMapper<User> {
        
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述


    在这里插入图片描述


    2.3backendcontroller 下创建 user 包然后创建 UserController.

    @RestController
    public class UserController {
    
        @Autowired
        UserMapper userMapper;
    
        /**
         * 查询所有用户
         */
        @GetMapping("/user/all/")
        public List<User> getAll() {
            return userMapper.selectList(null);
        }
    
        /**
         * 查询单个用户
         */
        @GetMapping("/user/{userId}/")
        public User getUser(@PathVariable int userId) {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("id",userId);
    
            return userMapper.selectOne(queryWrapper);
            
            // 范围遍历
            // public List getUser(int userId)
            // queryWrapper.ge("id", 2).le("id", 3);
            // return userMapper.selectList(queryWrapper);
        }
    
        /**
         * 添加某个用户 直接输入 id name password
         * @param userId
         * @param username
         * @param password
         * @return Add User Sucessfully
         */
        @GetMapping("/user/add/{userId}/{username}/{password}/")
        public String addUser (@PathVariable int userId,
                               @PathVariable String username,
                               @PathVariable String password) {
    
            User user = new User(userId, username, password);
            userMapper.insert(user);
            return "Add User Sucessfully";
        }
    
        /**
         * 删除某个用户,直接输入 id
         * @param userId
         * @return Delete User Successfully
         */
        @GetMapping("/user/delete/{userId}/")
        public String deleteUser(@PathVariable int userId) {
            userMapper.deleteById(userId);
            return "Delete User Successfully";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    1. 查询user中的全部数据。

    在这里插入图片描述


    1. 查询user中的单个数据。

    在这里插入图片描述


    1. 添加 user 中的数据。

    在这里插入图片描述


    在这里插入图片描述


    1. 删除 user 中的数据。

    在这里插入图片描述


    在这里插入图片描述


    测试127.0.0.1:8080/user/all


    4. 配置Spring Security

    是用户认证操作 – 一种授权机制,目的是安全

    4.1 添加依赖:

    1. 添加依赖,添加之后刷新。
    spring-boot-starter-security

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-securityartifactId>
        <version>2.7.0version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    刷新之后显示登陆:


    在这里插入图片描述


    默认的叫 Usernameuser ,密码自动生成。


    在这里插入图片描述


    4.2 与数据库对接 :

    backendservice 创建 impl 包,新建 UserDetailsServiceImpl 类。
    实现service.impl.UserDetailsServiceImpl类,继承自UserDetailsService接口,用来接入数据库信息。

    @Service
    public class UserDetailsServiceImpl implements UserDetailsService {
    	//快捷键 windowsalt + insert / mac是option + enter
        @Autowired
        private UserMapper userMapper;
    	// 传入 username 返回对应的信息,在这里也就是id name pwd
        @Override
        public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("username", username);
            User user = userMapper.selectOne(queryWrapper);
            if (user == null) {
                throw new RuntimeException("用户不存在");
            }
    
            return new UserDetailsImpl(user);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述


    backendservice 包的 impl 包下创建utils 包 新建 UserDetailsImpl

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class UserDetailsImpl implements UserDetails {
    
        private User user;
    
        @Override
        public Collection<? extends GrantedAuthority> getAuthorities() {
            return null;
        }
    
        @Override
        public String getPassword() {
            return user.getPassword();
        }
    
        @Override
        public String getUsername() {
            return user.getUsername();
        }
    
        @Override
        public boolean isAccountNonExpired() {
            return true;
        }
    
        @Override
        public boolean isAccountNonLocked() {
            return true;
        }
    
        @Override
        public boolean isCredentialsNonExpired() {
            return true;
        }
    
        @Override
        public boolean isEnabled() {
            return true;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这里插入图片描述


    4.3 测试 :

    如果实现登录的话,需要提供一个 PassworEncoder
    如果在数据库中指定明文来存储,需要在自己的密码加上{noop},才可以登录。

    1. 实现密文存储:
    config 下新建 SecurityConfig
    实现config.SecurityConfig类,用来实现用户密码的加密存储。

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig {
        
        @Bean
        public PasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述


    2. 测试
    Test 下生成需要转换的密文,同时修改数据库下的密码为密文。


    在这里插入图片描述


    查看生成的密文:

    $2a$10$4AaK80JnfmRFQA2nRUnNl.Vt.MhAvdu5FeyqxbMJDViOPDHuBSlhS
    $2a$10$swlEAIVf4xw7qT/Mykk5leYlylUnToz3oy0dUifEWt4b2NTGOGzB.
    $2a$10$zhG9.Pa5nIOYetvqkjo08echmbS3Ymhme3IHD1anwleqEbkc1y8ue
    $2a$10$QQuex9RceLQE6GRZeTdGcOaWvsNq.Jxb7FCnrP9OqcL1lRW0cXm6e
    $2a$10$w418fbr8WS3lr.X8/fORreX.RpnVtosjH4uB99qTRBPlp2jYCnamC
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在数据库中更改密码为密文:修改后上传刷新。一定要记得上传。


    在这里插入图片描述


    重启项目,进入login页面

    登录成功,只要不给你显示密码错误就代表成功,显示Whitelabel Error Page也是成功,自己在后面添加路径就可以了登录。


    在这里插入图片描述


    注意,这里地址栏是我自己手动输入的,如果你没有设置跳转的话,应该是显示Whitelabel Error Page,这样也算登录成功。


    在这里插入图片描述


    4.4 使用密文添加用户 :

    修改 controller 下的 userUserController的注册,密码直接存储加密之后的密码。

    @GetMapping("/user/add/{userId}/{username}/{password}/")
        public String addUser(
                @PathVariable int userId,
                @PathVariable String username,
                @PathVariable String password) {
            PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
            String encodedPassword = passwordEncoder.encode(password);
            User user = new User(userId, username, encodedPassword);
            userMapper.insert(user);
            return "Add User Successfully";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述


    在这里插入图片描述


    在这里插入图片描述


    5. 代码地址

    https://git.acwing.com/syy/kob/-/commit/7cf62c4ed7104605f4992ffcf4156a62ab6446a6

  • 相关阅读:
    STM32——DS18B20温度传感器
    【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述
    【JAVA学习笔记】46 - (43)第十一章作业
    好书推荐|VirtualLab Fusion入门与进阶实用教程(第二版)
    06文本搜索工具——grep以及正则表达式
    抓住晨会驱动【目标管理】
    JavaScript中用jquery获取鼠标的定位和对节点文本操作
    Spring Cloud Gateway实现限流
    Kafka生产者(二)
    大数据算法系列11:线性规划
  • 原文地址:https://blog.csdn.net/qq_41046821/article/details/126086393