JPA系列之Spring Data JPA系列之入門教程

      網(wǎng)友投稿 825 2025-03-31

      spring Data框架和spring Data JPA簡介


      Spring Data : Spring 的一個(gè)子項(xiàng)目。用于簡化數(shù)據(jù)庫訪問,支持NoSQL 和 關(guān)系數(shù)據(jù)存儲(chǔ)。

      下面給出SpringData 項(xiàng)目所支持 NoSQL 存儲(chǔ):

      MongoDB (文檔數(shù)據(jù)庫)

      Neo4j(圖形數(shù)據(jù)庫)

      Redis(鍵/值存儲(chǔ))

      Hbase(列族數(shù)據(jù)庫)

      SpringData 項(xiàng)目所支持的關(guān)系數(shù)據(jù)存儲(chǔ)技術(shù):

      JDBC

      JPA

      JPA Spring Data : 致力于減少數(shù)據(jù)訪問層 (DAO) 的開發(fā)量。開發(fā)者只要寫好持久層接口就好,然后其它的框架會(huì)幫程序員實(shí)現(xiàn)。

      Spring Data JPA例子

      實(shí)現(xiàn)步驟:

      1.配置 Spring 整合 JPA

      2.在 Spring 配置文件中配置 Spring Data,讓 Spring 為聲明的接口創(chuàng)建代理對(duì)象。

      3.聲明持久層的接口,該接口繼承 Repository

      4.在接口中聲明需要的方法

      同時(shí)下載 Spring Data Commons 和 Spring Data JPA 兩個(gè)發(fā)布包,也可以在maven里配置

      org.springframework.data spring-data-jpa ${spring-data-jpa.version}

      1

      2

      3

      4

      5

      寫個(gè)接口Repository:

      public interface UserRepository extends Repository{ User getByUserId(Integer id); }

      1

      2

      3

      Repository接口概述:

      (1)Repository 接口是 Spring Data 的一個(gè)核心接口,它不提供任何方法,開發(fā)者需要在自己定義的接口中聲明需要的方法

      JPA系列之Spring Data JPA系列之入門教程

      public interface Repository { }

      (2)Spring Data可以讓我們只定義接口,只要遵循 Spring Data的規(guī)范,就無需寫實(shí)現(xiàn)類。

      (3)與繼承 Repository 等價(jià)的一種方式,就是在持久層接口上使用 @RepositoryDefinition 注解,并為其指定 domainClass 和 idClass 屬性。如下兩種方式是完全等價(jià)的

      Repository子接口

      基礎(chǔ)的Repository提供了最基本的數(shù)據(jù)訪問功能,其幾個(gè)子接口則擴(kuò)展了一些功能。

      按照 Spring Data 的規(guī)范,查詢方法以 find | read | get 開頭, 涉及條件查詢時(shí),條件的屬性用條件關(guān)鍵字連接,要注意的是:條件屬性以首字母大寫。

      查詢方法解析

      假如創(chuàng)建如下的查詢:findByUserDepUuid(),框架在解析該方法時(shí),首先剔除 findBy,然后對(duì)剩下的屬性進(jìn)行解析,假設(shè)查詢實(shí)體為Doc

      (1)先判斷 userDepUuid (根據(jù) POJO 規(guī)范,首字母變?yōu)樾懀┦欠駷椴樵儗?shí)體的一個(gè)屬性,如果是,則表示根據(jù)該屬性進(jìn)行查詢;如果沒有該屬性,繼續(xù)第二步;

      (2)從右往左截取第一個(gè)大寫字母開頭的字符串(此處為Uuid),然后檢查剩下的字符串是否為查詢實(shí)體的一個(gè)屬性,如果是,則表示根據(jù)該屬性進(jìn)行查詢;如果沒有該屬性,則重復(fù)第二步,繼續(xù)從右往左截取;最后假設(shè) user 為查詢實(shí)體的一個(gè)屬性;

      (3)接著處理剩下部分(DepUuid),先判斷 user 所對(duì)應(yīng)的類型是否有depUuid屬性,如果有,則表示該方法最終是根據(jù) “ Doc.user.depUuid” 的取值進(jìn)行查詢;否則繼續(xù)按照步驟 2 的規(guī)則從右往左截取,最終表示根據(jù) “Doc.user.dep.uuid” 的值進(jìn)行查詢。

      (4)可能會(huì)存在一種特殊情況,比如 Doc包含一個(gè) user 的屬性,也有一個(gè) userDep 屬性,此時(shí)會(huì)存在混淆。可以明確在屬性之間加上 “_” 以顯式表達(dá)意圖,比如 “findByUser_DepUuid()” 或者 “findByUserDep_uuid()”

      特殊的參數(shù): 還可以直接在方法的參數(shù)上加入分頁或排序的參數(shù),比如:

      Page findByName(String name, Pageable pageable);

      List findByName(String name, Sort sort);

      使用 @Query 注解

      @Query來指定本地查詢

      注意要點(diǎn)

      如果是 @Query 中有 LIKE 關(guān)鍵字,后面的參數(shù)需要前面或者后面加 %,這樣在傳遞參數(shù)值的時(shí)候就可以不加 %:

      @Query("select o from UserModel o where o.name like %?1")

      1

      2

      使用@Query來指定本地查詢,只要設(shè)置nativeQuery為true

      @Query(value="select * from tbl_user where name like %?1" ,nativeQuery=true)

      1

      @Query 與 @Modifying 這兩個(gè) annotation一起聲明,可定義個(gè)性化更新操作,例如只涉及某些字段更新時(shí)最為常用

      Spring Data 提供了默認(rèn)的事務(wù)處理方式,即所有的查詢均聲明為只讀事務(wù)。

      CrudRepository 接口

      CrudRepository 接口提供了最基本的對(duì)實(shí)體類的添刪改查操作

      PagingAndSortingRepository接口

      該接口提供了分頁與排序功能

      Iterable findAll(Sort sort); //排序

      Page findAll(Pageable pageable); //分頁查詢(含排序功能)

      JpaRepository接口

      該接口提供了JPA的相關(guān)功能

      List findAll(); //查找所有實(shí)體

      List findAll(Sort sort); //排序、查找所有實(shí)體

      List save(Iterable entities);//保存集合

      void flush();//執(zhí)行緩存與數(shù)據(jù)庫同步

      T saveAndFlush(T entity);//強(qiáng)制執(zhí)行持久化

      void deleteInBatch(Iterable entities);//刪除一個(gè)實(shí)體集合

      JpaSpecificationExecutor接口

      不屬于Repository體系,實(shí)現(xiàn)一組 JPA Criteria 查詢相關(guān)的方法

      注意也可以自定義Repository的方法

      Spring 數(shù)據(jù)庫

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:excel插入計(jì)算公式的方法
      下一篇:包含智慧食堂管理系統(tǒng)方案的詞條
      相關(guān)文章
      一本久到久久亚洲综合| 亚洲成a人片在线不卡一二三区 | 亚洲国产成人精品无码久久久久久综合 | 亚洲高清国产拍精品青青草原| 亚洲私人无码综合久久网| 亚洲女人初试黑人巨高清| 91亚洲一区二区在线观看不卡| 亚洲免费视频在线观看| 亚洲av伊人久久综合密臀性色| 国产成人亚洲综合色影视| 亚洲日韩欧洲乱码AV夜夜摸| 国产亚洲自拍一区| 中文字幕精品亚洲无线码二区| 亚洲片国产一区一级在线观看| 九月婷婷亚洲综合在线| 亚洲av成人一区二区三区在线播放 | 亚洲码欧美码一区二区三区| 亚洲已满18点击进入在线观看| 亚洲综合久久一本伊伊区| 亚洲精品福利你懂| 亚洲一卡2卡3卡4卡5卡6卡| 亚洲a无码综合a国产av中文| 自拍偷自拍亚洲精品播放| www亚洲精品少妇裸乳一区二区| 国产亚洲情侣久久精品| 亚洲人成人网站在线观看| 亚洲中文字幕第一页在线| 亚洲精品你懂的在线观看| 国产AV无码专区亚洲AV毛网站| 亚洲av无码乱码国产精品fc2| 久久亚洲精品成人av无码网站| 亚洲精品美女视频| 亚洲一区二区三区无码国产| 亚洲三级视频在线| 亚洲一区二区久久| 亚洲日本在线看片| 亚洲一区动漫卡通在线播放| 亚洲男人天堂2018av| 亚洲毛片基地4455ww| 国产91在线|亚洲| 亚洲精品无码专区在线|