Criteria 类用于创建查询的中心类,它遵循流畅的 API 风格,因此您可以轻松地将多个条件链接在一起。
Criteria.where 方法的静态导入提高了可读性。
使用 Criteria 类定义查询时的查询条件相当于 SQL 的 where。
where(String key) 静态方法,用它可以很方便的定义查询条件,例如:
mongoTemplate.find(Query.query(
Criteria.where("parameter3").lt(new Date())
.and("parameter2").regex("es"))
)and(String key) 与操作
gt(Object o) 大于
gte(Object o) 大于等于
in(Object... o) 包含
is(Object o) 等于
lt(Object o) 小于
lte(Object o) 小于等于
not() 非
regex(String re) 正则表达式
andOperator(Criteria... criteria) 创建与操作
orOperator(Criteria... criteria) 创建或操作
size(int size) 创建 $size 操作
演示 Criteria 类的基本用法,代码如下:
package com.hxstrive.springdata.mongodb.query;
import com.hxstrive.springdata.mongodb.entity.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import java.util.List;
import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;
@SpringBootTest
public class QueryDocumentDemo {
@Autowired
private MongoTemplate mongoTemplate;
@Test
public void contextLoads() {
// 删除集合,清空数据
mongoTemplate.dropCollection(Person.class);
// 准备数据
mongoTemplate.insert(Person.builder().id("1").name("Tom").age(22).build());
mongoTemplate.insert(Person.builder().id("2").name("Helen").age(29).build());
mongoTemplate.insert(Person.builder().id("3").name("Bill").age(37).build());
mongoTemplate.insert(Person.builder().id("4").name("Joe").age(48).build());
// 查询数据
// 年龄小于30岁,且名称中包含 “l” 字符
List<Person> result = mongoTemplate.query(Person.class)
.matching(query(where("age").lt(30).and("name").regex("l")))
.all();
for(Person person : result) {
System.out.println(person);
}
}
}运行示例,输出如下:
Person(id=2, name=Helen, age=29, version=0)
注意:上面静态导入了 Criteria.where 和 Query.query 两个便捷方法。
在后续章节中将逐一介绍 Criteria 的各个方法用法。