MongoRepository使用 @Query 注解来定义查询语句
时间: 2024-01-06 10:06:13 浏览: 86
如果使用 MongoRepository 的自带方法无法满足查询需求,可以使用 `@Query` 注解来自定义查询语句。
`@Query` 注解可以将查询语句直接定义在 Repository 接口的方法上,例如:
```java
public interface UserRepository extends MongoRepository<User, String> {
@Query("{ 'name' : ?0, 'age' : { $gte: ?1 } }")
Page<User> findByNameAndAge(String name, int age, Pageable pageable);
}
```
在 `@Query` 注解中,可以使用 MongoDB 的查询语句来进行查询,其中 `?0`、`?1` 等表示方法参数的位置,可以根据实际情况进行替换。
使用时,和之前的方法一样,将查询条件和分页参数传入该方法中即可:
```java
String name = "张三";
int age = 18;
Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by("age").descending());
Page<User> users = userRepository.findByNameAndAge(name, age, pageable);
```
这样就可以根据自定义的查询语句进行分页查询了。
需要注意的是,`@Query` 注解中的查询语句必须是符合 MongoDB 查询语法的,否则会查询出错。同时,在查询语句中也可以使用 MongoDB 的聚合操作符等高级功能,例如:
```java
@Query("{ 'age' : { $gte: ?0 } } , { $sort : { 'name' : 1 } }, { $limit : ?1 }")
List<User> findTopUsers(int age, int limit);
```
以上就是使用 `@Query` 注解来定义查询语句的方法。需要根据实际情况选择使用哪种方法来实现 MongoDB 数据库的操作。
阅读全文