Spring Data JPA 简单查询--方法定义规则(详解)
一、常用规则速查
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 简单查询--方法定义规则(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: 详细解读MySQL中的权限
下一篇: Android系统模拟位置的使用方法
推荐阅读
-
Spring Data JPA 简单查询--方法定义规则(详解)
-
spring data jpa 创建方法名进行简单查询方式
-
spring data jpa 创建方法名进行简单查询方式
-
Spring Data JPA实现动态查询的两种方法
-
Spring Data JPA 简单查询--方法定义规则(详解)
-
Spring Boot中使用Spring-data-jpa的配置方法详解
-
Spring Data Jpa 简单分页查询(1) 博客分类: Hibernate || JPA
-
详解Spring Data Jpa 模糊查询的正确用法
-
Spring Boot中使用Spring-data-jpa的配置方法详解
-
Spring Data MongoDB中实现自定义级联的方法详解