springboot data rest 4
来源:互联网 发布:mvc php路由文件加载 编辑:程序博客网 时间:2024/06/05 23:03
一、自定义查询方法
通常会有这样的需求,根据给定的字段查找相应表中的数据对象。比如在前几篇博客中定义的User实体来,需要一个按照name值查到与之对应的数据对象返回,只需要在UserRopository中定义如下代码:
- 1
- 2
- 3
- 4
- 5
一行非常简单的代码的代码,满足了我们的需求。我们并没有做任何实现,只是声明了一个findByName的方法而已,方法签名已经告诉Spring Data Jpa足够的信息来创建这个方法的实现了。
请求URL:http://127.0.0.1:8080/user/search/name?name=小白鱼
返回数据:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
JPA自动生成的查询sql
- 1
当创建Repository实现的时候,Spring Data会检查Repository接口的所有方法,解析方法的名称,并基于被持久化的对象来试图推测方法的目的。本质上,Spring Data定义了一组小型的领域特定语言(domain-specific language ,DSL),在这里,持久化的细节都是通过Repository方法的签名来描述的。Spring Data能够知道这个方法是要查找User的,因为我们使用User对JpaRepository进行了参数化。方法名findByName确定该方法需要根据name属性相匹配来查找User,而name是作为参数传递到方法中来的。findByName()方法非常简单,但是Spring Data也能处理更加有意思的方法名称。Repository方法是由一个动词、一个可选的主题(Subject)、关键词By以及一个断言所组成。在findByName()这个样例中,动词是find,断言是name,主题并没有指定,暗含的主题是User。Spring Data允许在方法名中使用四种动词:get、read、find和count。其中,动词get、read和find是同义的,这三个动词对应的Repository方法都会查询数据并返回对象。而动词count则会返回匹配对象的数量,而不是对象本身。在断言中,会有一个或多个限制结果的条件。每个条件必须引用一个属性,并且还可以指定一种比较操作。如果省略比较操作符的话,那么这暗指是一种相等比较操作。不过,我们也可以选择其他的比较操作,包括如下的种类:
IsAfter、After、IsGreaterThan、GreaterThan
IsGreaterThanEqual、GreaterThanEqual
IsBefore、Before、IsLessThan、LessThan
IsLessThanEqual、LessThanEqual
IsBetween、Between
IsNull、Null
IsNotNull、NotNull
IsIn、In
IsNotIn、NotIn
IsStartingWith、StartingWith、StartsWith
IsEndingWith、EndingWith、EndsWith
IsContaining、Containing、Contains
IsLike、Like
IsNotLike、NotLike
IsTrue、True
IsFalse、False
Is、Equals
IsNot、Not
要对比的属性值就是方法的参数。
模糊查询
- 1
- 2
需求查询以name为white开始的用户,则
查询URL为:http://127.0.0.1:8080/user/search/nameStartsWith?name=white
返回数据略。
忽略大小写查询
要处理String类型的属性时,如果需要忽略大小写则可以在方法签名中加入IgnoringCase,这样在
执行对比的时候就会不再考虑字符是大写还是小写。例如,要在name属性上忽略大小写,那么可以将方法签名改成如下的形式:
- 1
- 2
多条件查询
如果需要匹配多个添加则用And和Or连接,比如:
- 1
- 2
排序
可以在方法名称的结尾处添加OrderBy,实现结果集排序。比如可以按照User的Age降序排列
- 1
- 2
这里只是初步体验了所能声明的方法种类,Spring Data JPA会为我们实现这些方法。现在,我们只需知道通过使用属性名和关键字构建Repository方法签名,就能让Spring Data JPA生成方法实现,完成几乎所有能够想象到的查询。不过,Spring Data这个小型的DSL依旧有其局限性,有时候通过方法名称表达预期的查询很烦琐,甚至无法实现。如果遇到这种情形的话,Spring Data能够让我们通过@Query注解来解决问题。
- springboot data rest 4
- springboot data rest 2
- SpringBoot之Spring Data REST
- 26-SpringBoot——核心-Spring Data REST
- SpringBoot Rest-api开发
- 8.3 Spring Data REST
- Spring Data REST
- springboot(2) rest项目起飞
- 使用SpringBoot开发REST服务
- SpringBoot REST 火推04
- SpringBoot Data JPA
- SpringBoot Data JPA 实战
- springboot-data-jpa使用
- Spring-data-rest 和Spring-data-jpa
- Drupal Rest post data format
- spring boot data rest 3
- springboot之SpringJUnit4ClassRunner测试Rest接口
- Springboot 框架实现rest接口风格
- Tomcat的性能与最大并发数
- R语言(转载)之par()函数
- Linux驱动手动绑定和解绑定
- HashMap多线程下发生死循环的原因
- A1106. Lowest Price in Supply Chain (25)
- springboot data rest 4
- 加密ASP为DLL的详细步骤给点RMB不多是个心意尊重脑力劳动者的付出
- c++实现日志系统(含源码)
- Spring 数据访问那些事儿(二)Spring + JdbcTemplate
- java动态代理和cglib动态代理
- 分冶-二分查找
- ubuntu 改时区
- Java7:int i=0b010101;
- android: 侧滑菜单的实现(ViewDragHelper)