最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年12月21日 09:59:32   作者:一一哥Sun  
在開發(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ù)的開源框架。它是一個(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提供的常見數(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開發(fā)人員提供了一種對(duì)象/關(guān)系映射的工具管理Java中的關(guān)系型數(shù)據(jù),其主要目的是簡(jiǎn)化現(xiàn)有的持久化開發(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)用框架,提供了增刪改查等常用功能,使開發(fā)者可以用較少的代碼實(shí)現(xiàn)數(shù)據(jù)操作,同時(shí)還易于擴(kuò)展。在介紹Spring Boot整合JPA之前,先針對(duì)Spring Data JPA的基本使用進(jìn)行簡(jiǎn)單介紹。

2.1 編寫ORM實(shí)體類

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)的表字段名。

2.2 編寫Repository接口

針對(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í)的特殊要求,壹哥給大家解釋一下。

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)有編寫Spring Data JPA對(duì)應(yīng)的版本號(hào),這是因?yàn)镾pring Boot對(duì)Spring Data JPA的版本號(hào)進(jìn)行了統(tǒng)一管理。

3.2 編寫ORM實(shí)體類

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

3.3 編寫Repository接口

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

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

將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ù)操作。

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)文章

  • 解決J2EE-session在瀏覽器關(guān)閉后失效問(wèn)題

    解決J2EE-session在瀏覽器關(guān)閉后失效問(wèn)題

    最近做項(xiàng)目使用的是Spring+SpringMVC+Mybatis框架,maven管理目錄的javaweb端系統(tǒng),對(duì)于session的一些問(wèn)題,在此小編給大家分享到腳本之家平臺(tái),需要的朋友參考下吧
    2018-01-01
  • JAVA異常和自定義異常處理方式

    JAVA異常和自定義異常處理方式

    這篇文章主要介紹了JAVA異常和自定義異常處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • springboot+jsonp解決前端跨域問(wèn)題小結(jié)

    springboot+jsonp解決前端跨域問(wèn)題小結(jié)

    這篇文章主要介紹了springboot+jsonp解決前端跨域問(wèn)題小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 最新評(píng)論

    上高县| 南安市| 睢宁县| 新余市| 和龙市| 浦北县| 湖口县| 辛集市| 榆林市| 柳江县| 西城区| 图片| 丘北县| 沾益县| 汽车| 清流县| 虞城县| 阿图什市| 贵溪市| 义马市| 嘉祥县| 永康市| 航空| 黄冈市| 望都县| 花垣县| 塔河县| 横峰县| 固安县| 枣强县| 会昌县| 五家渠市| 霍山县| 珲春市| 江西省| 镇巴县| 安福县| 赣州市| 通州市| 蒙城县| 南华县|