1、经常使用规则速查
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 忽略大小写
2、Spring Data 解析方法名--规则说明
一、规则描述
按照Spring data 定义的规则,查询方法以find|read|get开头(好比 find、findBy、read、readBy、get、getBy),涉及条件查询时,条件的属性用条件关键字链接,要注意的是:条件属性首字母需大写。框架在进行方法名解析时,会先把方法名多余的前缀截取掉,而后对剩下部分进行解析。 若是方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询。java
二、举例说明
好比 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()"。(强烈建议:不管是否存在混淆,都要在不一样类层级之间加上"" ,增长代码可读性)sql
3、一些状况
一、当查询条件为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的记录才符合条件,并非说忽略这个条件。也就是说,这种查询方式,只适合于明确查询条件必须传的业务,对于动态查询(条件多少是动态的,例如通常的查询列表,由最终用户使用时决定输入那些查询条件),这种简单查询是不能知足要求的。框架
二、排序
List<Cus> findBySexOrderByName(String sex); //名称正序(正序时,推荐此方式,简单) List<Cus> findBySexOrderByNameAsc(String sex); //名称正序(效果同上) List<Cus> findBySexOrderByNameDesc(String sex); //名称倒序