Spring Boot 3.3 【四】Spring Boot 整合JPA

news/2024/10/21 6:31:50/

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

一、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 提供了内置的分页和排序支持,可以通过传递 PageableSort 对象来实现。
  • 这使开发者可以很容易地实现分页查询和排序功能。

4. 事务管理:

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

三、示例代码

1. 准备环境

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

2. 添加依赖

<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 MVCTomcat 等web开发所需依赖;
  • spring-boot-starter-data-jpa 用于集成 JPA 进行数据持久化;
  • mysql-connector-javaMySQL 数据库的 JDBC 驱动,用于连接 MySQL 数据库。

3. 配置数据库连接和JPA

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

server:port:8080
spring:datasource:url: jdbc:mysql://localhost:3306/spring_boot_jpa?useSSL=false&serverTimezone=UTCusername: rootpassword: rootjpa:hibernate: ddl-auto: updateshow-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;@Autowiredpublic 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;@Autowiredpublic BookController(BookService bookService) {this.bookService = bookService;}@GetMappingpublic List<Book> getAllBooks() {return bookService.findAll();}@PostMappingpublic 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 应用程序进行集成。


http://www.ppmy.cn/news/1511661.html

相关文章

PyTorch之TensorBoard使用

接回上一篇&#xff1a;PyTorch深度学习框架-CSDN博客 在学习这篇之前建议先按照上一篇搭建好整个PyTorch环境 然后这一篇讲怎么用TensorBoard&#xff0c;这个玩意是Tensorflow官方推出的一个可视化工具&#xff0c;当使用Tensorflow训练大量深层的神经网络时&#xff0c;我们…

如果忘记了 Apple ID 密码,如何重设

“我忘记了我的 Apple ID 密码&#xff0c;如何恢复我的帐户&#xff1f;”为了方便用户&#xff0c;Apple 允许每个人使用唯一的 Apple ID 和密码激活设备并访问所有 Apple 服务。然而&#xff0c;实际上&#xff0c;手动选择某项并忘记它似乎很容易。例如&#xff0c;许多 Ap…

2024年8月19日(静态文件共享,playbook剧本)

一、静态文件共享 1、编写脚本 [rootm0 ~]# vim /etc/tset000.sh #!/bin/bash mkdir /tmp/three touch /tmp/three/test echo I am echo at mttt > /tmp/three/test echo well done 2、将mysql_master.sh 复制到被控制的主机上并下载nfs和rpcbind包 [rootm0 ~]# ansible -s…

python 列表

列表是最常用的 Python 数据类型&#xff0c;它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型&#xff0c;创建一个列表&#xff0c;只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示&#xff1a; list1 [Google, Runoob, 1997, 2000…

【系统架构设计】系统性能评价(一)

【系统架构设计】系统性能评价&#xff08;一&#xff09; 性能指标对计算机对网络对操作系统对数据库管理系统对Web服务器 性能计算MIPS(百万条指令/秒)计算方法峰值计算等效指令速度 性能设计性能评估 性能指标 对计算机 时钟频率&#xff08;主频&#xff09; 指计算机处…

django常用的组合搜索组件

文章目录 django常用的组合搜索组件快速使用配置信息1. 视图函数2. 前端模板3. css样式 代码实现 django常用的组合搜索组件 在项目开发中&#xff0c;如果有大量数据就要用到组合搜索&#xff0c;通过组合搜索对大块内容进行分类筛选。 快速使用 三步走&#xff1a;&#xf…

【JAVA CORE_API】Day14 Collection、Iterator、增强for、泛型、List、Set

Collection接口及常用方法 Collection<Object> collection new ArrayList();&#xff1a;实例化ArrayList集合对象&#xff1b; collectionName.add(Object obj);&#xff1a;在集合中增加元素&#xff1b; int sizeName collectionName.size();&#xff1a;获取集合…

模拟实现简单栈和队列

一.栈的模拟实现 stack作为容器适配器实在容器的基础上再进行封装&#xff0c;因此实现较为简单。 #pragma once #include<iostream> #include<deque> using namespace std;namespace cls {template<class T,class Container deque<T>>class stack{…