前置知识:
在学习本篇攻略之前,需要熟悉如下知识:
- SpringBoot: 一款基于Spring框架的快速开发脚手架工具,可以快速创建Spring应用
- MySQL: 一款流行的关系型数据库
- JPA: Java持久化API,是一套标准的ORM框架
步骤:
1.配置MySQL数据库
首先需要进行mysql数据库的安装和配置。这里不再赘述,建议在官网上进行下载和安装。
安装完成之后,我们需要在mysql中创建一个数据库,并在该数据库中创建一张数据表。以创建一个名为test_db的数据库为例,执行如下命令:
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE user (
id VARCHAR(32) PRIMARY KEY,
name VARCHAR(32),
age INT
);
2.创建一个SpringBoot项目
SpringBoot提供了快速生成项目的工具,我们可以使用Spring Initializr来生成一个SpringBoot项目,具体步骤如下:
首先,我们访问 https://start.spring.io/,然后填写工程信息:
- Group: com.example
- Artifact: demo
- Name: demo
- Description: Demo project for Spring Boot
- Package name: com.example.demo
- Packaging: jar
- Java version: 11
然后,选择需要添加的依赖:
- Spring Web
- Spring Data JPA
- MySQL Driver
点击Generate下载项目压缩包,并解压到本地。
3.配置数据源和JPA
打开demo项目中的application.properties文件,添加如下配置:
spring.datasource.url=jdbc:mysql://localhost:3306/test_db
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
其中:
- spring.datasource.url:数据源连接地址
- spring.datasource.username:用户名
- spring.datasource.password:密码
- spring.jpa.show-sql:是否显示SQL语句
- spring.jpa.hibernate.ddl-auto:自动创建表
4.编写实体类和DAO
在com.example.demo包下创建一个entity包,并新建User.java实体类:
@Entity
@Table(name = "user")
public class User {
@Id
private String id;
private String name;
private Integer age;
// 省略getter和setter方法
}
然后,我们需要创建一个UserRepository接口,用于实现对user表的增删改查操作。在com.example.demo包下创建一个repository包,并新建UserRepository.java接口:
public interface UserRepository extends JpaRepository<User, String> {
}
其中,JpaRepository是Spring Data JPA提供的一个基础的CRUD接口,该接口提供了很多常用的方法,我们无需再手写增删改查的SQL语句。
5.实现增删改查
在UserService.java中,我们可以根据JpaRepository提供的方法,轻松地实现增删改查操作:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> findAll() {
return userRepository.findAll();
}
public Page<User> findAll(PageRequest pageRequest) {
return userRepository.findAll(pageRequest);
}
public Optional<User> findById(String id) {
return userRepository.findById(id);
}
public User save(User user) {
return userRepository.save(user);
}
public void deleteById(String id) {
userRepository.deleteById(id);
}
}
其中:
- findAll:查询所有用户
- findAll(PageRequest pageRequest):分页查询用户
- findById:根据id查询用户
- save:保存用户
- deleteById:根据id删除用户
6.编写Controller
在UserController.java中,我们可以对外暴露RESTful API,供外部调用:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping()
public ResponseEntity<List<User>> findAll() {
List<User> userList = userService.findAll();
if (userList.isEmpty()) {
return ResponseEntity.noContent().build();
}
return ResponseEntity.ok(userList);
}
@GetMapping("/{id}")
public ResponseEntity<User> findById(@PathVariable String id) {
Optional<User> userOptional = userService.findById(id);
if (!userOptional.isPresent()) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(userOptional.get());
}
@PostMapping()
public ResponseEntity<User> save(@RequestBody User user) {
User savedUser = userService.save(user);
return ResponseEntity.ok(savedUser);
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteById(@PathVariable String id) {
userService.deleteById(id);
return ResponseEntity.ok().build();
}
}
其中:
- findAll:查询所有用户
- findById:根据id查询用户
- save:保存用户
- deleteById:根据id删除用户
7.分页查询
UserController中,我们通过@RequestParam指定分页查询的页数和每页大小,然后调用UserService的findAll方法进行查询:
@GetMapping()
public ResponseEntity<Page<User>> findAll(
@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "10") int size) {
PageRequest pageRequest = PageRequest.of(page, size, Sort.by(Sort.Order.desc("id")));
Page<User> userPage = userService.findAll(pageRequest);
if (userPage.isEmpty()) {
return ResponseEntity.noContent().build();
}
return ResponseEntity.ok(userPage);
}
其中,Sort.by()方法用于对结果排序,这里按照id字段降序排列。
示例:
(1) 查询所有用户
发送GET请求到http://localhost:8080/users,可以得到如下JSON格式的响应:
[
{
"id": "1",
"name": "张三",
"age": 20
},
{
"id": "2",
"name": "李四",
"age": 22
}
]
(2) 根据id查询用户
发送GET请求到http://localhost:8080/users/1,可以得到如下JSON格式的响应:
{
"id": "1",
"name": "张三",
"age": 20
}
(3) 保存用户
发送POST请求到http://localhost:8080/users,请求体为如下JSON格式的数据:
{
"id": "3",
"name": "王五",
"age": 25
}
可以得到如下JSON格式的响应:
{
"id": "3",
"name": "王五",
"age": 25
}
(4) 根据id删除用户
发送DELETE请求到http://localhost:8080/users/3,可以得到响应状态码为200的空响应。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot+MySQL+Jpa实现对数据库的增删改查和分页详解 - Python技术站