首页 > 编程知识 正文

mongotemplate返回指定字段,mongotemplate.find

时间:2023-05-05 17:11:41 阅读:198326 作者:601

关于MongoTemplate的使用 1 MongoTemplate使用1 添加maven依赖2 添加连接配置信息3 实体类4 MongoTemplate的操作5 业务处理类6 总结

因未接触MongoDB数据库,而项目中使用MongoDB做数据库, 且选择Spring整合的MongoTemplate,在使用过程遇到一些问题,故记录一下相关的使用

参考资料:

https://docs.spring.io/spring-data/mongodb/docs/2.1.5.RELEASE/api/

https://www.jianshu.com/p/a576499769ae

https://blog.csdn.net/biubiu2it/article/details/87898334

1 MongoTemplate使用 1 添加maven依赖 <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.0.4</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.1.6.RELEASE</version> </dependency> 2 添加连接配置信息 data: mongodb: # uri: mongodb://<username>:<password>@127.0.0.1:27017/test uri: mongodb://@127.0.0.1:27017/test 3 实体类 @Data@Document("student")public class Student { private String id; private String username; private String password; private Date birthday; private Date crtTime;} 4 MongoTemplate的操作

常用方法:

// 1 新增 mongoTemplate.insert(Student.class); mongoTemplate.save(Student.class); mongoTemplate.insertAll(new ArrayList<Student>()); // 2 修改 mongoTemplate.update(Student.class); mongoTemplate.updateFirst(new Query(), new Update(), Student.class); // 3 删除 mongoTemplate.remove(Student.class); mongoTemplate.remove(new Query(), Student.class); mongoTemplate.findAndRemove(new Query(), Student.class); // 4 查询 mongoTemplate.find(new Query(), Student.class); mongoTemplate.findById("id", Student.class); mongoTemplate.findAll(Student.class); // 5 统计 mongoTemplate.count(new Query(),Student.class);

说明:

1 Query对象是一个查询对象,用来封装给所有的条件对象;再创建一个criteria对象,用来封装所有的查询条件(类似通用mapper中的功能)

2 精确查询 criteria.and(“属性名”).is(“值”);
模糊条件 criteria.and(“属性名”).regex(“值”)

3 封装条件 query.addCriteria(criteria)

4 创建Criteria对象方法

1 直接new对象 Criteria criteria = new Criteria();2 通过Criteria.where()静态方法创建 Criteria.where(“属性名”).is(“值”)

5 query对象可以添加多个criteria对象 ,且一个query中只能**有一个andOperator()或OrOperator()**操作.

Query.addCriteria(new Criteria().andOperator(条件一,条件二));

6 排序

// 排序规则 // 1 多个排序规则相同时, 可依次添加字段; 不同排序规则,需要在后续添加 query.with(new Sort(Sort.Direction.ASC, "id").and(new Sort(Sort.Direction.ASC, "name"))); // 2 静态方法,定义多个排序器,每个排序只能添加一个字段 query.with(Sort.by( Sort.Order.asc("id"), Sort.Order.desc("name") )); 5 业务处理类 @Service@Slf4jpublic class ConsumerService {public void demo() { // 1 查询全部 List<Student> students = mongoTemplate.findAll(Student.class); System.out.println(students); // 2 根据id查询 Student student = mongoTemplate.findById("12", Student.class); System.out.println(student); // 3 准确查询 Query query = new Query(Criteria .where("username").is(student.getUsername()) .and("password").gt(student.getPassword()); List<Student> students1 = mongoTemplate.find(query, Student.class); System.out.println(students1); // 4 模糊查询 Query query1 = new Query(Criteria.where("username").regex("李白")); List<Student> students2 = mongoTemplate.find(query1, Student.class); System.out.println(students2); // 5 分页查询 int totalCount = (int) mongoTemplate.count(query, Student.class); int pageNum = 4; int pageSize = 10; List<Student> studentList = mongoTemplate.find(query.skip((pageNum - 1) * pageSize).limit(pageSize), Student.class); System.out.println(studentList); // 6 修改 Student student1 = new Student(); Query query2 = new Query(Criteria.where("_id").is(student1.getId())); Update update = new Update(); update.set("username", student1.getUsername()); mongoTemplate.upsert(query2, update, Student.class); // 7 删除 String id = "1111"; Query query3 = new Query(Criteria.where("_id").is(id)); mongoTemplate.remove(query3, Student.class); // 8 新增 Student student2 = new Student(); mongoTemplate.insert(student2); // 9 复杂查询 // 查询用户名为李白的或如果用户名不存在,创建日期为现在的数据 // 排序规则是: 用户名升序排 创建时间降序排 Query query4 = new Query(); query4.addCriteria(new Criteria().orOperator(Criteria.where("username").is("李白"), Criteria.where("username").is(null).and("ctrTime").is(new Date()) ) ); query4.with(Sort.by( Sort.Order.asc("username"), Sort.Order.desc("ctrTime") )); List<Student> students3 = mongoTemplate.find(query4, Student.class); System.out.println(students3); }} 6 总结

在使用过程中, MongoTemplate的基础功能很容易上手, 但是涉及到多条件查询,涉及复杂的业务就很容易错误,需要细心检查,此外对于排序的使用也需要注意,很容易写错,导致多个排序条件被覆盖没有生效.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。