通过上一节的学习,我们知道了如何用@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

转载于:https://www.cnblogs.com/sandea/p/7770621.html

Spring Data JPA使用Sort进行排序(Using Sort)(转)相关推荐

  1. 使用Spring Data JPA进行分页和排序

    通过代码示例学习使用Spring Data JPA进行分页和排序 . 了解如何使用Springs PagingAndSortingRepository接口获取分页和排序结果. 1概述 在处理大量数据时 ...

  2. Spring Data JPA 原理与实战第二天 掌握Repoitory和DQM

    02 Spring Data Common 之 Repoitory 如何全面掌握? 通过上一课时,我们知道了 Spring Data 对整个数据操作做了很好的封装,其中 Spring Data Com ...

  3. Spring Data JPA 查询方法的命名语法与参数

    3 Spring Data JPA 查询方法的命名语法与参数 在⼯作中,你是否经常为⽅法名的语义.命名规范⽽发愁?是否要为不同的查询条件写各种的 SQL 语句?是否为同⼀个实体的查询,写⼀个超级通⽤的 ...

  4. Spring Data JPA(官方文档翻译)

    关于本书 介绍 关于这本指南 第一章 前言 第二章 新增及注意点 第三章 项目依赖 第四章 使用Spring Data Repositories 4.1 核心概念 4.2 查询方法 4.3 定义rep ...

  5. Spring Boot(五):spring data jpa的使用

    Spring Boot(五):spring data jpa的使用 一.spring data jpa介绍 1,JPA是什么 JPA(Java Persistence API)是Sun官方提出的Jav ...

  6. Spring data jpa 条件查询-按时间段查询

    Spring data jpa 条件查询-按时间段查询 @Overridepublic Page<泛型> findRecordList(int couponDetailId, int pa ...

  7. SpringBoot学习笔记:Spring Data Jpa的使用

    更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...

  8. spring-boot (三) spring data jpa

    学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...

  9. Spring boot (5):Spring data jpa 的使用

    总结: jpa是什么,spring data jpa是什么? jpa是一套规范,不是一套产品.jpa是一套规范,不是一套产品. spring data jpa是spring基于ORM框架.JPA规范的 ...

  10. 学习Spring Data JPA

    简介 Spring Data 是spring的一个子项目,在官网上是这样解释的: Spring Data 是为数据访问提供一种熟悉且一致的基于Spring的编程模型,同时仍然保留底层数据存储的特​​殊 ...

最新文章

  1. 命令行里给个注释,AI就能自动生成代码
  2. 浅谈 Math.BigMul 方法
  3. python局部变量屏蔽全局变量_python – 将局部变量设置为函数而不是使用全局变量来优化函数...
  4. JAXB众所周知的秘密
  5. Deeplink(深度链接)唤起App,怎样实现无缝跳转
  6. 弹框alertView
  7. 在Vmware下linux与ARM开发板的NFS系统搭建【ZT】
  8. 四:Cocos2d-x设计思想
  9. 关于onclick中的event对象和element对象
  10. java替换的程序_Java文本文件批量替换小程序的方法
  11. Python网络爬虫数据抓取思路,静态与动态页面爬取思路,爬虫框架等
  12. 美团构建实时数仓的痛点是什么?如何解决?
  13. 因果推断-Uplift Model:Causal Tree
  14. 超分辨率 | 综述!使用深度学习来实现图像超分辨率
  15. c语言char s[] 语句,35、若有定义和语句: char s[10]=abcd;printf(%s\n,s); 则结果是(以下u代表空格)...
  16. Kibana--KQL查询语法的使用
  17. html怎么做一条轴,html实现时间轴_纯css实现响应式竖着/垂直时间抽布局效果
  18. 忙忙碌碌,究竟为了什么
  19. net::ERR_CONNECTION_TIMED_OUT 网络连接超时
  20. [C#]Http请求报头设置

热门文章

  1. php 如果判断是utf,php 判断网页是否是utf8编码的方法_PHP教程
  2. java的write无法写入,Java加载ImageIO.write的文件在.jar中不起作用
  3. php编写一个计算相对路径的函数,php求相对路径的函数
  4. 图像的频率谱和功率谱代表什么_功率谱估计:BT ,周期图,Bartlett ,AR ,MVDR,APES,MUSIC...
  5. java count rows_Java统计个人编写的Java文件个数及代码行数
  6. 硬盘测试软件di,磁盘检测(Folder Size Professional)
  7. gcc可以编译python程序吗_GCC编译C语言程序完整演示
  8. linux 文件读写锁,linux下的简单文件读写锁的操作
  9. python做逻辑回归r2_利用python实现逻辑回归
  10. mysql merge事务_mysql菜鸟手迹11--mysql存储引擎之Merge