1. 程式人生 > >Spring Data JPA的方法命名規則

Spring Data JPA的方法命名規則

Spring Data JPA是個非常強大的ORM持久化解決方案,免去了mybatis或spring jdbcTemplate的開發人員編寫指令碼的無趣工作。

通過簡單明瞭地約定好介面方法的規則,來自動生成相應的JPQL語句,對映成PO物件,能大幅節省開發人員的編碼量。

介面方法的命名規則也很簡單,明白And、Or、Is、Equal、Greater、StartingWith等英文單詞的含義,就可以寫介面方法了。

以下是從Spring Data JPA官方網站上的docs整理而來,網上其他有些文章寫的有的是錯的,

大於等於、小於等於應為:GreaterThanEqual、LessThanEqual,而不是GreaterThanEquals、LessThanEquals,如果帶了s,會導致程式啟動報錯。

關鍵詞 SQL符號 樣例 對應JPQL 語句片段
And and findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2
Or or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2
Is,Equals = findByFirstname,findByFirstnameIs,findByFirstnameEquals … where x.firstname = ?1
Between between xxx and xxx findByStartDateBetween … where x.startDate between ?1 and ?2
LessThan < findByAgeLessThan … where x.age < ?1
LessThanEqual <= findByAgeLessThanEqual … where x.age <= ?1
GreaterThan > findByAgeGreaterThan … where x.age > ?1
GreaterThanEqual >= findByAgeGreaterThanEqual … where x.age >= ?1
After > findByStartDateAfter … where x.startDate > ?1
Before < findByStartDateBefore … where x.startDate < ?1
IsNull is null findByAgeIsNull … where x.age is null
IsNotNull,NotNull is not null findByAge(Is)NotNull … where x.age not null
Like like findByFirstnameLike … where x.firstname like ?1
NotLike not like findByFirstnameNotLike … where x.firstname not like ?1
StartingWith like 'xxx%' findByFirstnameStartingWith … where x.firstname like ?1(parameter bound with appended %)
EndingWith like 'xxx%' findByFirstnameEndingWith … where x.firstname like ?1(parameter bound with prepended %)
Containing like '%xxx%' findByFirstnameContaining … where x.firstname like ?1(parameter bound wrapped in %)
OrderBy order by findByAgeOrderByLastnameDesc … where x.age = ?1 order by x.lastname desc
Not <> findByLastnameNot … where x.lastname <> ?1
In in() findByAgeIn(Collection<Age> ages) … where x.age in ?1
NotIn not in() findByAgeNotIn(Collection<Age> ages) … where x.age not in ?1
TRUE =true findByActiveTrue() … where x.active = true
FALSE =false findByActiveFalse() … where x.active = false
IgnoreCase upper(xxx)=upper(yyyy) findByFirstnameIgnoreCase … where UPPER(x.firstame) = UPPER(?1)

 

Spring Data JPA官方文件

https://docs.spring.io/spring-data/jpa/docs/2.0.9.RELEASE/reference/html/