Java 系统学习 | Springboot 实现增删改查
本篇使用 Springboot3 框架,IDEA2022 编辑器,java17 版本。
新建 package,创建好目录
创建的目录结构如下
pom.xml 添加依赖包
-
soringboot web 依赖
-
连接 mysql 数据库用到的 mybatis 依赖和 mysql 驱动依赖
-
lombok 依赖,可以在编译时自动添加 get、set、toString、构造器等方法
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>hello</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>3.1.3</version>
</parent>
<dependencies>
<!-- web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!-- mysql 驱动依赖 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- lombok 依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
添加依赖包后记得刷新 maven
项目入口程序 TestApplication.java
package com.holly;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
配置数据库 application.yml
前提是把本地安装的 mysql 服务启动
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: root
创建表 user
我这里直接用命令行创建
CREATE TABLE user (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
nickname VARCHAR(255),
email VARCHAR(100),
user_pic VARCHAR(255),
create_time TIMESTAMP,
update_time TIMESTAMP
);
编辑器右侧点击【Database】,添加 mysql 数据库连接,可以直接查看数据库信息
创建 user 类,/pojo/User.java
-
添加
@Data
注解,利用 lombok 依赖自动添加 get、set 等方法 -
实例中不再使用表字段的下划线格式,改为小驼峰方式
package com.holly.pojo;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class User {
private int id;
private String username;
private String password;
private String nickname;
private String email;
private String userPic;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
创建 user 控制器 /controller/UserController.java
-
添加控制器注解
@RestController
-
添加请求路由注解
@RequestMapping("/user")
-
注解自动注入
userService
-
每个方法添加路由注解
package com.holly.controller;
import com.holly.pojo.User;
import com.holly.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
// 添加
@PostMapping
public String add(User user) {
userService.add(user);
return "添加成功";
}
// 删除
@DeleteMapping
public String delete(int id) {
userService.del(id);
return "删除成功";
}
// 更新
@PutMapping
public String update(User user) {
userService.update(user);
return "编辑成功";
}
// 查询
@GetMapping
public User detail(int id) {
User user = userService.detail(id);
return user;
}
}
创建 service 接口 /service/UserService.java
- 编写控制器时,调用了 userService 的方法,根据错误提示补充完整 service 接口。无需手动写入。
package com.holly.service;
import com.holly.pojo.User;
public interface UserService {
void add(User user);
void del(int id);
void update(User user);
User detail(int id);
}
创建 service 实现类 /service/impl/UserServiceImpl.java
-
实现了 service 接口,可根据错误提示补充文件内容
-
添加 service 注解
@Service
-
自动注入
userMapper
package com.holly.service.impl;
import com.holly.mapper.UserMapper;
import com.holly.pojo.User;
import com.holly.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
@Override
public void add(User user) {
user.setCreateTime(LocalDateTime.now());
user.setUpdateTime(LocalDateTime.now());
userMapper.add(user);
}
@Override
public void del(int id) {
userMapper.del(id);
}
@Override
public void update(User user) {
user.setUpdateTime(LocalDateTime.now());
userMapper.update(user);
}
@Override
public User detail(int id) {
User user = userMapper.detail(id);
return user;
}
}
创建 mapper 接口 /mapper/UserMapper.java
- 添加 mapper 注解
@Mapper
package com.holly.mapper;
import com.holly.pojo.User;
import org.apache.ibatis.annotations.*;
@Mapper
public interface UserMapper {
@Insert("insert into user(username, password, nickname, email, user_pic, create_time, update_time) " +
"values(#{username}, #{password}, #{nickname}, #{email}, #{userPic}, #{createTime}, #{updateTime})")
void add(User user);
@Delete("delete from user where id = #{id}")
void del(int id);
@Update("update user set username = #{username}, password = #{password}, nickname = #{nickname}, email = #{email}, " +
"user_pic = #{userPic}, update_time = #{updateTime} where id = #{id}")
void update(User user);
@Select("select * from user where id = #{id}")
User detail(int id);
}
启动项目
测试
使用接口测试工具,选择请求方式,填写请求路径,请求参数,得到请求返回结果
添加
返回添加成功的提示,去数据表中确认
编辑
返回编辑成功,数据表中确认
删除
返回删除成功,表中确认 id 为 1 的数据被删除
查询
返回用户信息,但是后面三个字段没有查到
因为表字段名和 user 实例中的属性名不匹配,一个是下划线,一个是小驼峰。
此时需要在 application.yml
中补充以下配置
mybatis:
configuration:
map-underscore-to-camel-case: true
配置完重新启动项目,再次测试查询,发现可以正常取到每个字段的数据了
至此,最基本的 CURD 实现啦。
不过还很简陋,比如密码没有加密,比如数据没有校验,比如返回结果简单等等,后面再慢慢补充。