SpringBoot+MySQL+Jpa实现对数据库的增删改查和分页详解

前置知识:

在学习本篇攻略之前,需要熟悉如下知识:

  • 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技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 如何在IDEA中快速解决Jar冲突详解

    下面是“如何在IDEA中快速解决Jar冲突”的完整攻略。 1. 什么是Jar冲突 在Java项目中,我们通常使用Jar包来管理和引入第三方库。但是同一个项目可能会引入多个Jar包,这些Jar包存在相同类名或不兼容的情况,就会发生Jar冲突。 当出现Jar冲突时,就会导致编译或运行时出现各种异常,从而影响项目正常运行。 2. 解决Jar冲突的方法 通常有三种方…

    Java 2023年5月20日
    00
  • servlet监听实现统计在线人数功能 附源码下载

    这里提供一个基于Servlet监听器的统计在线人数的实现方法,如果学习Java Web开发,这是一道需要掌握的入门练习题目。 实现思路 编写一个Servlet监听器,实现 ServletContextAttributeListener 接口 在监听器中编写监听器方法,实现当用户绘制request时添加ServletContextListener储存在线人数,…

    Java 2023年6月15日
    00
  • java如何将一个float型数的整数部分和小数分别输出显示

    要将一个float型数的整数部分和小数部分分别输出显示,可以使用Java中的数学函数和字符串格式化。下面是完整的攻略。 步骤一:获取float型数的整数部分和小数部分 获取float型数的整数部分可以使用Java中的Math.floor()函数,该函数将返回小于或等于输入值的最大整数。获取float型数的小数部分可以将float数减去它的整数部分,得到的结果…

    Java 2023年5月26日
    00
  • Spring @Bean vs @Service注解区别

    下面是关于Spring中@Bean和@Service注解的详细讲解。 1. @Bean注解 1.1 概述 @Bean注解是用来注册一个Java Bean对象的,它是放在方法上的注解。当Spring的容器启动时,会去扫描所有带有这个注解的方法并执行它,最终返回的对象会被放到Spring的容器中。 1.2 示例说明 假设有一个用户服务的实现类UserServic…

    Java 2023年5月31日
    00
  • springboot自定义starter启动器的具体使用实践

    Spring Boot自定义Starter启动器的具体使用实践 在本文中,我们将详细讲解如何使用Spring Boot自定义Starter启动器,包括创建Starter、定义自动配置、使用自定义Starter等。 创建Starter 创建自定义Starter的第一步是创建一个Maven项目,并添加以下依赖: <dependency> <gr…

    Java 2023年5月15日
    00
  • Java8 Instant 时间戳实例讲解

    Java8 Instant 时间戳实例讲解 在 Java8 中,引入了 java.time 包,包含了一系列新的日期时间 API,其中 Instant 类可以用来表示时间戳。本文将详细讲解 Instant 类的使用。 Instant 类概述 Instant 类是不可变且线程安全的,它以 Unix 时间戳的形式存储时间,精确到纳秒。Unix 时间戳是指从 19…

    Java 2023年5月20日
    00
  • 了解JAVA Future类

    了解JAVA Future类的完整攻略 概述 Future类是Java里面可用于异步计算的一种设计模式。该模式依赖于将异步操作提交到执行者(Executor)。简单来说,Future是一个接口,定义了获取异步计算结果的一种方式,不必等待计算完成。 它在Java的java.util.concurrent包中被定义,用于描述异步计算的结果。在执行异步计算时,可以…

    Java 2023年5月26日
    00
  • Mybatis的特点及优点

    让我来详细讲解一下Mybatis的特点及优点。 Mybatis的特点 是一款基于Java的ORM框架,它跟Hibernate等ORM框架不同的是,它对数据库的操作都是通过sql语句进行的,不需要编写复杂的持久化逻辑。因此,Mybatis具有以下几个特点: 1. SQL控制能力强 Mybatis允许开发者自定义SQL语句,并提供了非常灵活的SQL执行方式。开发…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部