查询方法的创建

内部基础架构中有个根据方法名的查询生成器机制,对于在存储库的实体上构建约束查询很有用,该机制方法的前缀 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 从入门到精通~查询方法的创建相关推荐

  1. Spring Data JPA 从入门到精通~查询结果的处理

    参数选择(Sort/Pageable)分页和排序 特定类型的参数,Pageable 并动态 Sort 地将分页和排序应用于查询 案例:在查询方法中使用 Pageable.Slice 和 Sort. P ...

  2. 【Spring Data JPA自学笔记三】Spring Data JPA的基础和高级查询方法

    文章目录 调用接口的基础方法查询 Repository CrudRepository PagingAndSortingRepository JPARepository JpaSpecification ...

  3. Spring Data JPA 从入门到精通~自定义实现Repository

    EntityManager 的获取方式 我们既然要自定义,首先讲一下 EntityManager 的两种获取方式. 1. 通过 @PersistenceContext 注解. 通过将 @Persist ...

  4. Spring Data JPA 从入门到精通~@Param用法

    默认情况下,参数是通过顺序绑定在查询语句上的,这使得查询方法对参数位置的重构容易出错.为了解决这个问题,可以使用 @ Param 注解指定方法参数的具体名称,通过绑定的参数名字做查询条件,这样不需要关 ...

  5. Spring Data JPA 从入门到精通~@Version处理乐观锁的问题

    @Version 处理乐观锁的问题 @Version 乐观锁介绍 我们在研究 Auditing 的时候,发现了一个有趣的注解 @Version,源码如下: package org.springfram ...

  6. spring data jpa从入门到精通_Spring Data JPA的简单入门

    前言 spring data JPA是spring团队打造的sping生态全家桶的一部分,本身内核使用的是hibernate核心源码,用来作为了解java持久层框架基本构成的样本是再好不过的选择.最近 ...

  7. Spring Data JPA 从入门到精通~Naming命名策略详解及其实践

    Naming 命名策略详解及其实践 用 JPA 离不开 @Entity 实体,我都知道实体里面有字段映射,而字段映射的方法有两种: 显式命名:在映射配置时,设置的数据库表名.列名等,就是进行显式命名, ...

  8. Spring Data JPA 从入门到精通~Auditing及其事件详解

    Auditing 及其事件详解 Auditing 翻译过来是审计和审核,Spring 的优秀之处在于帮我们想到了很多繁琐事情的解决方案,我们在实际的业务系统中,针对一张表的操作大部分是需要记录谁什么时 ...

  9. Spring Data JPA 从入门到精通~实际工作的应用场景

    在实际工作中,有哪些场景会用到自定义 Repository 呢,这里列出几种实际在工作中的应用案例. 1. 逻辑删除场景 可以用到上面说的两种实现方式,如果有框架级别的全局自定义 Respositor ...

最新文章

  1. Microbiome:空间尺度对华北平原麦田土壤细菌群落的影响(南土所褚海燕组)
  2. Python创建daemon
  3. 你的项目应该如何正确分层?
  4. 每天九点十分开始每半小时一次执行一个cron_趣讲 PowerJob 超强大的调度层,开始表演真正的技术了...
  5. 【ios】NSMutableArray initWithContentOfFile 得到nil后无法进行addObject的问题
  6. CSS3 实用技巧:制作三角形
  7. word 转 html cms,Java 将Word文件转换为HTML格式文件
  8. cisco2950 查看端口流量
  9. python下载-python下载及安装
  10. unity渲染管线及升级URP
  11. css文字上浮div,css文字样式与div
  12. vue 项目中高德地图 API 使用流程
  13. 开源项目—swift开发记事本APP
  14. layui上传图片需携带额外参数
  15. 这就是区块链开源底层软件平台——长安链ChainMaker
  16. apu运行linux,AMD发布带全新APU的新LINUX版本驱动
  17. 面向AI 的数据生态系统
  18. 使用lib库模式打包vue组件及组件引用
  19. 【牛投客】:牛投客经过三年的投资
  20. 将26个字母输入mysql_做mysql字母

热门文章

  1. python list保存至csv文件
  2. 国科大高级人工智能7-命题逻辑
  3. 空战决策知识构建方法研究
  4. 为什么百度查到的ip地址和ipconfig查到的不同;详解公网Ip和私网ip; 网络分类ABC类;
  5. python---str和repr
  6. [leetcode]从中序与后序/前序遍历序列构造二叉树
  7. 档案信息化管理的最好解决方案
  8. 洛谷 P1656 炸铁路
  9. AC日记——Mato的文件管理 bzoj 3289
  10. [笔记]cin、cout与scanf、printf的效率差异对比分析