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日

相关文章

  • springboot 在linux后台运行的方法

    在Linux服务器上运行Spring Boot应用程序是一种常见的部署方式。以下是详细讲解Spring Boot在Linux后台运行的方法的完整攻略: 打包应用程序 在部署Spring Boot应用程序之前,我们需要将应用程序打包成可执行的JAR文件。我们可以使用Maven或Gradle来完成此操作。以下是使用Maven打包应用程序的示例: mvn clea…

    Java 2023年5月15日
    00
  • JavaScript中浅讲ajax图文详解

    JavaScript中浅讲ajax图文详解 1. 什么是ajax AJAX 的全名是“异步 JavaScript 和 XML”。它是一种用于创建快速动态网页的编程技术。简单来说,它可以使网页通过后台与服务器通信并交换数据,而不需要重新加载整个页面。这就意味着,通过 AJAX,页面可以在不刷新的情况下更新部分内容,这尤其对于 Web 应用程序非常实用。 2. …

    Java 2023年5月23日
    00
  • Java中怎样处理空指针异常

    Java 中的空指针异常是程序中常见的异常之一,在使用对象之前必须对其进行 null 检查,以避免空指针异常的发生。 本文将详细讲解 Java 中如何处理空指针异常以及具体的处理方法。 1. 空指针异常的产生原因 空指针异常是因为对一个 null 对象调用方法或访问属性时所产生的异常。这种异常通常会在代码中出现空引用时才引起程序崩溃。 以下是一个简单的示例:…

    Java 2023年5月27日
    00
  • 算法系列15天速成 第八天 线性表【下】

    算法系列15天速成 第八天 线性表【下】完整攻略 前言 在线性表【上】的基础上,我们再来讲一些新的线性表特性及其相关算法。 栈 栈是一种特殊的线性表,只能在表尾插入和删除数据,简单来说就是类似于装东西的箱子。它有以下几个特点: 先进后出,后进先出,即最先入栈的元素最后出栈; 只能在表尾插入和删除数据,元素的加入和删除只发生在栈顶。 栈的应用 递归; 计算器;…

    Java 2023年5月31日
    00
  • Java 数据结构与算法系列精讲之背包问题

    Java 数据结构与算法系列精讲之背包问题 背包问题简介 背包问题是计算机科学中的经典问题,旨在找到最佳的物品组合,使得其总重量不超过背包容量,同时总价值最大化。背包问题有多个变体,每个变体都采用不同的解决方法。 01背包 01背包指的是背包容量固定,并且每个物品只有一个的情况。对于n个物品和一个容量为V的背包,每个物品有两个属性:体积w和价值v。该问题可以…

    Java 2023年5月26日
    00
  • Java编程发展历史(动力节点Java学院整理)

    Java编程发展历史 Java前身 Java语言是由Sun Microsystems公司(后被Oracle公司收购)于1995年推出的一门计算机编程语言。起初,该语言被称为Oak语言,因为Oak是Sun Microsystems的办公室门外长了一棵橡树,而这个项目在设计之初的代号就是Oak。 Java语言推出 后来,强调语言应该与因特网紧密结合,适应网络环境…

    Java 2023年5月20日
    00
  • 详解Spring依赖注入的三种方式使用及优缺点

    以下是详解Spring依赖注入的三种方式使用及优缺点的完整攻略: 1. Spring依赖注入的三种方式 Spring提供了三种方式来实现依赖注入: 1.1 构造器注入 构造器注入是在对象创建的时候使用构造函数来进行注入。在XML配置文件中,我们可以使用标签对构造函数中需要的参数进行赋值。使用构造器注入的优点是在对象创建时就可以将所有的依赖注入,避免了后期在运…

    Java 2023年5月19日
    00
  • JavaWeb开发入门第二篇Tomcat服务器配置讲解

    下面是对”JavaWeb开发入门第二篇Tomcat服务器配置讲解”的完整攻略: 1. 下载Tomcat服务器 首先需要到Tomcat的官网(https://tomcat.apache.org/)下载对应的版本,选择”Download”页面中的合适版本即可。下载完成后,解压到本地即可。 2. 配置环境变量 在操作系统中配置Tomcat服务器的环境变量可以让我们…

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