Spring Data JPA使用Sort进行排序(Using Sort)(转)
通过上一节的学习,我们知道了如何用@Query注解来实现灵活的查询。在上一节的示例中,我也尝试给出简单的排序,通过JPQL语句以及原生SQL来实现的。这样的实现,虽然在一定程度上可以应用,但是灵活度不够,因此结合@Query注解,我们可以使用Sort来对结果进行排序。
1、在CustomerRepository内添加方法
/**
* 一个参数,匹配两个字段
* @param name2
* @param sort 指定排序的参数,可以根据需要进行调整
* @return
* 这里Param的值和=:后面的参数匹配,但不需要和方法名对应的参数值对应
*
*/
@Query("select c from Customer c where c.firstName=:name or c.lastName=:name")
List<Customer> findByName4(@Param("name") String name2,Sort sort);
方法一如既往,是声明式的,只是在原有方法的基础上,加上Sort(org.springframework.data.domain.Sort)作为参数即可。
2、在CustomerController中测试
/**
* @Query注解方式查询,
* 用@Param指定参数,匹配firstName和lastName
*/
@RequestMapping("/findByName")
public void findByName4(){
//按照ID倒序排列
System.out.println("直接创建sort对象,通过排序方法和属性名");
Sort sort = new Sort(Sort.Direction.DESC,"id");
List<Customer> result = repository.findByName4("Bauer",sort);
for (Customer customer:result){
System.out.println(customer.toString());
}
System.out.println("-------------------------------------------");
//按照ID倒序排列
System.out.println("通过Sort.Order对象创建sort对象");
Sort sortx = new Sort(new Sort.Order(Sort.Direction.DESC,"id"));
List<Customer> resultx = repository.findByName4("Bauer",sort);
for (Customer customer:result){
System.out.println(customer.toString());
}
System.out.println("-------------------------------------------"); System.out.println("通过排序方法和属性List创建sort对象");
List<String> sortProperties = new ArrayList<>();
sortProperties.add("id");
sortProperties.add("firstName");
Sort sort2 = new Sort(Sort.Direction.DESC,sortProperties);
List<Customer> result2 = repository.findByName4("Bauer",sort2);
for (Customer customer:result2){
System.out.println(customer.toString());
}
System.out.println("-------------------------------------------"); System.out.println("通过创建Sort.Order对象的集合创建sort对象");
List<Sort.Order> orders = new ArrayList<>();
orders.add(new Sort.Order(Sort.Direction.DESC,"id"));
orders.add(new Sort.Order(Sort.Direction.ASC,"firstName"));
List<Customer> result3 = repository.findByName4("Bauer",new Sort(orders));
for (Customer customer:result3){
System.out.println(customer.toString());
}
System.out.println("-------------------------------------------");
}
这里总共列举了四种排序方式:
1)直接创建Sort对象,适合对单一属性做排序
2)通过Sort.Order对象创建Sort对象,适合对单一属性做排序
3)通过属性的List集合创建Sort对象,适合对多个属性,采取同一种排序方式的排序
4)通过Sort.Order对象的List集合创建Sort对象,适合所有情况,比较容易设置排序方式
对应着我们的使用场景来进行选择创建Sort对象的方式。
注意,这里并没有列举所有的Sort使用方式,还有忽略大小写,使用JpaSort.unsafe、聚合函数等进行排序,查询的属性值是Entity的属性名,不是数据库的字段,要注意到!!
更多用法,请参考源码:http://www.icnws.com/wp-content/uploads/2017/06/Sort.java_.txt
参考:
官方文档,http://docs.spring.io/spring-data/jpa/docs/current/reference/html/
DEMO,https://github.com/icnws/spring-data-jpa-demo
Spring Data JPA使用Sort进行排序(Using Sort)(转)的更多相关文章
- 整合Spring Data JPA与Spring MVC: 分页和排序
之前我们学习了如何使用Jpa访问关系型数据库.比较完整Spring MVC和JPA教程请见Spring Data JPA实战入门,Spring MVC实战入门. 通过Jpa大大简化了我们对数据库的开发 ...
- 使用Spring Data JPA进行数据分页与排序
一.导读 如果一次性加载成千上万的列表数据,在网页上显示将十分的耗时,用户体验不好.所以处理较大数据查询结果展现的时候,分页查询是必不可少的.分页查询必然伴随着一定的排序规则,否则分页数据的状态很难控 ...
- 整合Spring Data JPA与Spring MVC: 分页和排序pageable
https://www.tianmaying.com/tutorial/spring-jpa-page-sort Spring Data Jpa对于分页以及排序的查询也有着完美的支持,接下来,我们来学 ...
- Spring Data JPA教程, 第六部分: Sorting(未翻译)
The fifth part of my Spring Data JPA tutorialdescribed how you can create advanced queries with Spri ...
- 【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询
Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解. 快速上手 项目中的pom.xml.application ...
- spring boot(五):spring data jpa的使用
在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...
- 转:使用 Spring Data JPA 简化 JPA 开发
从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...
- 深入浅出学Spring Data JPA
第一章:Spring Data JPA入门 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map ...
- 了解 Spring Data JPA
前言 自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春笋般出现,为开发者提供了丰富的选择.它一改之前 EJB 2.x 中实体 B ...
- Spring Data JPA
转自: http://www.cnblogs.com/WangJinYang/p/4257383.html Spring 框架对 JPA 的支持 Spring 框架对 JPA 提供的支持主要体现在如下 ...
随机推荐
- debug输出rect,size和point的宏
#define NSLogRect(rect) NSLog(@"%s x:%.4f, y:%.4f, w:%.4f, h:%.4f", #rect, rect.origin.x, ...
- 内有干货!2个人3个月怎样从零完毕一款社区App《林卡》
嘿,大家好.我是不灭的小灯灯,我赌5毛你没听说过我的名字... 好啦.这篇不是鸡汤,是经验吐槽.干货分享! 所以乱七八糟的就不多说了.直接切入正题. 先说下自己的情况背景,眼下尚未毕业.非计算机专业, ...
- 【Node.js】初体验之安装和HelloWorld
听说Node.js是个蛮吊的东东.中午休息时间有限,暂时看了下知道怎么安装和初步使用了. 1.安装: 到Node.js官网下载就可以了,才5M多点,双击后按步骤安装就可以了. 2."Hell ...
- ArcGIS放射状流向地图
今年百度推出了一个百度迁徙,在其他人看是好像是还挺专业的,其实不复杂.下面是百度的迁徙图示例:从图中可以看出从一个城市到另一个城市迁徙的直线路径,多个路径可以反映城市是否为热点城市,即人口流动比较大. ...
- 搭建一个SpringBoot项目
1.创建项目 New->Spring Starter Project 2.添加支持 增加对mybatis plus的支持,修改pom.xml,增加如下内容: <dependency> ...
- ubuntu Server 设置主机静态 ip地址
ubuntu Server 设置主机静态 ip地址 1:先输入 ifconfig 查看当前网络配置 2:然后关闭 eth0 网卡 sudo ifdown eth0 3:配置静态ip sudo vim ...
- 如何设置mysql登陆密码?
此情况用于mysql密码为空. 命令如下: Mysqladmin –uroot password root1234 Root是用户名,root1234是新设置的密码
- eclipse javaWeb项目如何引入jar包
eclipse javaWeb项目如何引入jar包 CreateTime--2018年4月19日08:54:24 Author:Marydon 1.判断当前jar包是否已经引入到项目当中的3种方式 ...
- java 在控制台上输入密码时,密码不显示在控制台上
用下面的方法可以实现在控制台上输入密码时,密码不显示在控制台上:Console cons=System.console(); System.out.print(" 密码:"); c ...
- Linux下umask的缺省默认权限
Linux有缺省默认文件.文件夹权限umask.默认 777 -xxx(文件夹) 666 - xxx(文件) 11.查看当前用户umask R(4)--W(2)--X(1) [root@mvpban ...