Query creation
Generally the query creation mechanism for JPA works as described in Query methods. Here’s a short example of what a JPA query method translates into:
Example 43. Query creation from method names
public interface UserRepository extends Repository<User, Long> { List<User> findByEmailAddressAndLastname(String emailAddress, String lastname); }
We will create a query using the JPA criteria API from this but essentially this translates into the following query:select u from User u where u.emailAddress = ?1 and u.lastname = ?2
. Spring Data JPA will do a property check and traverse nested properties as described in Property expressions. Here’s an overview of the keywords supported for JPA and what a method containing that keyword essentially translates to.
Table 4. Supported keywords inside method namesKeyword | Sample | JPQL snippet |
---|
And
| findByLastnameAndFirstname
| … where x.lastname = ?1 and x.firstname = ?2
|
Or
| findByLastnameOrFirstname
| … where x.lastname = ?1 or x.firstname = ?2
|
Is,Equals
| findByFirstname ,findByFirstnameIs ,findByFirstnameEquals
| … where x.firstname = ?1
|
Between
| 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
| findByAgeIsNull
| … where x.age is null
|
IsNotNull,NotNull
| findByAge(Is)NotNull
| … where x.age not null
|
Like
| findByFirstnameLike
| … where x.firstname like ?1
|
NotLike
| findByFirstnameNotLike
| … where x.firstname not like ?1
|
StartingWith
| findByFirstnameStartingWith
| … where x.firstname like ?1 (parameter bound with appended % )
|
EndingWith
| findByFirstnameEndingWith
| … where x.firstname like ?1 (parameter bound with prepended % )
|
Containing
| findByFirstnameContaining
| … where x.firstname like ?1 (parameter bound wrapped in% )
|
OrderBy
| findByAgeOrderByLastnameDesc
| … where x.age = ?1 order by x.lastname desc
|
Not
| findByLastnameNot
| … where x.lastname <> ?1
|
In
| findByAgeIn(Collection<Age> ages)
| … where x.age in ?1
|
NotIn
| findByAgeNotIn(Collection<Age> age)
| … where x.age not in ?1
|
True
| findByActiveTrue()
| … where x.active = true
|
False
| findByActiveFalse()
| … where x.active = false
|
IgnoreCase
| findByFirstnameIgnoreCase
| … where UPPER(x.firstame) = UPPER(?1)
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗