Spring boot学习之spring-data-jpa的使用(二)
上篇我们简单介绍了一些简单的基本查询,虽然hibernate机制中有@ManyToOne,@ManyToMany...等关联性的配置,而在实际的开发中这些简单的基本查询是远远不够的,而此篇我们便来介绍一下其相关的一些复杂查询。
1.简单的自定义查询
所谓简单的自定义查询就是根据方法名自动生成SQL,当然方法名是有命令规则的,主要语法是findXXBy,readAXXBy,queryXXBy,countXXBy, getXXBy后面跟属性名称,以及可以使用一些And、Or等关键字,还可以加上OrderBy进行排序,详见如下表格:
关键字 | 方法命名 | sql where字句 |
And | findByNameAndPwd | where name= ? and pwd =? |
Or | findByNameOrSex | where name= ? or sex=? |
Is,Equals | findById,findByIdEquals | where id= ? |
Between | findByIdBetween | where id between ? and ? |
LessThan | findByIdLessThan | where id < ? |
LessThanEqual | findByIdLessThanEquals | where id <= ? |
GreaterThan | findByIdGreaterThan | where id > ? |
GreaterThanEqual | findByIdGreaterThanEquals | where id > = ? |
After | findByIdAfter | where id > ? |
Before | findByIdBefore | where id < ? |
IsNull | findByNameIsNull | where name is null |
isNotNull,NotNull | findByNameNotNull | where name is not null |
Like | findByNameLike | where name like ? |
NotLike | findByNameNotLike | where name not like ? |
StartingWith | findByNameStartingWith | where name like '?%' |
EndingWith | findByNameEndingWith | where name like '%?' |
Containing | findByNameContaining | where name like '%?%' |
OrderBy | findByIdOrderByXDesc | where id=? order by x desc |
Not | findByNameNot | where name <> ? |
In | findByIdIn(Collection<?> c) | where id in (?) |
NotIn | findByIdNotIn(Collection<?> c) | where id not in (?) |
True | findByAaaTue | where aaa = true |
False | findByAaaFalse | where aaa = false |
IgnoreCase | findByNameIgnoreCase | where UPPER(name)=UPPER(?) |
使用情况的代码如下:
2. 带有分页的自定义查询 在实际的开发中是免不了遇到有分页的情况的,而Spring data jpa已经帮我们实现了分页的功能,我们只需要在方法中传入Pageable参数即可,如要实现自定排序在方法中还可传入Sort参数,具体使用情况见如下代码,UserRepository类中的代码如下: controller中调用代码如下(多余的代码可不用理会,后续会陆续讲到):
3. 自定义sql查询其实Spring data 觉大部分的SQL都可以根据方法名定义的方式来实现,但是由于某些原因我们想使用自定义的SQL来查询,spring data也是完美支持的;在SQL的查询方法上面使用@Query注解,如涉及到删除和修改在需要加上@Modifying.也可以根据需要添加 @Transactional 对事物的支持,查询超时的设置等代码详见如下:
自此spring data jpa的一些常用情况介绍完毕了,其还有一些高级应用,若有兴趣可去官网查看。