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/