1. 概述
在本教程中,我们将学习如何使用Spring Data对查询结果进行排序。
首先,我们将看一下我们想要查询和排序的数据表。然后我们将讨论如何使用Spring Data来实现这一点。
2. 测试数据
下面我们有一些示例数据。虽然我们在这里将它表示为一个表,但我们可以使用Spring Data支持的任何一种数据库来持久化它。
我们要回答的问题是,“谁占据了飞机的哪个座位?”,为了使这更加用户友好,我们将按座位号排序。
First Name | Last Name | Seat Number |
---|---|---|
Jill | Smith | 50 |
Eve | Jackson | 94 |
Fred | Bloggs | 22 |
Ricki | Bobbie | 36 |
Siya | Kolisi | 85 |
3. 实体
要创建一个Spring Data Repository,我们需要提供一个域类以及一个id类型。
在这里,我们将乘客Passenger建模为JPA实体,但我们可以将其建模为MongoDB文档或任何其他模型抽象:
@Entity
class Passenger {
@Id
@GeneratedValue
@Column(nullable = false)
private Long id;
@Basic(optional = false)
@Column(nullable = false)
private String firstName;
@Basic(optional = false)
@Column(nullable = false)
private String lastName;
@Basic(optional = false)
@Column(nullable = false)
private int seatNumber;
// constructor, getters ...
}
4. 使用Spring Data排序
我们可以有几种不同的方式来使用Spring Data进行排序。
4.1 使用OrderBy方法关键字排序
一种选择是使用Spring Data的派生方法,从而根据方法名和签名生成查询。
我们在这里需要做的就是在方法名称中包含关键字OrderBy,以及我们要排序的属性名称和顺序(Asc或Desc)。
我们可以使用此约定来创建一个查询,按座位号升序返回我们的乘客:
interface PassengerRepository extends JpaRepository<Passenger, Long> {
List<Passenger> findByOrderBySeatNumberAsc();
}
我们还可以将此关键字与所有标准的Spring Data方法名称结合使用。
让我们看一个按lastName查找乘客并按座位号排序的方法示例:
interface PassengerRepository extends JpaRepository<Passenger, Long> {
List<Passenger> findByLastNameOrderBySeatNumberAsc(String lastName);
}
4.2 使用Sort参数
我们的第二个选择是包含一个Sort参数,指定我们要排序的属性名称和顺序:
List<Passenger> passengers = repository.findAll(Sort.by(Sort.Direction.ASC, "seatNumber"));
在这种情况下,我们使用findAll()方法,并在调用它时传递Sort参数。
我们还可以将此参数添加到新的方法定义中:
List<Passenger> findByLastName(String lastName, Sort sort);
最后,如果我们使用分页,我们可以在Pageable对象中指定Sort:
Page<Passenger> page = repository.findAll(PageRequest.of(0, 1, Sort.by(Sort.Direction.ASC, "seatNumber")));
5. 总结
我们有两个简单的选项来使用Spring Data对数据进行排序:使用OrderBy关键字的派生方法,或使用Sort对象作为方法参数。
与往常一样,本教程的完整源代码可在GitHub上获得。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章