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日

相关文章

  • JavaScript处理解析JSON数据过程详解

    下面是“JavaScript处理解析JSON数据过程详解”的完整攻略。 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输。它是纯文本的,可读性较好,易于编写和解析,同时支持多种编程语言。 JSON由于其简洁性、标准化、易读性和跨平台性等优点越来越受到广泛的关注和应用。并且许多现代…

    Java 2023年5月26日
    00
  • java OOM内存泄漏原因及解决方法

    Java OOM内存泄漏原因及解决方法 前言 Java内存泄漏(Memory Leak)是指程序中已经不再用到的内存,因为某些原因没有被释放,导致这部分内存永远无法被使用,从而引起内存的浪费。内存泄漏会导致系统的性能降低,甚至会导致系统奔溃。下面将详细介绍Java OOM内存泄漏的原因及解决方法。 OOM内存泄漏原因 长生命周期对象持有短生命周期对象的引用 …

    Java 2023年6月15日
    00
  • jsp session.setAttribute()和session.getAttribute()用法案例详解

    下面是“jsp session.setAttribute()和session.getAttribute()用法案例详解”的完整攻略。 什么是Session? Session是指浏览器和服务器之间维护的一个会话状态,用于保存用户信息、用户访问状态等。在JSP中我们可以使用session对象来操作session。 session.setAttribute() s…

    Java 2023年6月15日
    00
  • Java中jqGrid 学习笔记整理——进阶篇(二)

    让我来详细讲解一下“Java中jqGrid 学习笔记整理——进阶篇(二)”这篇文章的内容。 一、概述 这篇文章是介绍如何在Java web项目中使用jqGrid进行数据展示和交互的进阶篇。主要包括以下内容: jqGrid特性及概念解析; 如何使用Java代码动态生成jqGrid; 如何在jqGrid中使用自定义格式化函数; 如何使用jqGrid中的事件; 如…

    Java 2023年5月20日
    00
  • Java 8中字符串拼接新姿势StringJoiner详解

    Java 8中字符串拼接新姿势StringJoiner详解 在Java 8中,使用StringJoiner类可以更方便地进行字符串拼接。这个类可以让我们无需显式地使用字符串缓冲区或分隔符,并且支持指定开头和结尾的字符串,还可以在一些场景下避免空值引起的问题。 StringJoiner的用法 构造函数 首先,我们需要知道StringJoiner类的构造函数有如…

    Java 2023年5月26日
    00
  • jQuery 重复加载错误以及修复方法

    jQuery 重复加载错误以及修复方法 在使用jQuery的过程中,经常会遇到jQuery重复加载的错误。这个错误一般是因为我们在多个地方重复引用了jQuery库导致的。下面,我们就来详细讲解如何避免和解决这个问题。 什么是jQuery重复加载错误 当我们在页面中引用jQuery库时,如果多个地方都引用了jQuery库,那么就会发生jQuery重复加载的错误…

    Java 2023年6月15日
    00
  • 浅谈hibernate中懒加载禁用操作

    浅谈Hibernate中懒加载禁用操作 什么是懒加载 Hibernate中的懒加载指的是对象的延迟加载,在对象被使用时才进行加载操作,目的是为了提高系统的性能。 在默认情况下,Hibernate使用懒加载来查询和加载与主对象相关的所有集合关系和属性。因此,在需要使用这些集合和属性时,才会进行加载操作,减少了对数据库的查询次数,提高了系统性能。 为什么需要禁用…

    Java 2023年5月31日
    00
  • Java编程实现对十六进制字符串异或运算代码示例

    下面是详细讲解Java编程实现对十六进制字符串异或运算的完整攻略。 异或运算简介 异或运算(^)是计算机中的一种二进制位运算,它的运算规则是按位进行比较,相同位上的数字相同时,结果为0,不同时,结果为1。例如,10 ^ 6 = 12,是因为10的二进制形式为1010,6的二进制形式为0110,按位进行异或运算后,得到的结果为1100,其十进制形式为12。 十…

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