您好,登錄后才能下訂單哦!
這篇文章主要介紹了SpringBoot怎么整合JPA框架的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇SpringBoot怎么整合JPA框架文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
Spring Data是Spring提供的一個(gè)用于簡(jiǎn)化數(shù)據(jù)庫(kù)訪問(wèn)、支持云服務(wù)的開(kāi)源框架。它是一個(gè)傘形項(xiàng)目,包含了大量關(guān)系型數(shù)據(jù)庫(kù)及非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問(wèn)解決方案,其設(shè)計(jì)目的是使我們可以快速且簡(jiǎn)單地使用各種數(shù)據(jù)訪問(wèn)技術(shù)。Spring Boot默認(rèn)采用整合Spring Data的方式統(tǒng)一處理數(shù)據(jù)訪問(wèn)層,通過(guò)添加大量自動(dòng)配置,引入各種數(shù)據(jù)訪問(wèn)模板xxxTemplate以及統(tǒng)一的Repository接口,從而達(dá)到簡(jiǎn)化數(shù)據(jù)訪問(wèn)層的操作。
Spring Data提供了多種類型數(shù)據(jù)庫(kù)支持,Spring Boot對(duì)Spring Data支持的數(shù)據(jù)庫(kù)進(jìn)行了整合管理,提供了各種依賴啟動(dòng)器。通過(guò)一張表羅列Spring Boot提供的常見(jiàn)數(shù)據(jù)庫(kù)依賴啟動(dòng)器。
名稱 | 描述 |
mybatis-spring-boot-starter | MyBatis啟動(dòng)器 |
mybatis-plus-boot-starter | MyBatis-Plus啟動(dòng)器 |
spring-boot-starter-data-jpa | Spring Data JPA與Hibernate的啟動(dòng)器 |
spring- boot starter-data-redis | Redis鍵值數(shù)據(jù)存儲(chǔ)與Spring Data Redis和Jedis客戶端的啟動(dòng)器 |
spring-boot-starter-data-neo4j | Neo4j圖數(shù)據(jù)庫(kù)和Spring Data Neo4j的啟動(dòng)器 |
spring-boot-starter-data-mongodb | MongoDB和Spring Data MongoDB的啟動(dòng)器 |
JPA(Java Persistence API,Java持久化API )是Sun公司官方提出的Java持久化規(guī)范,它為Java開(kāi)發(fā)人員提供了一種對(duì)象/關(guān)系映射的工具管理Java中的關(guān)系型數(shù)據(jù),其主要目的是簡(jiǎn)化現(xiàn)有的持久化開(kāi)發(fā)工作和整合ORM(Object Relational Mapping,對(duì)象/關(guān)系映射)技術(shù)。Spring Data在JPA規(guī)范的基礎(chǔ)上,充分利用其優(yōu)點(diǎn),提出了Spring Data JPA模塊對(duì)具有ORM關(guān)系數(shù)據(jù)進(jìn)行持久化操作。
Spring Data JPA是Spring在ORM框架、JPA規(guī)范的基礎(chǔ)上封裝的一套JPA應(yīng)用框架,提供了增刪改查等常用功能,使開(kāi)發(fā)者可以用較少的代碼實(shí)現(xiàn)數(shù)據(jù)操作,同時(shí)還易于擴(kuò)展。在介紹Spring Boot整合JPA之前,先針對(duì)Spring Data JPA的基本使用進(jìn)行簡(jiǎn)單介紹。
Spring Data JPA框架是針對(duì)具有ORM關(guān)系的數(shù)據(jù)進(jìn)行操作,所以在使用Spring Data JPA時(shí),首先需要編寫一個(gè)實(shí)體類與數(shù)據(jù)表進(jìn)行映射,并且配置好映射關(guān)系。
@Entity(name = "t_comment") // 設(shè)置ORM實(shí)體類,并指定映射的表名 public class Discuss { @Id // 表明映射對(duì)應(yīng)的主鍵id @GeneratedValue(strategy = GenerationType.IDENTITY) // 設(shè)置主鍵自增策略 @Column(name = "article_id") // 指定映射的表字段名 private Integer articleId; // Generate: Getter and Setter、toString() }
針對(duì)上述代碼,壹哥把用到的注解給大家進(jìn)行簡(jiǎn)要說(shuō)明。
@Entity:標(biāo)注要與數(shù)據(jù)庫(kù)做映射的實(shí)體類,默認(rèn)情況下,數(shù)據(jù)表的名稱就是首字母小寫的類名。當(dāng)然,還可以使用name屬性指定映射的表名。
@ld:標(biāo)注在類屬性或者getter方法上,表示某一個(gè)屬性對(duì)應(yīng)表中的主鍵。
@GeneratedValue:與@ld注解標(biāo)注在同一位置,用于表示屬性對(duì)應(yīng)主鍵的生成策略,可省略。Spring Data JPA支持的主鍵生成策略包括有TABLE(使用一個(gè)特定的數(shù)據(jù)庫(kù)表格來(lái)保存主鍵)、SEQUENCE(不支持主鍵自增長(zhǎng)的數(shù)據(jù)庫(kù)主鍵生成策略)、IDENTITY(主鍵自增)和AUTO(JPA自主選擇前面3種合適的策略,是默認(rèn)選項(xiàng))。
@Column:標(biāo)注在屬性上,當(dāng)類屬性與表字段名不同時(shí),能夠配合name屬性表示類屬性對(duì)應(yīng)的表字段名。
針對(duì)不同的表數(shù)據(jù)操作編寫各自對(duì)應(yīng)的Repository接口,并根據(jù)需要編寫對(duì)應(yīng)的數(shù)據(jù)操作方法。
public interface DiscussRepository extends JpaRepository<Discuss, Integer> { // 1.查詢author非空的Discuss評(píng)論集合(JPA支持的方法名關(guān)鍵字查詢方式) List<Discuss> findByAuthorNotNull(); // 2.根據(jù)文章id分頁(yè)查詢Discuss評(píng)論集合 @Query("SELECT c FROM t_comment c WHERE c.articleId = ?1") List<Discuss> getDiscussPaged(Integer articleid, Pageable pageable); // 3.使用元素SQL語(yǔ)句,根據(jù)文章id分頁(yè)查詢Discuss評(píng)論集合,nativeQuery為true表示用來(lái)編寫原生SQL語(yǔ)句 @Query(value = "SELECT * FROM t_comment WHERE article_Id = ?1", nativeQuery = true) List<Discuss> getDiscussPaged2(Integer articleid, Pageable pageable); //4.根據(jù)評(píng)論id修改評(píng)論作者author @Transactional // 表示支持事務(wù)管理 @Modifying // 表示支持?jǐn)?shù)據(jù)變更 @Query("UPDATE t_comment c SET c.author = ?1 WHERE c.id = ?2") Integer updateDiscuss(String author, Integer id); // 5.根據(jù)評(píng)論id刪除評(píng)論 @Transactional @Modifying @Query("DELETE t_comment c WHERE c.id = ?1") Integer deleteDiscuss(Integer id); }
針對(duì)Repository接口編寫時(shí)的特殊要求,壹哥給大家解釋一下。
我們?cè)谑褂肧pring Data JPA自定義Repository接口時(shí),必須繼承XXRepository<T, ID>
接口,其中的T代表要操作的實(shí)體類,ID代表實(shí)體類主鍵數(shù)據(jù)類型。在上述示例中,選擇繼承了JpaRepository接口,JpaRepository的繼承結(jié)構(gòu)如下圖所示。
下面對(duì)JpaRepository接口繼承結(jié)構(gòu)中涉及的接口進(jìn)行說(shuō)明,具體如下。
(1) Repository是Spring Data JPA提供的用于自定義Repository接口的頂級(jí)父接口,該接口中沒(méi)有聲明任何方法。
(2) CrudRepository接口是Repository的繼承接口之一,包含了一些基本的CRUD方法。
(3) PagingAndSortingRepository接口繼承CrudRepository接口的同時(shí),提供了分頁(yè)和排序兩個(gè)方法。
(4) QueryByExampleExecutor接口是進(jìn)行條件封裝查詢的頂級(jí)父接口,允許通過(guò)Example實(shí)例執(zhí)行復(fù)雜條件查詢。
JpaRepository接口同時(shí)繼承了PagingAndSortingRepository接口和QueryByExampleExecutor接口,并額外提供了一些數(shù)據(jù)操作方法。自定義Repository接口文件時(shí),通常會(huì)直接選擇繼承JpaRepository接口。
在使用Spring Data JPA進(jìn)行數(shù)據(jù)操作時(shí),可以有多種實(shí)現(xiàn)方式,主要方式如下。
(1).如果自定義接口繼承了JpaRepository接口,則默認(rèn)包含了一些常用的CRUD方法。
(2).自定義Repository接口中,可以使用@Query注解配合SQL語(yǔ)句進(jìn)行數(shù)據(jù)的查、改、刪操作。
(3).自定義Repository接口中,可以直接使用方法名關(guān)鍵字進(jìn)行查詢操作。
其中,Spring Data JPA中支持的方法名關(guān)鍵字及對(duì)應(yīng)的SQL片段說(shuō)明,如下表所示。
在自定義的Repository接口中,針對(duì)數(shù)據(jù)的變更操作(修改、刪除),無(wú)論是否使用了@Query注解,都必須在方法上方添加@Transactional注解進(jìn)行事務(wù)管理,否則程序執(zhí)行就會(huì)出現(xiàn)InvalidDataAccessApiUsageException異常。如果在調(diào)用Repository接口方法的業(yè)務(wù)層Service類上已經(jīng)添加了@Transactional注解進(jìn)行事務(wù)管理,那么Repository接口文件中就可以省略@Transactional注解。
在自定義的Repository接口中,使用@Query注解方式執(zhí)行數(shù)據(jù)變更操作(修改、刪除),除了要使用@Query注解,還必須添加@Moditying注解表示數(shù)據(jù)變更。
JPA還支持使用Example實(shí)例進(jìn)行復(fù)雜條件查詢。例如,針對(duì)JpaRepository接口中已存在的findAll(Example<S> var1)
方法進(jìn)行查詢。
使用Spring Boot整合JPA,具體步驟如下。
在項(xiàng)目的pom.xml文件中添加Spring Data JPA依賴啟動(dòng)器。
注意:
我們并沒(méi)有編寫Spring Data JPA對(duì)應(yīng)的版本號(hào),這是因?yàn)镾pring Boot對(duì)Spring Data JPA的版本號(hào)進(jìn)行了統(tǒng)一管理。
為了方便操作,以之前創(chuàng)建的數(shù)據(jù)庫(kù)表t_comment為例編寫對(duì)應(yīng)的實(shí)體類,將之前創(chuàng)建的Comment類復(fù)制一份并重命名為Discuss,同時(shí)添加JPA對(duì)應(yīng)的注解進(jìn)行映射配置。
在com.cy.repository包下創(chuàng)建一個(gè)用于對(duì)數(shù)據(jù)庫(kù)表t_comment進(jìn)行操作的Repository接口DiscussRepository。
將Chapter03ApplcationTests測(cè)試類在當(dāng)前位置復(fù)制一份并重命名為JpaTests,用來(lái)編寫JPA相關(guān)的單元測(cè)試,并對(duì)內(nèi)容稍微修改后編寫DiscussRepository接口對(duì)應(yīng)的測(cè)試方法。
測(cè)試方法中分別使用了JpaRepository默認(rèn)方法、方法名關(guān)鍵字、@Query注解和Example封裝參數(shù)的形式進(jìn)行了數(shù)據(jù)操作。
選擇JpaTests測(cè)試類中單元測(cè)試方法進(jìn)行效果的演示。
關(guān)于“SpringBoot怎么整合JPA框架”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“SpringBoot怎么整合JPA框架”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。