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

建议下载第二个:

点击下载成功的安装包:


其他页面全选默认即可。
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 -p123456show databases; :列出所有数据库create database kob;:创建数据库drop database kob;:删除数据库use kob;:使用数据库kobshow 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;:删除某行数据具体操作如下:


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

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



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

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>
选择哪个版本号,都可以,个人习惯是最新的几个版本里选用的人最多的版本。
点击 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
点击运行 出现报错 可能是因为路径问题。
点击运行,输入网址 http://127.0.0.1:8080/pk/index/ 显示界面就成功了

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

详细解释:
后面补充
2.
取消软件包压缩:设置 -> 树外观 -> 压缩空的中间软件包
2.1 在 backend 下创建 pojo 包 创建一个类 User,将数据库中的表 User转化为 Java 中的 User.class
@Data
@NoArgsContructor
@AllArgsContructor
public class User {
private Integer id;
private String username;
private String password;
}

2.2 在backend创建mapper 包,创建一个 Java 类的接口 UserMapper
@Mapper
public interface UserMapper extends BaseMapper<User> {
}


2.3 在backend 的 controller 下创建 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";
}
}
user中的全部数据。
user中的单个数据。
user 中的数据。

user 中的数据。

测试:127.0.0.1:8080/user/all
是用户认证操作 – 一种授权机制,目的是安全。
1. 添加依赖,添加之后刷新。
spring-boot-starter-security
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-securityartifactId>
<version>2.7.0version>
dependency>
刷新之后显示登陆:

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

在backend 的 service 创建 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);
}
}

在backend 的 service 包的 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;
}
}

如果实现登录的话,需要提供一个 PassworEncoder。
如果在数据库中指定明文来存储,需要在自己的密码加上{noop},才可以登录。
1. 实现密文存储:
在 config 下新建 SecurityConfig 。
实现config.SecurityConfig类,用来实现用户密码的加密存储。
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public 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";
}



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