SpringDataJPA使⽤Sort进⾏排序(UsingSort)结合@Query注解,我们可以使⽤Sort来对结果进⾏排序。
1、在CustomerRepository内添加⽅法
1 2 3 4 5 6 7 8 9 10/**
* ⼀个参数,匹配两个字段
* @param name2
* @param sort 指定排序的参数,可以根据需要进⾏调整
诉讼时效司法解释* @return
* 这⾥Param的值和=:后⾯的参数匹配,但不需要和⽅法名对应的参数值对应
*
*/
@Query("lect 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中测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
30 31 32 33 34/**
* @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.String());
}
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.String());
献血一般多少毫升
}
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.String());
}
System.out.println("-------------------------------------------");
34
35 36 37 38 39 40 41 42 43 44 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.String());
}
System.out.println("-------------------------------------------");
}
这⾥总共列举了四种排序⽅式:弟子规教案
1)直接创建Sort对象,适合对单⼀属性做排序
2)通过Sort.Order对象创建Sort对象,适合对单⼀属性做排序
3)通过属性的List集合创建Sort对象,适合对多个属性,采取同⼀种排序⽅式的排序
自然环境描写的作用4)通过Sort.Order对象的List集合创建Sort对象,适合所有情况,⽐较容易设置排序⽅式
对应着我们的使⽤场景来进⾏选择创建Sort对象的⽅式。
注意,这⾥并没有列举所有的Sort使⽤⽅式,还有忽略⼤⼩写,使⽤JpaSort.unsafe、聚合函数等进⾏排序,查询的属性值是Entity的属性名,不是数据库的字段,要注意到!!
更多⽤法,请参考源码:
参考:
官⽅⽂档,
DEMO,
先说下Sort类常⽤的⼏个构造⽅法
1.
public orders) {
this(Arrays.asList(orders));
}
2.
public Sort(List<Order> orders) {
}
3.
public properties) {
白色污染的危害
this(DEFAULT_DIRECTION, properties);
}
4.
public Sort(Direction direction, properties) {
this(direction, properties == null ? new ArrayList<>() : Arrays.asList(properties));
}
5.
public Sort(Direction direction, List<String> properties) {
if (properties == null || properties.isEmpty()) {
throw new IllegalArgumentException("You have to provide at least one property to sort by!"); }
晶莹的泪珠
for (String property : properties) {
}
}
注:Direction是⽤来标识列属性升序还是降序排序的
properties即为列属性
在上⾯5个⽅法中,4,5⽅法只能实现⼀种排序⽅向。
3⽅法输⼊列名,按照默认的排序⽅式(ASC)
在介绍下Order的构造⽅法:
public Order (Direction direction,String properties); --------Order维护⼀个Direction和⼀个列属性
所以,采⽤的⽅法;
@RequestMapping("/sort")
public List<Person> sort(){
List<Sort.Order> orders=new ArrayList<>();
orders.add(new Sort.Order(Sort.Direction.DESC,"age")); ---age降序
orders.add(new Sort.Order(Sort.Direction.ASC,"name")); ---naem升序
return personRepository.findAll(Sort.by(orders));
梧桐树幼儿园}