# Spring Data JPA sort 多属性排序
在
spring data for jpa
中,存在一个pageable
接口,是对查询分页的一个利器。
pageable
实现类的构造方法中有个Sort
参数,可以按照列属性进行排序。通过查看Sort
类的构造方法,我们对Sort
这个类进行一下分析,Sort
类中存在以下几个构造方法:
- public Sort(Order… orders);
- public Sort(List orders);
- public Sort(String… properties);
- public Sort(Direction direction, String… properties);
- public Sort(Direction direction, List properties);
Direction
是用来标识按照列属性升序还是降序排序的。properties
为列属性。
方法 3 只是输入列属性,按照默认的排序方式(ASC)
方法 4、5 只能够实用一种排序方向,我们要排列的多个属性都是升序或都是降序
方法 1 和 2,性质相同,可以实现多个列属性的不同方向排序,例如需要实现一个形如下面的 sql:
select * from table where a='a' and b='b' order by c desc,d asc,e desc;
1
这个
Order
一定要是import org.springframework.data.domain.Sort.Order;
这个包下面的。 建立三个order
分别为如下:
List< Order> orders=new ArrayList< Order>();
Order order2 = new Order(Direction.DESC, "age");
Order order3 = new Order(Direction.ASC, "pgrade");
Order order = new Order(Direction.DESC, "dnum");
1
2
3
4
2
3
4
先把这三个
order
放到list
里面然后把list
放到sort
里面。
添加到
list
中的先后
直接关联着排序的优先级
,如下:
list.add(order2);
list.add(order3);
list.add(order);
Sort sort1 = new Sort(list);
1
2
3
4
2
3
4
生成需要的
pageable
Pageable pageable= new PageRequest(pageNumber, pageSize, new Sort(orders));
1
springboot 2.x 使用:
Pageable pageable= PageRequest.of(pageNumber, pageSize, new Sort(orders));
1
复杂查询
JpaSpecificationExecutor
,可用:
query.orderBy(criteriaBuilder.desc(root.get("age").as(Integer.class)), criteriaBuilder.desc(root.get("id").as(Integer.class)));
1
使用此排序规则,如果
pageable
有sort
则会以 pageable 为准
如不分页,可直接使用 Sort;