zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    11. Container With Most Water
    9. Palindrome Number
    375. 猜数字大小 II leetcode java
    leetcode 72 编辑距离 JAVA
    73. 矩阵置零 leetcode JAVA
    快速排序 JAVA实现
    63. 不同路径 II leetcode JAVA
    重写(override)与重载(overload)
    62 不同路径 leetcode JAVA
    leetcode 56 合并区间 JAVA
  • 原文地址:https://www.cnblogs.com/sandea/p/7770621.html
Copyright © 2011-2022 走看看