【Java闭关修炼】SpringBoot项目-贪吃蛇对战小游戏-配置Mysql与注册登录模块1
创始人
2025-05-29 16:53:55

# 配置Mysql与注册登录模块

    • 应用服务模型
    • IDEA 连接数据库
      • 点击IDEA右侧的database 选择mysql数据库
      • 更新数据
    • SpringBoot配置数据库依赖
      • Maven
      • 安装JDBC依赖
      • lombok
      • MySQL Connector/J
      • MyBatis Plus
      • mybatis-plus-generator
      • 解决依赖爆红问题
      • 添加数据库配置
      • SpringBoot中的常用模块
      • pojo层的user表格
      • UserMapper映射层
      • UserController层
      • 添加新用户
      • 删除用户数据
    • 集成 spring security
      • 将依赖导入pom.xml中 重启MAVEN
      • 密码加密算法

应用服务模型

在这里插入图片描述

SpringBoot是一个运行在后端的程序,若干客户端会不断请求springboot 然后springboot会根据请求和数据库进行交互。

IDEA 连接数据库

点击IDEA右侧的database 选择mysql数据库

在这里插入图片描述

  • 这里我填写了用户名和密码 以及数据库名称 记得勾选默认架构
    在这里插入图片描述

  • 点击连接测试 需要下载驱动 点击下载

在这里插入图片描述

  • 点击连接测试 连接成功

在这里插入图片描述

在这里插入图片描述

更新数据

点击表格数据 更改数据 回车 点击上面绿色箭头 上传数据至数据库
在这里插入图片描述

可以看到后台数据库已经更新

在这里插入图片描述

SpringBoot配置数据库依赖

Maven

仓库地址https://mvnrepository.com/

安装JDBC依赖

Spring Boot Starter JDBC

复制以下内容,将依赖粘贴到pom.xml中

在这里插入图片描述

在这里插入图片描述

lombok

在这里插入图片描述

MySQL Connector/J

在这里插入图片描述

MyBatis Plus

在这里插入图片描述

mybatis-plus-generator

在这里插入图片描述

解决依赖爆红问题

点击右侧Maven重新加载

在这里插入图片描述

添加数据库配置

这里的kob是数据库名称

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

SpringBoot中的常用模块

  • pojo层:将数据库中的表格对影成java中的class
  • mapper层 将pojo层的class操作映射成sql语句
  • service层:写具体的业务 组合使用mapper中的操作
  • controller层:负责请求转发 接受页面传过来的参数,传给Service处理,接到返回值,再传给页面

pojo层的user表格

package com.kob.backedn2.pojo;// 数据库一张表对应一个类  @data 将常用的get set方法 添加进去
//@NoArgsConstructor  无参构造函数
//@AllArgsConstructor  有参构造函数
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private Integer id;private String username;private String password;
}

UserMapper映射层

package com.kob.backedn2.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kob.backedn2.pojo.User;
import org.apache.ibatis.annotations.Mapper;// 将增删改查的操作映射成sql语句
@Mapper
public interface UserMapper extends BaseMapper {}

UserController层

package com.kob.backedn2.controller.user;
import com.kob.backedn2.mapper.UserMapper;
import com.kob.backedn2.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class UserController {@AutowiredUserMapper userMapper;//     注解开发  获取所有的用户@GetMapping("/user/all/")public List getAll(){return userMapper.selectList(null);}}

在这里插入图片描述

查询指定用户的信息

package com.kob.backedn2.controller.user;import com.kob.backedn2.mapper.UserMapper;
import com.kob.backedn2.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class UserController {@AutowiredUserMapper userMapper;
//     注解开发  获取所有的用户@GetMapping("/user/all/")public List getAll(){return userMapper.selectList(null);}//    查询指定id的信息  userid 使用{} 进行包围@GetMapping("/user/{userId}")public User getuser(@PathVariable int userId){return userMapper.selectById(userId);}
}
  • 返回指定编号范围的所有用户
package com.kob.backedn2.controller.user;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kob.backedn2.mapper.UserMapper;
import com.kob.backedn2.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;@RestController
public class UserController {@AutowiredUserMapper userMapper;
//     注解开发  获取所有的用户@GetMapping("/user/all/")public List getAll(){return userMapper.selectList(null);}
//    查询指定id的信息  userid 使用{} 进行包围@GetMapping("/user/{userId}/")public List getuser(@PathVariable int userId){QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.ge("id",2).le("id",3);return userMapper.selectList(queryWrapper);}
}

在这里插入图片描述

添加新用户

后端controller层代码 解析浏览器地址栏输入的信息 然后userMapper将数据写入数据库

package com.kob.backedn2.controller.user;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kob.backedn2.mapper.UserMapper;
import com.kob.backedn2.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class UserController {@AutowiredUserMapper userMapper;
//     注解开发  获取所有的用户@GetMapping("/user/all/")public List getAll(){return userMapper.selectList(null);}
//    查询指定id的信息  userid 使用{} 进行包围@GetMapping("/user/{userId}/")public User getuser(@PathVariable int userId){QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.eq("id",userId);return userMapper.selectOne(queryWrapper);}// 插入指定用户数据@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 Successfully";}
}

删除用户数据

// 删除用户   判断urL格式  然后调用该函数@GetMapping("/user/delete/{userId}/")public String deleteUser(@PathVariable int userId){userMapper.deleteById(userId);// 根据Id删除用户return "Delete User Successfully";}

集成 spring security

将依赖导入pom.xml中 重启MAVEN

        org.springframework.bootspring-boot-starter-security3.0.0

密码会重新生成,输入登录,退出之后各种api就不能正常使用 登陆进去之后可以使用

username:user
password:控制台会输出 一串密码

密码加密算法

  • UserDetailsServiceImpl
package com.kob.backedn2.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kob.backedn2.mapper.UserMapper;
import com.kob.backedn2.pojo.User;
import com.kob.backedn2.service.impl.utils.UserDetailsImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;@Service
public class UserDetailsServiceImpl implements UserDetailsService {@Autowiredprivate UserMapper userMapper;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.eq("username", username);User user = userMapper.selectOne(queryWrapper);if (user == null) {throw new RuntimeException("用户不存在");}return new UserDetailsImpl(user);}
}
  • UserDetailsImpl
package com.kob.backedn2.service.impl.utils;import com.kob.backedn2.pojo.User;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;import java.util.Collection;@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDetailsImpl implements UserDetails {private User user;@Overridepublic Collection getAuthorities() {return null;}@Overridepublic String getPassword() {return user.getPassword();}@Overridepublic String getUsername() {return user.getUsername();}@Overridepublic boolean isAccountNonExpired() {return true;}@Overridepublic boolean isAccountNonLocked() {return true;}@Overridepublic boolean isCredentialsNonExpired() {return true;}@Overridepublic boolean isEnabled() {return true;}
}
  • SecurityConfig
package com.kob.backedn2.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}

在这里插入图片描述

在这里插入图片描述

相关内容

热门资讯

【iOS】—— ARC学习 ARC 文章目录ARC内存管理的思考方式自己生成的对象自己持有非自己生成的对象,自己也...
Hadoop_HDFS、Had... Hadoop_HDFS、Hadoop_MapReduce、Hadoop_Yarn 实践 (一) 前要...
Baumer工业相机堡盟相机如... 项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场...
spark第三章:工程化代码 系列文章目录 spark第一章:环境安装 spark第二章:sparkc...
音视频技术开发周刊 | 285 每周一期,纵览音视频技术领域的干货。新闻投稿:contribute...
方向导数与梯度 1 方向导数(二元为例) Σ:z=f(x,y)&...
【字符串】 string1.char str[]类型fgets(s,10000,stdin) cin.getli...
Xmind 2022 for ... XMind 2022 for Mac是一款优秀的思维导图软件,由XMind Ltd.公...
在 Ubuntu 中安装 DO... 了解如何在 Ubuntu 中安装 DOSBox,并配置它来玩旧式 DOS 游戏。DOS...
[图神经网络]图嵌入 将节点映射成D维向量主要有以下几种方法:         ①人工特征工程:...
我的 System Veril...  引言 本文简单介绍 SystemVerilog 的其他程序结构。 前文链接: 我的 ...
Vue2项目总结-电商后台管理... Vue2项目总结-电商后台管理系统 去年做的项目,拖了很久,总算是打起...
【业务安全-02】业务逻辑漏洞... 越权越权即越权查看被人的信息,又分为水平越权和垂直越权,但是两者的本质都...
面试了8家软件公司测试岗位,面... 包含的模块:本文分为十九个模块,分别是:软件测试 基础、l...
不要让ChatGPT成为你的智... 难处 我相信有部分人苦于政策,但是又没有途径,没法享受到chatGpt带...
Redis学习笔记 ---- ... 常见的有五种:String(字符串),Has...
Java实现十类排序算法对比展... Java实现排序算法 本代码展示了Java中常见的十种排序算法,并对每种算法的时间复杂...
SC8P1762E_汇编指令一... 控制类 NOP, 空操作 STOP, 进入休眠模式 CLR...
微信小程序实现图片上传(清晰版... 在wxml文件中添加一个按钮和一个image标签用于显示上传的图片 选择图片 在js文件中添加选择...
Maven打包子模块 项目结构1. project_01: 一个多模块的maven工程2. module_01: 工程pr...
Scala安装及设置查看源代码 文章目录一、安装Scala环境1.1、下载Scala1.2、配置scala环境变量1.3、测试是否安...
使用大规模数据注释和深度学习对... 使用大规模数据注释和深度学习对具有人类水平性能的组织图像进行全细胞分割摘要绪论Mesmer2.1Me...
【数据结构】TreeMap和T... 目录 1、TreeMap 1.1 TreeMap 的简介  1.2 TreeMap 的基本使用 2、...
Django之视图的使用 Django之视图的使用视图基本使用函数视图类视图视图与模板请求对象HttpRequest常见属性和...
零基础能学大数据吗? 大数据入门不像学一门编程语言,自学一段时间就OK了。大数据是需要站在编程的基础上学习的...
OperatorChain设计 在JobGraph构建过程中,会将满足链化条件的StreamOperator连接在一起...
Phoenix整合phoeni... 首先我们添加上maven依赖,可以看到5.1.2 对应的hbase是2.4对吧 然后添加了依赖,...
【华为机试真题详解 Pytho... 文章目录 前言题目描述输入描述输出描述题目解析参考代码 前言 《华为机试真题详解》专栏含牛客网...
Scala---Array方法 Scala之Array的方法 文章目录Scala之Array的方法数组声明一个数组1.元素操作替换...
内存避障的前世今生 相关 《内存避障:一个内存乱序实例》 《内存避障的前世今生》 0 总结 单核下的指令...