Spring Data JPA的方法命名規則
阿新 • • 發佈:2019-01-10
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/