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日

相关文章

  • Java实现Excel导入导出的步骤详解

    Java实现Excel导入导出的步骤详解 Excel导入导出在日常开发中非常常见,Java语言作为一种非常流行的开发语言,在Excel导入导出方面也提供了很好的支持,本文将为大家详细介绍Java实现Excel导入导出的步骤。 相关技术介绍 在Java语言中,常用的Excel导入导出技术有以下几种: POI技术:免费的Java API,可以新建表格,也可以读写…

    Java 2023年6月15日
    00
  • Java中泛型使用的简单方法介绍

    Java中泛型使用的简单方法介绍 什么是泛型 泛型是一种特殊的类型,它允许我们在编写代码时使用一个占位符代替具体的类型,当代码被实际执行时,再使用具体的类型来替换占位符。泛型可以增加代码的复用性和可读性,同时也可以提高代码的安全性,避免了因类型转换错误而引发的运行时异常。 如何定义泛型 在Java中,泛型可以定义在类、接口、方法上。定义泛型时,需要使用&lt…

    Java 2023年5月26日
    00
  • java 垃圾回收机制以及经典垃圾回收器详解

    Java 垃圾回收机制详解 什么是垃圾回收机制 在 Java 程序中进行内存管理时,需要动态地分配和回收内存。Java 的垃圾回收机制(Garbage Collection,GC)是自动进行的内存管理操作,它负责释放不再被引用的对象占用的内存,从而减少 GC 的内存压力,提高程序的性能。 Java 的垃圾回收机制的实现原理 Java 垃圾回收机制的实现原理是…

    Java 2023年5月26日
    00
  • Springboot框架实现自动装配详解

    Spring Boot框架实现自动装配详解 Spring Boot是一个非常流行的Java框架,它可以帮助开发人员快速构建基于Spring的应用程序。其中一个最重要的特性就是自动装配。在本文中,我们将详细讲解Spring Boot框架实现自动装配的过程和原理,并提供两个示例来演示如何使用自动装配。 自动装配的原理 自动装配是Spring Boot框架的核心特…

    Java 2023年5月15日
    00
  • java实现学生信息录入界面

    下面是“java实现学生信息录入界面”的完整攻略。 步骤一:创建GUI界面 Java的GUI界面可以使用Swing或JavaFX实现。这里我们以Swing为例。 示例一 以下代码展示了如何使用Swing创建一个简单的GUI界面,包含一个文本框和一个按钮: import javax.swing.*; public class StudentInfoGUI ex…

    Java 2023年5月24日
    00
  • 剑指Offer之Java算法习题精讲数组查找与字符串交集

    剑指Offer之Java算法习题精讲 – 数组查找与字符串交集 一、本章介绍 本章将会对“剑指Offer”系列书籍中有关数组查找与字符串交集的核心算法习题进行总结和分析。我们将会结合具体的算法样例进行讲解,并且会针对其中涉及到的算法思想与编程技巧进行加深细致的探讨。 二、数组查找 1. 二维数组中的查找 题目描述: 在一个二维数组中,每一行都按照从左到右递增…

    Java 2023年5月19日
    00
  • Java Spring Bean的生命周期管理详解

    Java Spring Bean的生命周期管理详解 简介 在使用Spring框架时,Bean(实例)的生命周期管理是非常重要的,它涉及到Bean的创建、初始化、依赖注入、方法调用、销毁等过程。本文将详细介绍Java Spring中Bean的生命周期管理机制,帮助读者更好地理解和使用Spring框架。 生命周期阶段 在Spring框架中,Bean的生命周期可以…

    Java 2023年5月31日
    00
  • Spring Data JPA 设置字段默认值方式

    当使用Spring Data JPA进行持久化操作时,我们可能需要为实体中的字段设置默认值。下面是设置字段默认值的几种方式。 1. 在实体中使用变量初始化 在Java语言中,我们有一个非常方便的初始化变量的方式,即在变量声明的同时初始化它们。Spring Data JPA可以通过这种方式为实体字段设置默认值。示例如下: @Entity public clas…

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