当前位置:

首页 > 编程开发 > SpringBoot怎么整合JPA框架

SpringBoot怎么整合JPA框架

一.SpringBoot数据访问概述SpringData是Spring提供的一个用于简化数据库访问、支持云服务的开源框架。它是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案,其设计目的是使我们可以快速且简单地使用各种数据访问技术。SpringBoot默认采用整合SpringData的方式统一处理数据访问层,通过添加大量自动配置,引入各种数据访问模板xxxTemplate以及统一的Repository接口,从而达到简化数据访问层的操作。SpringData提供了多种类型数据库支持,S

本文目录

      一. Spring Boot数据访问概述

      Spring Data是Spring提供的一个用于简化数据库访问、支持云服务的开源框架。它是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案,其设计目的是使我们可以快速且简单地使用各种数据访问技术。Spring Boot默认采用整合Spring Data的方式统一处理数据访问层,通过添加大量自动配置,引入各种数据访问模板xxxTemplate以及统一的Repository接口,从而达到简化数据访问层的操作。

      Spring Data提供了多种类型数据库支持,Spring Boot对Spring Data支持的数据库进行了整合管理,提供了各种依赖启动器。通过一张表罗列Spring Boot提供的常见数据库依赖启动器。

      名称描述
      mybatis-spring-boot-starterMyBatis启动器
      mybatis-plus-boot-starterMyBatis-Plus启动器
      spring-boot-starter-data-jpaSpring Data JPA与Hibernate的启动器
      spring- boot starter-data-redisRedis键值数据存储与Spring Data Redis和Jedis客户端的启动器
      spring-boot-starter-data-neo4jNeo4j图数据库和Spring Data Neo4j的启动器
      spring-boot-starter-data-mongodbMongoDB和Spring Data MongoDB的启动器

      二. Spring Data JPA简介

      JPA(Java Persistence API,Java持久化API )是Sun公司官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关系映射的工具管理Java中的关系型数据,其主要目的是简化现有的持久化开发工作和整合ORM(Object Relational Mapping,对象/关系映射)技术。Spring Data在JPA规范的基础上,充分利用其优点,提出了Spring Data JPA模块对具有ORM关系数据进行持久化操作。

      Spring Data JPA是Spring在ORM框架、JPA规范的基础上封装的一套JPA应用框架,提供了增删改查等常用功能,使开发者可以用较少的代码实现数据操作,同时还易于扩展。在介绍Spring Boot整合JPA之前,先针对Spring Data JPA的基本使用进行简单介绍。

      2.1 编写ORM实体类

      Spring Data JPA框架是针对具有ORM关系的数据进行操作,所以在使用Spring Data JPA时,首先需要编写一个实体类与数据表进行映射,并且配置好映射关系。

      @Entity(name = "t_comment")  // 设置ORM实体类,并指定映射的表名
      public class Discuss {
          @Id   // 表明映射对应的主键id
          @GeneratedValue(strategy = GenerationType.IDENTITY) // 设置主键自增策略
          @Column(name = "article_id")  // 指定映射的表字段名
          private Integer articleId;
          // Generate: Getter and Setter、toString()
      }

      针对上述代码,壹哥把用到的注解给大家进行简要说明。

      @Entity:标注要与数据库做映射的实体类,默认情况下,数据表的名称就是首字母小写的类名。当然,还可以使用name属性指定映射的表名。

      @ld:标注在类属性或者getter方法上,表示某一个属性对应表中的主键。

      @GeneratedValue:与@ld注解标注在同一位置,用于表示属性对应主键的生成策略,可省略。Spring Data JPA支持的主键生成策略包括有TABLE(使用一个特定的数据库表格来保存主键)、SEQUENCE(不支持主键自增长的数据库主键生成策略)、IDENTITY(主键自增)和AUTO(JPA自主选择前面3种合适的策略,是默认选项)。

      @Column:标注在属性上,当类属性与表字段名不同时,能够配合name属性表示类属性对应的表字段名。

      2.2 编写Repository接口

      针对不同的表数据操作编写各自对应的Repository接口,并根据需要编写对应的数据操作方法。

      public interface DiscussRepository extends JpaRepository {
          // 1.查询author非空的Discuss评论集合(JPA支持的方法名关键字查询方式)
          List findByAuthorNotNull();
          // 2.根据文章id分页查询Discuss评论集合
          @Query("SELECT c FROM t_comment c WHERE c.articleId = ?1")
          List getDiscussPaged(Integer articleid, Pageable pageable);
          // 3.使用元素SQL语句,根据文章id分页查询Discuss评论集合,nativeQuery为true表示用来编写原生SQL语句 
          @Query(value = "SELECT * FROM t_comment WHERE article_Id = ?1", nativeQuery = true)
          List getDiscussPaged2(Integer articleid, Pageable pageable);
          //4.根据评论id修改评论作者author
          @Transactional // 表示支持事务管理
          @Modifying // 表示支持数据变更
          @Query("UPDATE t_comment c SET c.author = ?1 WHERE c.id = ?2")
          Integer updateDiscuss(String author, Integer id);
          // 5.根据评论id删除评论
          @Transactional
          @Modifying
          @Query("DELETE t_comment c WHERE c.id = ?1")
          Integer deleteDiscuss(Integer id);
      }

      针对Repository接口编写时的特殊要求,壹哥给大家解释一下。

      2.2.1 继承XXRepository接口

      我们在使用Spring Data JPA自定义Repository接口时,必须继承XXRepository接口,其中的T代表要操作的实体类,ID代表实体类主键数据类型。在上述示例中,选择继承了JpaRepository接口,JpaRepository的继承结构如下图所示。

      下面对JpaRepository接口继承结构中涉及的接口进行说明,具体如下。

      (1) Repository是Spring Data JPA提供的用于自定义Repository接口的顶级父接口,该接口中没有声明任何方法。

      (2) CrudRepository接口是Repository的继承接口之一,包含了一些基本的CRUD方法。

      (3) PagingAndSortingRepository接口继承CrudRepository接口的同时,提供了分页和排序两个方法。

      (4) QueryByExampleExecutor接口是进行条件封装查询的顶级父接口,允许通过Example实例执行复杂条件查询。

      JpaRepository接口同时继承了PagingAndSortingRepository接口和QueryByExampleExecutor接口,并额外提供了一些数据操作方法。自定义Repository接口文件时,通常会直接选择继承JpaRepository接口。

      2.2.2 操作数据的多种方式

      在使用Spring Data JPA进行数据操作时,可以有多种实现方式,主要方式如下。

      (1).如果自定义接口继承了JpaRepository接口,则默认包含了一些常用的CRUD方法。

      (2).自定义Repository接口中,可以使用@Query注解配合SQL语句进行数据的查、改、删操作。

      (3).自定义Repository接口中,可以直接使用方法名关键字进行查询操作。

      其中,Spring Data JPA中支持的方法名关键字及对应的SQL片段说明,如下表所示。

      2.2.3 @Transactional事务管理

      在自定义的Repository接口中,针对数据的变更操作(修改、删除),无论是否使用了@Query注解,都必须在方法上方添加@Transactional注解进行事务管理,否则程序执行就会出现InvalidDataAccessApiUsageException异常。如果在调用Repository接口方法的业务层Service类上已经添加了@Transactional注解进行事务管理,那么Repository接口文件中就可以省略@Transactional注解。

      2.2.4 @Moditying注解

      在自定义的Repository接口中,使用@Query注解方式执行数据变更操作(修改、删除),除了要使用@Query注解,还必须添加@Moditying注解表示数据变更。

      2.3.5 复杂条件查询

      JPA还支持使用Example实例进行复杂条件查询。例如,针对JpaRepository接口中已存在的findAll(Example var1)方法进行查询。

      三. 使用Spring Boot整合JPA

      使用Spring Boot整合JPA,具体步骤如下。

      3.1 添加Spring Data JPA依赖启动器

      在项目的pom.xml文件中添加Spring Data JPA依赖启动器。

      注意:

      我们并没有编写Spring Data JPA对应的版本号,这是因为Spring Boot对Spring Data JPA的版本号进行了统一管理。

      3.2 编写ORM实体类

      为了方便操作,以之前创建的数据库表t_comment为例编写对应的实体类,将之前创建的Comment类复制一份并重命名为Discuss,同时添加JPA对应的注解进行映射配置。

      3.3 编写Repository接口

      在com.cy.repository包下创建一个用于对数据库表t_comment进行操作的Repository接口DiscussRepository。

      3.4 编写单元测试进行接口方法测试

      将Chapter03ApplcationTests测试类在当前位置复制一份并重命名为JpaTests,用来编写JPA相关的单元测试,并对内容稍微修改后编写DiscussRepository接口对应的测试方法。

      测试方法中分别使用了JpaRepository默认方法、方法名关键字、@Query注解和Example封装参数的形式进行了数据操作。

      3.5 整合测试

      选择JpaTests测试类中单元测试方法进行效果的演示。

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发
      相关文章 更多
      JPA在Java中的作用及ORM优势详解
      JPA在Java中的作用及ORM优势详解

      JPA是Java中的ORM规范,通过标准API简化数据库操作。它统一了不同ORM框架的操作方式,降低了学习成本,提高了代码可移植性。Hibernate是JPA的一个实现,提供了更多扩展功能。1.在SpringBoot中使用JPA需添加spring-boot-starter-data-jpa依赖,并用@Entity和@Repository注解定义实体和数据访问层。2.EntityManager是JPA核心接口,负责管理实体生命周期,可通过@PersistenceContext注入。3.@Query注解用于编

      springBoot项目常用目录有哪些
      springBoot项目常用目录有哪些

      springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

      检验你对Java JPA持久化框架的熟练程度:精选面试问题
      检验你对Java JPA持久化框架的熟练程度:精选面试问题

      什么是JPA?它与JDBC有什么区别?JPA(JavaPersistenceapi)是一个用于对象关系映射(ORM)的标准接口,它允许Java开发者使用熟悉的Java对象来操作数据库,而无需编写直接针对数据库的sql查询。而JDBC(JavaDatabaseConnectivity)是Java用于连接数据库的标准API,它需要开发者使用SQL语句来操作数据库。JPA将JDBC封装起来,为对象-关系映射提供了更方便、更高级别的API,简化了数据访问操作。在JPA中,什么是实体(Entity)?实体是JPA中

      Java JPA和其他持久化框架之间的对比:哪一个更符合你的需求?
      Java JPA和其他持久化框架之间的对比:哪一个更符合你的需求?

      JPA(JavaPersistenceapi)是一个标准的JavaAPI,它提供了一组用于访问和持久化数据对象的接口。JPA是JPA工作组的成果,该工作组由SunMicrosystems(现为oracle)和其他公司组成。JPA于2006年12月发布,并已成为JavaPersistenceAPI规范的标准实现。JPA框架提供了以下主要特性:对象-关系映射(ORM)事务管理查询JPAORM将数据库表映射到Java对象,以便您可以使用标准的JavaAPI来操作数据库数据。JPA事务管理允许您对多个数据库操作进

      探索Java JPA技术:掌握最新趋势和最佳策略
      探索Java JPA技术:掌握最新趋势和最佳策略

      JavaJPA(JavaPersistenceapi)是一种用于Java的持久化框架。它允许您将对象存储到数据库中,并从数据库中检索对象。JPA是一个标准API,有多种实现可供选择,包括EclipseLink、Hibernate和TopLink。JPA2.2是JPA的最新版本。它包含了许多新特性和改进,包括:对Java8的支持对NoSQL数据库的支持改进的缓存支持改进的多线程支持JPA是构建持久性应用程序的理想选择。它易于使用,并且可以很容易地与其他Java技术集成。JPA还可以提高应用程序的性能和可扩展

      Java JPA项目实践指南: 从基础到高级
      Java JPA项目实践指南: 从基础到高级

      一、JavaJPA项目实战指南概述JavaJPA(JavaPersistenceapi)是一种Java规范,它定义了对象/关系映射(ORM)的标准,JPA允许开发人员使用Java编程语言进行对象持久化,并与关系型数据库进行交互。JPA提供了一组标准的注解和API,这些注解和API可以将Java对象映射到数据库表,并完成数据持久化操作。二、使用JPA的好处1.简化数据访问:JPA提供了一套标准的API,可以简化对数据库的访问,无需直接编写sql语句。2.提高开发效率:JPA可以通过注解自动完成对象与数据库表

      借助先驱者的智慧:深入研究 Hibernate 框架的关键概念
      借助先驱者的智慧:深入研究 Hibernate 框架的关键概念

      Hibernate:助力Java应用轻松访问数据库在当今飞速发展的软件开发领域,数据管理和持久化技术至关重要。Hibernate作为一款备受欢迎的Java持久层框架,以其强大而灵活的特性,为开发者们提供了极大的便利。这篇文章将带你深入探索Hibernate的知识点,以便你更好地理解和使用它。一、Hibernate入门:揭开持久化框架的神秘面紗Hibernate作为一款持久的框架,它可以将Java对象转换为数据库记录,并能够在需要时重新获取这些Java对象。这为数据访问带来诸多便利,开发者无需再编写繁杂的s

      推荐充满活力的 Java JPA 开源项目,为你的项目增添新的动力
      推荐充满活力的 Java JPA 开源项目,为你的项目增添新的动力

      在Java编程领域,JPA(JavaPersistenceapi)作为一种流行的持久化框架,为开发者提供了对关系型数据库进行操作的便捷方式。通过使用JPA,开发者可以轻松地将Java对象持久化到数据库中,并从数据库中检索数据,从而极大地提高了应用程序的开发效率和维护性。本文精心挑选了10个高质量的JavaJPA开源项目,涵盖了各种不同的功能和应用场景,旨在为开发者提供更多的灵感和解决方案,助力打造更高效和可靠的应用程序。这些项目包括:SpringDataJPA:springDataJPA是Spring生态

      JPA与MyBatis:功能性能对比分析
      JPA与MyBatis:功能性能对比分析

      JPA和MyBatis:功能与性能对比分析引言:在Java开发中,持久化框架扮演着非常重要的角色。常见的持久化框架包括JPA(JavaPersistenceAPI)和MyBatis。本文将对这两个框架的功能和性能进行对比分析,并提供具体的代码示例。一、功能对比:JPA:JPA是JavaEE的一部分,提供了一种面向对象的数据持久化解决方案。它通过注解或X

      如何在选择JPA和MyBatis之间做出正确的ORM工具选择
      如何在选择JPA和MyBatis之间做出正确的ORM工具选择

      JPA还是MyBatis:选择合适的ORM工具的准则,需要具体代码示例引言:在现代软件开发中,使用ORM(对象关系映射)工具是非常常见的。ORM工具能够将关系型数据库中的表与对象模型间进行映射,大大简化了开发过程。然而,在选择使用哪个ORM工具时,很多开发者常常感到困惑。本文将讨论如何选择适合的ORM工具,重点比较JPA和MyBatis,并给出具体的代码示例

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。