PS:本篇文章主体内容并不涉及复杂代码的编写~~请大家放心食用hh

目录

一、整体框架

二、配置MySQL

1、下载MySQL

2、安装MySQL

3、配置MySQL

4、IDEA 连接 MySQL

三、配置 SpirngBoot

1、添加依赖

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

3、实现简单的 CRUD

四、配置Spring Security

1、添加依赖

2、与数据库对接:

3、测试


一、整体框架

应用模型:
SpringBoot的角色是用来处理用户请求,client端向spring Boot发送请求,然后向数据库请求数据,数据库返回数据给前端。
在我的理解下 SpringBoot 类似于 管家 的角色。

二、配置MySQL

1、下载MySQL

下载地址:

MySQL :: Download MySQL Installer

2、安装MySQL

其他默认一直next就可以

3、配置MySQL

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

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

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

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, 'gcy');:在表中插入数据
+ select * from user;:查询表中所有数据
+ delete from user where id = 2;:删除某行数据

1、 创建数据库kob
2、在kob下创建表user
3、插入两条数据

使用工具在操作数据库(WorkBench)

操作大家自行百度即可,基本操作都非常简单~~

4、IDEA 连接 MySQL

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

三、配置 SpirngBoot

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.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><version>2.7.0</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version><scope>provided</scope>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version>
</dependency>

记得刷新~

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

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

3、实现简单的 CRUD

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

注解?注解的作用?

使用注解可以帮助我们不在需要配置繁杂的xml文件,以前最基本的web项目是需要写xml配置的,需要标注你的哪个页面和哪个 servle 是对应的,注解可以帮助我们减少这方面的麻烦。

@Controller:用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。

@RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。

@Autowired:自动导入依赖的bean

@Service:一般用于修饰service层的组件

@Bean:用@Bean标注方法等价于XML中配置的bean。

@AutoWired:自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。

可以不用花时间去了解类似注解的实现原理,用的时候背下来就行,这里只是简单记录一下,如果想深入了解,可以百度。

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

@Data
@NoArgsContructor
@AllArgsContructor
public class User {private Integer id;private String username;private String password;
}

在 backend 创建 mapper 包,创建一个 接口 UserMapper

@Mapper
public interface UserMapper extends BaseMapper<User> {}

在backend 的 controller 下创建 user 包然后创建 UserController

@RestController
public class UserController {@AutowiredUserMapper 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<User> 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";}
}

查询user中的全部数据:

查询user中的单个数据:

添加 user 中的数据:

删除 user 中的数据:

四、配置Spring Security

什么是 Spring Security ?

答:Spring Security 是用户认证操作 – 一种授权机制,目的是安全。

1、添加依赖

spring-boot-starter-security

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId><version>2.7.0</version>
</dependency>

刷新之后显示登陆:

默认的叫 Username 是 user ,密码自动生成。

2、与数据库对接:

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

@Service
public class UserDetailsServiceImpl implements UserDetailsService {//快捷键 windowsalt + insert / mac是option + enter@Autowiredprivate UserMapper userMapper;// 传入 username 返回对应的信息,在这里也就是id name pwd@Overridepublic 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);}
}

在backend 的 service 包的 impl 包下创建utils 包 新建 UserDetailsImpl:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDetailsImpl implements UserDetails {private User user;@Overridepublic Collection<? extends GrantedAuthority> 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;}
}

在backend 的 service 包的 impl 包下创建utils 包 新建 UserDetailsImpl:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDetailsImpl implements UserDetails {private User user;@Overridepublic Collection<? extends GrantedAuthority> 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;}
}

3、测试

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

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

@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}

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

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

重启项目,进入login页面

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

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

使用密文添加用户(数据库中不要保存明文密码)

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

@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";}

记得 git 维护~

项目实战——配置MySQL与Spring Security模块相关推荐

  1. 【Java闭关修炼】SpringBoot项目-贪吃蛇对战小游戏-配置Mysql与注册登录模块2

    [Java闭关修炼]SpringBoot项目-贪吃蛇对战小游戏-配置Mysql与注册登录模块2 传统的登录验证模式 JWT登录验证方式 下载安装依赖 创建JWTUTIL JwtAuthenticati ...

  2. 联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码

    联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码 客户拜访记录的列表的显示, 客户拜访记录的保存, 客户拜访记录查询(条件 ...

  3. 基于mysql的springmvcjar_糊涂jar_SpringMVC+Spring+Mybatis项目实战[SSM/MySQL/AJAX/IDEA]_Java视频-51CTO学院...

    鸟哥QQ交流群:833468344 我所有课程的学习主线为:java基础--->面向对象--->java高级部分(集合.多线程.正则表达式等)--->html5+css3---> ...

  4. 客户管理模块(保存查询客户)| CRM客户关系管理系统项目实战二(Struts2+Spring+Hibernate)解析+源代码

    引入数据字典,配置一对多的关系 异步加载 (JSON的使用,将list集合封装为json的数据,然后删除部分数据,JSON的数据发送到前端,前端页面获取对应的数据,遍历json的数据) 数据字典(下拉 ...

  5. mysql初始化加载插件_Hapi+MySql项目实战配置插件-加载文件渲染母版(三)

    加载插件 一般在其它node框架下,我们安装好插件直接require('插件')就能正常使用了,但是在Hapi下我们必须要Server.register()方法,才能正常使用插件.举个例子: 1 se ...

  6. Redis高级项目实战!mysql和java的管理系统源码

    分享第一份Java基础-中级-高级面试集合 Java基础(对象+线程+字符+接口+变量+异常+方法) Java中级开发(底层+Spring相关+Redis+分布式+设计模式+MySQL+高并发+锁+线 ...

  7. android博学谷实验报告,《Android项目实战-博学谷》我的模块

    我的模块界面 思路 由于此界面只是主界面中的一部分,所以无需创建一个新的 Activity ,只需要在 layout 目录下新建一个布局即可,同理导入图片至 drawable 目录下 具体代码如下: ...

  8. 小d课堂mysql_小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类...

    笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数据库 菜单View→Tool Window ...

  9. 项目实战-解决AES(java.security.InvalidKeyException: Illegal key size)

    异常: java.security.InvalidKeyException: Illegal key size 今天在做接口测试的时候遇到个异常: java.security.InvalidKeyEx ...

最新文章

  1. android 布局 站位符,基于android布局中的常用占位符介绍
  2. 【Java Web后台实验与开发】ServletHTTPRequest笔记
  3. Android layout布局属性、标签属性总结大全
  4. SQL2005 属性 IsLocked 不可用于 登录[sa]
  5. CG-CTF-Web-单身一百年
  6. Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
  7. TreeMap实现排序
  8. gulp如何保存后自动刷新?看这里就够了
  9. Win10 OneDrive无法同步文件怎么办?一个命令搞定
  10. 新手 Spring 疑惑
  11. 什么视频会议系统好?
  12. 【原】对txt文本进行数据读取
  13. 网页版bpc电波对时_BPC电波对时app
  14. win7右键显示隐藏文件及扩展名
  15. teamviewer12 linux安装,ubuntu16.04安装teamviewer12依赖包解决
  16. 第一学:pytorch入门60min
  17. Win10自带录屏怎么用?一键开启,超级简单!
  18. 您需要Administrators提供的权限才能对此文件进行更改
  19. Android ADB原理及常用命令
  20. java 使用*打印图形(菱形、平行四边形、三角形)

热门文章

  1. 17-dell台式电脑长时间没有关机,进入省电模式无法开机解决方法
  2. MYIR-ZYNQ7000系列-zturn教程(1)-从新建工程到下载bit文件
  3. 模式识别学习笔记(6)——特征维数问题
  4. 推荐一个好用的GPU租用平台
  5. (盲人配袜问题)有两位盲人,他们都各自买了两对黑袜和两对白袜,八对袜子的布质、大小完全相同
  6. Android点击水波纹扩散效果整理(附带一个自定义的水波纹效果控件)
  7. windows下C语言实现自动版跳一跳详细教程
  8. 关于 ZEGO 支撑 100 亿场高质量直播的秘笈
  9. FATFS 的几个函数使用方法
  10. 数据容灾备份的等级和技术介绍