Spring data jpa詳解__spring

來源:互聯網
上載者:User
1.什麼是spring data jpa spring data jpa 是 spring 基於ORM 架構、jpa規範的基礎上封裝的一套jpa應用程式框架,可使開發人員用極簡的代碼即可實現對資料的訪問和操作。它提供了包括增刪改查等在內的常用功能,且易於擴充。學習並使用 spring data jpa 可以極大提高開發效率。 基本上所有CRUD都可以依賴於它來實現。 2.使用方法 在pom.xml中加入依賴

Dao繼承JpaRepository

spring data jpa 預設預先產生了一些基本的CURD的方法,例如:增、刪、改等等 預設方法有:

spring data jpa 重要的地方是可以自訂簡單查詢,即為根據方法名來自動產生sql,例子如下:

上圖的方法即會產生的sql 語句為:

select * from tb_banner where shop_id = ?1 and flag = ?2 order by priority asc 一個更加長的方法。。。。。。

上圖的方法即會產生的sql語句為:

select * from tb_course where shop_id = ?1 and one_classify_id = ?2 and two_classify_id = ?3 and flag = ?4 具體的關鍵字,使用方法和生產成SQL如下表所示


分頁查詢 spring data jpa已經幫我們實現了分頁的功能,在查詢的方法中,需要傳入參數Pageable,一般我會將pageable作為最後一個參數。 使用方法

直接在controller層封裝好Pageable對象即可

@GetMapping("findBanners")public Page<Banner> findBanners(@PageableDefault(sort = {"priority"}, direction=Sort.Direction.ASC) Pageable pageable)

如果前端不傳page 和 size 這兩個參數過來,那麼@PageableDefault會預設為第1頁開始,每頁最大條數為10。需注意page為0時為第一頁。

接著,直接在service層調用即可

返回給用戶端的Page對象,其json格式為
{
“content”: [],//資料內容
“first”: true,//是否為第一頁
“last”: true,//是否為最後一頁
“number”: 0,//當前頁碼
“numberOfElements”: 0,//當前頁中的實際資料條數
“size”: 0,//一頁最大條數
“sort”: { },//排序資訊
“totalElements”: 0,//總條數
“totalPages”: 0//總頁數
}

你也可以自己手動建立Pageable對象

同時,通過Page.map方法,可以修改Page所含有的值。

convert方法將course集合中的每個course轉為courseSimpleVo

toCourseSimpleVo方法將Course類轉為CourseSimpleVo類
動態查詢

現在有下圖這種需求,需要通過不同的查詢條件查詢訂單

因為查詢參數的數量是不確定的,所以我們會在dao層寫很多方法,這是非常不理想的。
用排列組合的方式,上面有5個不確定的查詢參數,我們可能需要有30多種查詢方法,就如下圖

因此,這裡給出一個解決方案,利用spring data jpa 中的 Specification介面

針對上述問題,我們建立一個OrderSpec類,裡面建立查詢參數

註:當orderType 為 null 時,則不會出現在 SQL 查詢語句中
類似的,我們把其他參數也加上

時間這裡,做了空值處理

接著在Service層,即可建立查詢
自訂SQL查詢 其實Spring data 覺大部分的SQL都可以根據方法名定義的方式來實現,但是由於某些原因我們想使用自訂的SQL來查詢,spring data也是完美支援的;在SQL的查詢方法上面使用@Query註解,如涉及到刪除和修改需要加上@Modifying.也可以根據需要添加 @Transactional 對事物的支援等。



多表查詢

多表查詢在spring data jpa中有兩種實現方式,第一種是利用hibernate的級聯查詢來實現,第二種是建立一個結果集的介面來接收連表查詢後的結果,這裡主要第二種方式。
Spring data jpa 與 hibernate、mybatis 和其他持久層開源架構的關係

我的理解是:雖然ORM架構都實現了JPA規範,但是在不同ORM架構之間切換是需要編寫的代碼有一些差異,而通過使用Spring Data Jpa能夠方便大家在不同的ORM架構中間進行切換而不要更改代碼。並且Spring Data Jpa對Repository層封裝的很好,可以省去不少的麻煩。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.