Spring Boot -- Spring Data Jpa(2)

来源:互联网 发布:和服羽织淘宝 编辑:程序博客网 时间:2024/06/06 00:43

方法名中支持的关键字

Keyword Sample JPQL snippet And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2 Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2 Is,Equals findByStartDateBetween … where x.startDate between ?1 and ?2 Between findByStartDateBetween … where x.startDate between ?1 and ?2 LessThan findByAgeLessThan … where x.age < ?1 LessThanEqual findByAgeLessThanEqual … where x.age <= ?1 GreaterThan findByAgeGreaterThan … where x.age > ?1 After findByStartDateAfter … where x.startDate > ?1 Before findByStartDateBefore … where x.startDate < ?1 IsNull findByAgeIsNull … where x.age is null IsNotNull,NotNull findByAge(Is)NotNull … where x.age not null Like findByFirstnameLike … where x.firstname like ?1 NotLike findByFirstnameNotLike … where x.firstname not like ?1 StartingWith findByFirstnameStartingWith … where x.firstname like ?1 (parameter bound with appended %) EndingWith findByFirstnameEndingWith … where x.firstname like ?1 (parameter bound with prepended %) Containing findByFirstnameContaining … where x.firstname like ?1 (parameter bound wrapped in %) OrderBy findByAgeOrderByLastnameDesc … where x.age = ?1 order by x.lastname desc Not findByLastnameNot … where x.lastname <> ?1 In findByAgeIn(Collection ages) … where x.age in ?1 NotIn findByAgeNotIn(Collection age) … where x.age not in ?1 True findByActiveTrue() … where x.active = true False findByActiveFalse() … where x.active = false IgnoreCase findByFirstnameIgnoreCase … where UPPER(x.firstame) = UPPER(?1)

属性表达式

  1. 在进行方法名解析时,会先将方法名多余的前缀移除,比如find,findBy,read,readBy,get,getBy,然后对剩下的部分进行解析.
  2. findByAddressZipCode(),框架在解析方法时,先剔除findBy,然后对AddressZipCode进行解析.
    1). Jpa会先判断在判断实体类中是否存在addressZipCode属性.如果存在,则进行where x.addressZipCode = ?1查询.
    2). 若不存在,则从右边开始将字符串按”驼峰”命名的规则将其分为两部分,然后企图查找对应的属性.即一开始分为addressZip和code,然后查找实体类中是否存在addressZip对象属性,且addressZip类中是否存在code属性.若存在,则进行where x.addressZip.zone = ?1查询.
    3). 若addressZip与code不存在,则继续拆分为address与zipCode,查找实体类中是否存在address对象属性以及address对象中是否存在zipCode.若存在,进行where x.address.zipCode查询.
    4). 若address存在,zipCode不存在,则继续拆分,address中是否存在zip,zip中是否存在code,以where x.address.zip.code = ?1查询.
    5). 若都不存在,则在编译时将报错.
    6). 可以使用findByAddress_ZipCode进行定义解析方式.即x.address.zipCode
    7). 如果实体类的属性过于复杂,不建议使用方法名衍生查询的方法.

Result Query

去重复

List<Employee> findDistinctByFirstname(String name);

可以使用findDistinctBy对查询结果去重复.将生成查询语句

select distinct ... from Entity x where x.firstname=?1

限制个数

User findFirstByOrderByLastnameAsc()User findTopByOrderByAgeDesc();List<User> findFirst10ByLastname(String lastname);List<User> findTop10ByLastname(String lastname);

可以使用First或Top来限制返回的结果数,如果First与Top后面没跟数字,则默认为1

分页

Page<Employee> findAll(Page page);

在参数中加入Pageable对象,即可对返回值自动进行分页,返回值将更改为Page<>

排序

List<Employee> findAll(Sort sort);Page<Employee> findAll(Page page,Sort sort);

在参数中加入Sort对象,即可对返回值进行排序

Count Query

Long countByAgeBetween(int age1,int age2);

以countBy开头的方法名,可以解析为计算个数语句.随后的属性表达式同findBy

Delete Query

Long deleteByFirstName(String firstName);

以deleteBy开头或removeBy的方法名,可以解析为删除语句.随后的属性表达式同findBy

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝店铺重复铺货扣6分怎么办 帆布鞋子买大了怎么办 开淘宝店没销量怎么办 开淘宝店没有销量怎么办 淘宝买东西支付密码错了怎么办 淘宝登入密码忘记了怎么办 逛街时手机没电了怎么办 逛街手机没有电了怎么办 卖家拒收退回来怎么办 群英会奖池钱不够买超了怎么办 三星s8卡顿严重怎么办 三星s8变卡了怎么办 新开店铺没有人怎么办 电视显示没有usb设备怎么办 华为平板电脑触摸屏没反应怎么办 平板电脑液晶显示屏坏了怎么办 6p的home键失灵怎么办 读书郎屏幕坏了怎么办 苹果平板激活锁忘了怎么办 平板电脑充电插口坏了怎么办? 电视频幕花了怎么办 苹果笔记本电脑硬盘坏了怎么办 mac屏幕压坏了怎么办 新电脑连不上网怎么办 新买电脑后悔了怎么办 装显卡后玩游戏黑屏怎么办 顺丰寄主机坏了怎么办 征信账户忘记了怎么办 疑似qq和疑似应用宝怎么办 荣大3608速印机卸版故障怎么办 配的近视眼镜看不清电脑屏幕怎么办 cad命令反应很慢怎么办 淘宝美工面试让作图怎么办 笔记本玩cf闪退怎么办 台式电脑玩lol卡怎么办 配置充足玩lol卡怎么办 电脑买贵了应该怎么办 微信红包收不了钱怎么办 mac版excel卡死怎么办 锐捷网卡为空怎么办 淘宝上买东西卖家不发货怎么办