Spring Data JPA 简单查询--方法定义规则(详解)

发布时间 - 2026-01-11 00:38:12    点击率:

一、常用规则速查

1   And    并且
2   Or      或
3   Is,Equals    等于
4   Between      两者之间
5   LessThan      小于
6   LessThanEqual     小于等于
7   GreaterThan     大于
8   GreaterThanEqual   大于等于
9   After    之后(时间) >
10  Before    之前(时间) <
11  IsNull        等于Null
12  IsNotNull,NotNull   不等于Null
13  Like    模糊查询。查询件中需要自己加 %
14  NotLike     不在模糊范围内。查询件中需要自己加 %
15  StartingWith  以某开头
16  EndingWith    以某结束
17  Containing   包含某
18  OrderBy  排序
19  Not    不等于
20  In     某范围内
21  NotIn    某范围外
22  True    真
23  False    假
24  IgnoreCase  忽略大小写

二、Spring Data 解析方法名--规则说明

1、规则描述

按照Spring data 定义的规则,查询方法以find|read|get开头(比如 find、findBy、read、readBy、get、getBy),涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写。框架在进行方法名解析时,会先把方法名多余的前缀截取掉,然后对剩下部分进行解析。

如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询。

2、举例说明

比如 findByUserAddressZip()。框架在解析该方法时,首先剔除 findBy,然后对剩下的属性进行解析,详细规则如下(此处假设该方法针对的域对象为 AccountInfo 类型):

先判断 userAddressZip (根据 POJO 规范,首字母变为小写,下同)是否为 AccountInfo 的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,继续第二步;

从右往左截取第一个大写字母开头的字符串(此处为 Zip),然后检查剩下的字符串是否为 AccountInfo 的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,则重复第二步,继续从右往左截取;最后假设 user 为 AccountInfo 的一个属性;

接着处理剩下部分( AddressZip ),先判断 user 所对应的类型是否有 addressZip 属性,如果有,则表示该方法最终是根据 "AccountInfo.user.addressZip" 的取值进行查询;否则继续按照步骤 2 的规则从右往左截取,最终表示根据 "AccountInfo.user.address.zip" 的值进行查询。

可能会存在一种特殊情况,比如 AccountInfo 包含一个 user 的属性,也有一个 userAddress 属性,此时会存在混淆。读者可以明确在属性之间加上 "_" 以显式表达意图,比如 "findByUser_AddressZip()" 或者 "findByUserAddress_Zip()"。(强烈建议:无论是否存在混淆,都要在不同类层级之间加上"_" ,增加代码可读性)

三、一些情况

1、当查询条件为null时。

举例说明如下:

实体定义:对于一个客户实体Cus,包含有name和sex,均是String类型。

查询方法定义:List<Cus> findByNameAndSex(String name,String sex);

使用时:dao.findByNameAndSex(null, "男");

后台生成sql片断:where (cus0_.name is null) and cus0_.sex=?

结论:当查询时传值是null时,数据库中只有该字段是null的记录才符合条件,并不是说忽略这个条件。也就是说,这种查询方式,只适合于明确查询条件必须传的业务,对于动态查询(条件多少是动态的,例如一般的查询列表,由最终用户使用时决定输入那些查询条件),这种简单查询是不能满足要求的。

2、排序

List<Cus> findBySexOrderByName(String sex); //名称正序(正序时,推荐此方式,简单)
List<Cus> findBySexOrderByNameAsc(String sex); //名称正序(效果同上)
List<Cus> findBySexOrderByNameDesc(String sex); //名称倒序

以上这篇Spring Data JPA 简单查询--方法定义规则(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# spring  # data  # jpa  # 规则  # Spring Data JPA查询方式及方法名查询规则介绍  # Spring Data Jpa的四种查询方式详解  # spring data jpa 创建方法名进行简单查询方式  # 往左  # 给大家  # 如果没有  # 不等于  # 第二步  # 的是  # 举例说明  # 首字母  # 也有  # 也会  # 第一个  # 要在  # 要注意  # 希望能  # 分页  # 是说  # 这篇  # 先把  # 适合于  # 数据库中 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在IIS服务器上快速部署高效网站?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何在万网主机上快速搭建网站?  黑客入侵网站服务器的常见手法有哪些?  如何快速搭建高效WAP手机网站吸引移动用户?  如何在Tomcat中配置并部署网站项目?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  微信小程序 wx.uploadFile无法上传解决办法  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  Java垃圾回收器的方法和原理总结  详解MySQL数据库的安装与密码配置  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何快速搭建高效简练网站?  如何在万网自助建站平台快速创建网站?  Laravel如何自定义错误页面(404, 500)?(代码示例)  java中使用zxing批量生成二维码立牌  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  如何利用DOS批处理实现定时关机操作详解  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Laravel Fortify是什么,和Jetstream有什么关系  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  长沙做网站要多少钱,长沙国安网络怎么样?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Laravel集合Collection怎么用_Laravel集合常用函数详解  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Python图片处理进阶教程_Pillow滤镜与图像增强  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何在腾讯云服务器上快速搭建个人网站?  如何用免费手机建站系统零基础打造专业网站?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  EditPlus中的正则表达式 实战(2)  打造顶配客厅影院,这份100寸电视推荐名单请查收  网站制作企业,网站的banner和导航栏是指什么?  如何安全更换建站之星模板并保留数据?  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  如何登录建站主机?访问步骤全解析  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  进行网站优化必须要坚持的四大原则  如何在阿里云购买域名并搭建网站?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何在Ubuntu系统下快速搭建WordPress个人网站?  佛山网站制作系统,佛山企业变更地址网上办理步骤?