Spring Data JPA 从入门到精通~查询方法的创建
查询方法的创建
内部基础架构中有个根据方法名的查询生成器机制,对于在存储库的实体上构建约束查询很有用,该机制方法的前缀 find…By、read…By、query…By、count…By 和 get…By 从所述方法和开始分析它的其余部分(实体里面的字段)。
感兴趣的读者可以到类 org.springframework.data.repository.query.parser.PartTree 查看相关源码的逻辑和处理方法,关键源码如下:
引入子句可以包含其他表达式,例如在 Distinct 要创建的查询上设置不同的标志,然而,第一个 By 作为分隔符来指示实际标准的开始,在一个非常基本的水平,可以定义实体性条件,并与它们串联 And 和 Or。
一句话概况,带查询功能的方法名有查询策略(关键字)+ 查询字段 + 一些限制性条件组成。
看例子如下,可以直接 Controller 里面进行调用看看效果:
interface PersonRepository extends Repository<User, Long> {// and的查询关系List<User> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);// 包含distinct去重,or的sql语法List<User> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);List<User> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);// 根据lastname字段查询忽略大小写List<User> findByLastnameIgnoreCase(String lastname);// 根据lastname和firstname查询equal并且忽略大小写List<User> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname); // 对查询结果根据lastname排序List<User> findByLastnameOrderByFirstnameAsc(String lastname);List<User> findByLastnameOrderByFirstnameDesc(String lastname);
}
解析方法的实际结果取决于创建查询的持久性存储。但是,有一些一般的事情要注意:
- 表达式通常是可以连接运算符的属性遍历,可以使用组合属性表达式 And 和 or,还可以得到这样的运算关键字为支撑 Between、LessThan、GreaterThan、Like 为属性表达式,受支持的操作员可能因数据存储而异,需要注意一下。
- 该方法解析器支持设置一个 IgnoreCase 标志个别特性(例如,findByLastnameIgnoreCase(…))或对于支持忽略大小写(通常是一个类型的所有属性 String 情况下,如 findByLastnameAndFirstnameAllIgnoreCase(…)),是否支持忽略案例可能会因存储而异,需要了解特定于场景的查询方法。
- 还可以通过 OrderBy 在引用属性和提供排序方向(Asc 或 Desc)的查询方法中附加一个子句来应用静态排序,要创建支持动态排序的查询方法,来影响查询结果。
Spring Data JPA 从入门到精通~查询方法的创建相关推荐
- Spring Data JPA 从入门到精通~查询结果的处理
参数选择(Sort/Pageable)分页和排序 特定类型的参数,Pageable 并动态 Sort 地将分页和排序应用于查询 案例:在查询方法中使用 Pageable.Slice 和 Sort. P ...
- 【Spring Data JPA自学笔记三】Spring Data JPA的基础和高级查询方法
文章目录 调用接口的基础方法查询 Repository CrudRepository PagingAndSortingRepository JPARepository JpaSpecification ...
- Spring Data JPA 从入门到精通~自定义实现Repository
EntityManager 的获取方式 我们既然要自定义,首先讲一下 EntityManager 的两种获取方式. 1. 通过 @PersistenceContext 注解. 通过将 @Persist ...
- Spring Data JPA 从入门到精通~@Param用法
默认情况下,参数是通过顺序绑定在查询语句上的,这使得查询方法对参数位置的重构容易出错.为了解决这个问题,可以使用 @ Param 注解指定方法参数的具体名称,通过绑定的参数名字做查询条件,这样不需要关 ...
- Spring Data JPA 从入门到精通~@Version处理乐观锁的问题
@Version 处理乐观锁的问题 @Version 乐观锁介绍 我们在研究 Auditing 的时候,发现了一个有趣的注解 @Version,源码如下: package org.springfram ...
- spring data jpa从入门到精通_Spring Data JPA的简单入门
前言 spring data JPA是spring团队打造的sping生态全家桶的一部分,本身内核使用的是hibernate核心源码,用来作为了解java持久层框架基本构成的样本是再好不过的选择.最近 ...
- Spring Data JPA 从入门到精通~Naming命名策略详解及其实践
Naming 命名策略详解及其实践 用 JPA 离不开 @Entity 实体,我都知道实体里面有字段映射,而字段映射的方法有两种: 显式命名:在映射配置时,设置的数据库表名.列名等,就是进行显式命名, ...
- Spring Data JPA 从入门到精通~Auditing及其事件详解
Auditing 及其事件详解 Auditing 翻译过来是审计和审核,Spring 的优秀之处在于帮我们想到了很多繁琐事情的解决方案,我们在实际的业务系统中,针对一张表的操作大部分是需要记录谁什么时 ...
- Spring Data JPA 从入门到精通~实际工作的应用场景
在实际工作中,有哪些场景会用到自定义 Repository 呢,这里列出几种实际在工作中的应用案例. 1. 逻辑删除场景 可以用到上面说的两种实现方式,如果有框架级别的全局自定义 Respositor ...
最新文章
- Microbiome:空间尺度对华北平原麦田土壤细菌群落的影响(南土所褚海燕组)
- Python创建daemon
- 你的项目应该如何正确分层?
- 每天九点十分开始每半小时一次执行一个cron_趣讲 PowerJob 超强大的调度层,开始表演真正的技术了...
- 【ios】NSMutableArray initWithContentOfFile 得到nil后无法进行addObject的问题
- CSS3 实用技巧:制作三角形
- word 转 html cms,Java 将Word文件转换为HTML格式文件
- cisco2950 查看端口流量
- python下载-python下载及安装
- unity渲染管线及升级URP
- css文字上浮div,css文字样式与div
- vue 项目中高德地图 API 使用流程
- 开源项目—swift开发记事本APP
- layui上传图片需携带额外参数
- 这就是区块链开源底层软件平台——长安链ChainMaker
- apu运行linux,AMD发布带全新APU的新LINUX版本驱动
- 面向AI 的数据生态系统
- 使用lib库模式打包vue组件及组件引用
- 【牛投客】:牛投客经过三年的投资
- 将26个字母输入mysql_做mysql字母