Spring Boot 3.3 【四】Spring Boot 整合JPA

🌟 技术人聊管理 请关注 【技术管理修行】

一、JPA 简介

Spring Data JPA 是 Spring Data 项目的一部分,它为使用 Java Persistence API (JPA) 进行数据库访问提供了一种非常简便的方式。Spring Data JPA 的主要目的是简化基于 JPA 的数据访问层的开发工作,开发者可以更加专注于业务逻辑而不是繁琐的数据访问代码。

二、JPA 的主要作用和特点:

1. 自动化的 CRUD 操作:

  • 当定义了一个继承自 JpaRepository 的接口时,Spring Data JPA 会自动为该接口生成实现类,提供基本的 CRUD 操作(如 save, findById, findAll, deleteById 等)。
  • 这些方法的实现完全由 Spring Data JPA 自动生成,开发者无需编写任何代码。

2. 灵活的查询方法:

  • Spring Data JPA 支持通过方法名来定义查询,这意味着开发者可以通过简单的方法命名规则来定义复杂的查询逻辑,而不需要编写 JPQL 或 Criteria 查询。
  • 例如,方法 findByName(String name) 会自动映射到一个名为 name 的属性,并执行相应的查询。

3. 分页和排序支持:

  • Spring Data JPA 提供了内置的分页和排序支持,可以通过传递 Pageable 或 Sort 对象来实现。
  • 这使开发者可以很容易地实现分页查询和排序功能。

4. 事务管理:

  • Spring Data JPA 自动处理事务管理,无需显式声明事务边界。
  • 通过注解 @Transactional 或者配置方式,可以很容易地控制事务的行为。

三、示例代码

1. 准备环境

  • Java 17 或更高版本
  • Maven 3.8 或更高版本
  • Spring Boot 3.3
  • MySQL 8.0 或更高版本

2. 添加依赖

xml 复制代码
<dependencies>  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-thymeleaf</artifactId>  
        <version>
				3.3.1</version>
		</dependency>  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>
				spring-boot-starter-web</artifactId>  
        <version>3.3.1</version>
		</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
		<version>3.3.1</version>
	</dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<scope>runtime</scope>
		<version>8.0.33</version>
	</dependency>
</dependencies>
  • spring-boot-starter-thymeleaf 用于集成 Thymeleaf 模板引擎;
  • spring-boot-starter-web 提供 Spring MVC 和 Tomcat 等web开发所需依赖;
  • spring-boot-starter-data-jpa 用于集成 JPA 进行数据持久化;
  • mysql-connector-java 是 MySQL 数据库的 JDBC 驱动,用于连接 MySQL 数据库。

3. 配置数据库连接和JPA

编辑 application.yml 文件,添加以下内容:

yml 复制代码
server:
  port:8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/spring_boot_jpa?useSSL=false&serverTimezone=UTC
    username: root
    password: root
  jpa:
    hibernate: 
      ddl-auto: update
    show-sql: true

4. 创建实体类

java 复制代码
package com.jsglxx.demo.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String author;
    
    // 构造函数、getter 和 setter 省略
    
}
  • @Entity:这个注解标记在类上,表示该类是一个JPA实体类,它会映射到数据库中的一个表。JPA会管理这个类的实例,并将它们持久化到数据库中。
  • @Id :这个注解标记在类的属性上,表示该属性是实体的主键。在这个例子中,id 属性被标记为主键,意味着在数据库中对应的表也会有一个名为 id 的列作为主键。
  • @GeneratedValue :这个注解用于指定主键的生成策略。在这个例子中,strategy = GenerationType.IDENTITY 表示主键的值将由数据库自动生成(通常是自增的)。这意味着当你插入一个新的实体到数据库时,数据库会自动为这个实体的 id 属性分配一个唯一的值。

5. 创建 Repository 接口

创建一个 BookRepository 接口继承自 JpaRepository:

java 复制代码
package com.jsglxx.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import com.jsglxx.entity.Book;

public interface BookRepository extends JpaRepository<Book, Long>{

}

6. 创建 Service 层

创建一个 BookService 类:

java 复制代码
package com.jsglxx.demo.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jsglxx.entity.Book;
import com.jsglxx.repository.BookRepository;

@Service
public class BookService {

    private final BookRepository bookRepository;

    @Autowired
    public BookService(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }
    //查询所有图书
    public List<Book> findAll() {
        return bookRepository.findAll();
    }

    //查询单个图书
    public Book findById(Long id) {
        return bookRepository.findById(id).orElse(null);
    }

    //保存单个图书
    public Book save(Book book) {
        return bookRepository.save(book);
    }
    
    //删除单个图书
    public void deleteById(Long id) {
        bookRepository.deleteById(id);
    }
}

7. 创建 REST 控制器

创建一个 BookController 类:

java 复制代码
package com.jsglxx.demo.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.jsglxx.entity.Book;
import com.jsglxx.service.BookService;

@RestController
@RequestMapping("/api/books")
public class BookController {

    private final BookService bookService;

    @Autowired
    public BookController(BookService bookService) {
        this.bookService = bookService;
    }

    @GetMapping
    public List<Book> getAllBooks() {
        return bookService.findAll();
    }

    @PostMapping
    public Book createBook(@RequestBody Book book) {
        return bookService.save(book);
    }

    @GetMapping("/{id}")
    public Book getBookById(@PathVariable Long id) {
        return bookService.findById(id);
    }

    @DeleteMapping("/{id}")
    public void deleteBook(@PathVariable Long id) {
        bookService.deleteById(id);
    }
}

四、运行测试

运行主类 DemoApplication.java,启动应用并测试 API。

1. Book实体类对应的表和列自动生成

2. 打开postman测试接口

1)创建图书:

2)查询所有图书

3)查询单个图书

五、总结

Spring Data JPA 通过提供一套高度抽象的接口和约定,极大地简化了基于 JPA 的数据访问层的开发工作。它不仅减少了样板代码的数量,还提高了开发效率,使得开发者可以更加专注于业务逻辑的实现。通过上述示例,我们可以看到如何使用 Spring Data JPA 来快速构建数据访问层,并与 Spring Boot 应用程序进行集成。

相关推荐
罗政2 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端
架构文摘JGWZ2 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
拾光师3 小时前
spring获取当前request
java·后端·spring
aPurpleBerry3 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j
我是苏苏3 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
xujinwei_gingko3 小时前
Spring IOC容器Bean对象管理-Java Config方式
java·spring
2301_789985943 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习
IT学长编程3 小时前
计算机毕业设计 教师科研信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·毕业设计·springboot·毕业论文·计算机毕业设计选题·计算机毕业设计开题报告·教师科研管理系统
m0_571957583 小时前
Java | Leetcode Java题解之第406题根据身高重建队列
java·leetcode·题解
程序猿小D4 小时前
第二百三十五节 JPA教程 - JPA Lob列示例
java·数据库·windows·oracle·jdk·jpa