Spring Data Jpa 接口方法名

Spring Data Jpa系列教程(一)--------入門

 現在開始,我們來學習船新的一門技術,SpringDataJpa,它是一個。。額。。(我百度一下)

 

JPA(Java Persistence API)是Sun官方提出的Java持久化規範。它爲Java開發人員提供了一種對象/關聯映射工具來管理Java應用中的關係數據。他的出現主要是爲了簡化現有的持久化開發工作和整合ORM技術,結束現在Hibernate,TopLink,JDO等ORM框架各自爲營的局面。值得注意的是,JPA是在充分吸收了現有Hibernate,TopLink,JDO等ORM框架的基礎上發展而來的,具有易於使用,伸縮性強等優點。從目前的開發社區的反應上看,JPA受到了極大的支持和讚揚,其中就包括了Spring與EJB3.0的開發團隊。

注意:JPA是一套規範,不是一套產品,那麼像Hibernate,TopLink,JDO他們是一套產品,如果說這些產品實現了這個JPA規範,那麼我們就可以叫他們爲JPA的實現產品

Spring Data JPA 是 Spring 基於 ORM 框架、JPA 規範的基礎上封裝的一套JPA應用框架,可使開發者用極簡的代碼即可實現對數據的訪問和操作。它提供了包括增刪改查等在內的常用功能,且易於擴展!學習並使用 Spring Data JPA 可以極大提高開發效率!

spring data jpa讓我們解脫了DAO層的操作,基本上所有CRUD都可以依賴於它來實現

好了,以上就是Spring Data JPA的介紹,現在直接開搞

-------首先在spring data jpa中基本的CRUD其實不用自己去做,你只需要

public interface UserRepository extends JpaRepository<User, Integer>{}
這樣就具備了基礎的CRUD功能,而且不需要寫實現類,spring-data-jpa實現了上面的能力,那他是怎麼實現的呢?這裏我們通過源代碼的方式來呈現他的來龍去脈,這個過程中cglib發揮了傑出的作用。   在spring-data-jpa內部,有一個類,叫做

public class SimpleJpaRepository<T, ID extends Serializable> implements JpaRepository<T, ID>, JpaSpecificationExecutor<T>
我們可以看到這個類是實現了JpaRepository接口的,事實上如果我們按照上面的配置,在同一個包下面有UserRepository,但是沒有UserRepositoryImpl這個類的話,在運行時期UserRepository這個接口的實現就是上面的SimpleJpaRepository這個接口。而如果有UserRepositoryImpl這個文件的話,那麼UserRepository的實現類就是UserRepositoryImpl,而UserRepositoryImpl這個類又是SimpleJpaRepository的子類,如此一來就很好的解決了上面的這個不用寫implements的問題。我們通過閱讀這個類的源代碼可以發現,裏面包裝了entityManager,底層的調用關係是entityManager在進行CRUD。

 

-------簡單查詢

  Spring Data JPA的獨特之處就是簡單查詢根本不用寫實現類,直接寫接口就好,它能根據你的接口去生成sql,很酷炫吧

按照方法名解析規則如下:

find+全局修飾+By+實體屬性名稱+限定詞+連接詞+(其他實體屬性)+OrderBy+排序屬性+排序方向

例如:

findDistinctByFirstNameIgnoreCaseAndLastNameOrderByAgeDesc(String firstName,String lastName)
(哇,好長的方法啊!!好神奇)

全局修飾符:distinct,top,first

關鍵詞(限定詞+連接詞):IsNull,IsNotNull,Like,NotLike,Containing,In,NotIn,IgnoreCase,Between,Equals,

LessThan,GreaterThan,After,Before

排序方向:Asc,Desc

嵌套實體方法命名規則:

例如:

List<Person> findByAddress_ZipCode(ZipCode zipCode)
 構詞法:主實體中的子實體名稱+_+子實體屬性名稱

 

通過關鍵詞構造方法如下:

// 對應sql:  select * from user where phone like '136%' and address like '%路%'
findByPhoneStartingWithAndAdressContaining(String phone, String address);
所有支持的關鍵詞:

這張主要了解一下jpa的定義和最基礎的用法。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章