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 findByNameAndSex(String name,String sex);

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

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

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

  2、排序

  List findBySexOrderByName(String sex); //名称正序(正序时,推荐此方式,简单)

  List findBySexOrderByNameAsc(String sex); //名称正序(效果同上)

  List findBySexOrderByNameDesc(String sex); //名称倒序

(0)

相关推荐

  • Spring Data JPA调用存储过程实例代码实例

    JPA连接到数据库,调用存储过程,这样的需求很常见.本文就针对这一点,讲述如何使用spring Data JPA调用存储过程的方法. 1.存储过程 假设存储过程如下: CREATE OR REPLAC ...

  • Win8.1系统如何看是否永久激活 Win8.1永久激活状态查询方法

    首次安装Win8/Win8.1/Win8.1 update的朋友都知道,Win8.1安装是需要秘钥激活码的,这个激活码分为试用激活码、永久激活码等。试用激活码是免费的,只能使用几个月,而永久激活码需要 ...

  • 支付宝十年账单如何查看?支付宝十年账单查询方法图解

    支付宝十年账单如何查看?对于大部分的网购朋友们来说,支付宝相信是很多人在网购过程中所必备的,但是大家是否一直以来都很清楚自己的账单情况呢?最近网上有一个关于支付宝十年账单怎么查的话题讨论,可以帮助大家 ...

  • 微信交易记录怎么查询操作步骤介绍 微信支付交易记录查询方法

    第一步、打开微信后进入“我的银行卡”,再点击右上角“…”。 第二步、之后会弹出一系列选项,点击“交易记录”,那么微信支付的交易记录都出现了。 微信支付交易记录查询方法就是这么简单。

  • 几种京东快递查询方法

    很多初次购物的朋友都不知道京东快递如何查询?直接在我的订单下就有物流跟踪信息。另外很简单的打开页面底部京东快递官方网站,找到订单查询标签页,然后输入订单号即可。不了解的朋友可以参考下。 首先,打开页面 ...

  • U盘使用记录的简单清除方法

    U盘使用记录的简单清除方法 使用U盘后如何清除注册表的U盘使用记录呢?下面教你几招: 1.按开始--〉运行,在输入框里输入命令:regedit 2.删除注册表中以下目录的USBSTOR子项. (1)H ...

  • 带合并单元格的Excel数据查询方法

    带合并单元格的Excel数据查询方法.在下面这个图中,A列是带合并单元格的部门,B列是该部门的员工名单. 现在需要根据E2单元格中的姓名,来查询对应的部门. 看看本文给出的参考公式吧: =LOOKUP ...

  • 微信朋友圈评论记录怎么看?微信朋友圈消息记录三种查询方法

    以往QQ空间的评论记录相信很多朋友都会查看,微信中的评论很少有朋友去看,但是万一有朋友想看一下以往的评论记录呢,微信中朋友圈的历史评论该如何查看呢?下面就介绍一下在微信中如何查看朋友圈评论历史记录 微 ...

  • 微信怎么证券开户?微信绑定证券帐户方便查询方法介绍

    微信又推出了一项新功能,即可以绑定证券帐户方便查询,并自动推送中签通知缴款不错过.那需要怎样绑定证券帐户呢?小编为大家详细介绍一下,不会的朋友快快来看看吧! 方法/步骤 点击手机桌面上的微信图标,点击 ...