jap 使用@query实现多表复杂查询,并且分页
时间: 2023-06-12 18:08:22 浏览: 271
@query 是 JPA 中的一种自定义查询语言,可以用于执行多表复杂查询,并且支持分页查询。
以下是一个简单的示例:
```java
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT u FROM User u INNER JOIN u.roles r WHERE r.name=:roleName")
List<User> findUsersByRole(@Param("roleName") String roleName, Pageable pageable);
}
```
在上面的示例中,我们使用 @Query 注解来定义一个自定义查询语句,查询用户表和角色表中的数据,并且根据角色名来筛选数据。这个查询语句使用 INNER JOIN 关键字连接两个表,使用 WHERE 子句来过滤数据。
我们还可以使用 Pageable 参数来实现分页查询。Pageable 是 Spring Data 中的一个接口,用于定义分页查询的相关信息,如查询页码、查询数量、排序方式等。
例如,我们可以使用以下代码来实现分页查询:
```java
Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by("username"));
List<User> users = userRepository.findUsersByRole("admin", pageable);
```
在上面的代码中,我们创建了一个 Pageable 对象,指定了查询的页码、每页查询的数量和排序方式(按照用户名升序排序)。然后,我们调用 UserRepository 的 findUsersByRole 方法来执行查询,并且将 Pageable 对象作为参数传入。
最后,我们可以通过 users.getContent() 方法来获取当前页的数据列表,通过 users.getTotalPages() 方法来获取总页数,通过 users.getTotalElements() 方法来获取总记录数。
阅读全文