欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合JPA框架實(shí)現(xiàn)過(guò)程講解

 更新時(shí)間:2022年12月21日 09:59:32   作者:一一哥Sun  
在開(kāi)發(fā)中,我們通常會(huì)對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行操作,Sprirng?Boot對(duì)關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)的訪問(wèn)操作都提供了非常好的整合支持

一. Spring Boot數(shù)據(jù)訪問(wèn)概述

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-starterMyBatis啟動(dòng)器
mybatis-plus-boot-starterMyBatis-Plus啟動(dòng)器
spring-boot-starter-data-jpaSpring Data JPA與Hibernate的啟動(dòng)器
spring- boot starter-data-redisRedis鍵值數(shù)據(jù)存儲(chǔ)與Spring Data Redis和Jedis客戶端的啟動(dòng)器
spring-boot-starter-data-neo4jNeo4j圖數(shù)據(jù)庫(kù)和Spring Data Neo4j的啟動(dòng)器
spring-boot-starter-data-mongodbMongoDB和Spring Data MongoDB的啟動(dòng)器

二. Spring Data JPA簡(jiǎn)介

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)單介紹。

2.1 編寫(xiě)ORM實(shí)體類

Spring Data JPA框架是針對(duì)具有ORM關(guān)系的數(shù)據(jù)進(jìn)行操作,所以在使用Spring Data JPA時(shí),首先需要編寫(xiě)一個(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ù)表的名稱就是首字母小寫(xiě)的類名。當(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)的表字段名。

2.2 編寫(xiě)Repository接口

針對(duì)不同的表數(shù)據(jù)操作編寫(xiě)各自對(duì)應(yīng)的Repository接口,并根據(jù)需要編寫(xiě)對(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)編寫(xiě)原生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接口編寫(xiě)時(shí)的特殊要求,壹哥給大家解釋一下。

2.2.1 繼承XXRepository<T, ID>接口

我們?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接口。

2.2.2 操作數(shù)據(jù)的多種方式

在使用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ō)明,如下表所示。

2.2.3 @Transactional事務(wù)管理

在自定義的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注解。

2.2.4 @Moditying注解

在自定義的Repository接口中,使用@Query注解方式執(zhí)行數(shù)據(jù)變更操作(修改、刪除),除了要使用@Query注解,還必須添加@Moditying注解表示數(shù)據(jù)變更。

2.3.5 復(fù)雜條件查詢

JPA還支持使用Example實(shí)例進(jìn)行復(fù)雜條件查詢。例如,針對(duì)JpaRepository接口中已存在的findAll(Example<S> var1)方法進(jìn)行查詢。

三. 使用Spring Boot整合JPA

使用Spring Boot整合JPA,具體步驟如下。

3.1 添加Spring Data JPA依賴啟動(dòng)器

在項(xiàng)目的pom.xml文件中添加Spring Data JPA依賴啟動(dòng)器。

注意:

我們并沒(méi)有編寫(xiě)Spring Data JPA對(duì)應(yīng)的版本號(hào),這是因?yàn)镾pring Boot對(duì)Spring Data JPA的版本號(hào)進(jìn)行了統(tǒng)一管理。

3.2 編寫(xiě)ORM實(shí)體類

為了方便操作,以之前創(chuàng)建的數(shù)據(jù)庫(kù)表t_comment為例編寫(xiě)對(duì)應(yīng)的實(shí)體類,將之前創(chuàng)建的Comment類復(fù)制一份并重命名為Discuss,同時(shí)添加JPA對(duì)應(yīng)的注解進(jìn)行映射配置。

3.3 編寫(xiě)Repository接口

在com.cy.repository包下創(chuàng)建一個(gè)用于對(duì)數(shù)據(jù)庫(kù)表t_comment進(jìn)行操作的Repository接口DiscussRepository。

3.4 編寫(xiě)單元測(cè)試進(jìn)行接口方法測(cè)試

將Chapter03ApplcationTests測(cè)試類在當(dāng)前位置復(fù)制一份并重命名為JpaTests,用來(lái)編寫(xiě)JPA相關(guān)的單元測(cè)試,并對(duì)內(nèi)容稍微修改后編寫(xiě)DiscussRepository接口對(duì)應(yīng)的測(cè)試方法。

測(cè)試方法中分別使用了JpaRepository默認(rèn)方法、方法名關(guān)鍵字、@Query注解和Example封裝參數(shù)的形式進(jìn)行了數(shù)據(jù)操作。

3.5 整合測(cè)試

選擇JpaTests測(cè)試類中單元測(cè)試方法進(jìn)行效果的演示。

以上就是SpringBoot中整合JPA框架的過(guò)程,你學(xué)會(huì)了嗎?如果還有其他疑問(wèn),可以在評(píng)論區(qū)留言哦。

到此這篇關(guān)于SpringBoot整合JPA框架實(shí)現(xiàn)過(guò)程講解的文章就介紹到這了,更多相關(guān)SpringBoot整合JPA內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis-plus中BaseMapper入門(mén)使用

    mybatis-plus中BaseMapper入門(mén)使用

    本文主要介紹了mybatis-plus中BaseMapper入門(mén)使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java并發(fā)編程深入理解之Synchronized的使用及底層原理詳解 上

    Java并發(fā)編程深入理解之Synchronized的使用及底層原理詳解 上

    在并發(fā)編程中存在線程安全問(wèn)題,主要原因有:1.存在共享數(shù)據(jù) 2.多線程共同操作共享數(shù)據(jù)。關(guān)鍵字synchronized可以保證在同一時(shí)刻,只有一個(gè)線程可以執(zhí)行某個(gè)方法或某個(gè)代碼塊,同時(shí)synchronized可以保證一個(gè)線程的變化可見(jiàn)(可見(jiàn)性),即可以代替volatile
    2021-09-09
  • Java裝飾器設(shè)計(jì)模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java裝飾器設(shè)計(jì)模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java裝飾器設(shè)計(jì)模式的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • Maven中exec插件執(zhí)行Java程序的實(shí)現(xiàn)

    Maven中exec插件執(zhí)行Java程序的實(shí)現(xiàn)

    在Maven項(xiàng)目中,可以使用Maven的插件來(lái)執(zhí)行Java程序,本文主要介紹了Maven中exec插件執(zhí)行Java程序的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Java中的自旋鎖解析

    Java中的自旋鎖解析

    這篇文章主要介紹了Java中的自旋鎖解析,自旋鎖是指當(dāng)一個(gè)線程嘗試獲取某個(gè)鎖時(shí),如果該鎖已被其他線程占用,就一直循環(huán)檢測(cè)鎖是否被釋放,而不是進(jìn)入線程掛起或睡眠狀態(tài),需要的朋友可以參考下
    2023-10-10
  • mybatis使用foreach查詢不出結(jié)果也不報(bào)錯(cuò)的問(wèn)題

    mybatis使用foreach查詢不出結(jié)果也不報(bào)錯(cuò)的問(wèn)題

    這篇文章主要介紹了mybatis使用foreach查詢不出結(jié)果也不報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java selenium截圖操作的實(shí)現(xiàn)

    Java selenium截圖操作的實(shí)現(xiàn)

    這篇文章主要介紹了Java selenium截圖操作的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java判斷integer是否為空的詳細(xì)過(guò)程

    java判斷integer是否為空的詳細(xì)過(guò)程

    在java編寫(xiě)過(guò)程中,我們會(huì)使用到各種各樣的表達(dá)式,在使用表達(dá)式的過(guò)程中,有哪些安全問(wèn)題需要我們注意的呢?對(duì)java判斷integer是否為空相關(guān)知識(shí)感興趣的朋友一起來(lái)看看吧
    2023-02-02
  • 淺談springMVC接收前端json數(shù)據(jù)的總結(jié)

    淺談springMVC接收前端json數(shù)據(jù)的總結(jié)

    下面小編就為大家分享一篇淺談springMVC接收前端json數(shù)據(jù)的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Java實(shí)現(xiàn)連接kubernates集群的兩種方式詳解

    Java實(shí)現(xiàn)連接kubernates集群的兩種方式詳解

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)連接kubernates集群的兩種方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01

最新評(píng)論