SpringBoot整合MongoDB使用MongoTemplate进行增删改查实例

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: SpringBoot整合MongoDB使用MongoTemplate进行增删改查实例

一、前言

前面我们完成了SpringBoot在项目上对MongoDB的整合,包括

  • 引入依赖
  • 本地docker环境
  • 处理用户权限

下面将要完成一些增删改查的完整实例,方便以后直接调用。

二、MongoTemplate

增删改查是基于用MongoTemplate的调用,如下方式进行引入

import org.springframework.data.mongodb.core.MongoTemplate;

其中,Criteria的作用是组合查询条件,源码位置如下。

org/springframework/data/mongodb/core/query/Criteria.java

我们截取几个方法,看下他是如何对条件进行拼接的。

/**
   * Creates a criterion using the {@literal $lt} operator.
   *
   * @param value must not be {@literal null}.
   * @return this.
   * @see <a href="https://docs.mongodb.com/manual/reference/operator/query/lt/">MongoDB Query operator: $lt</a>
   */
  public Criteria lt(Object value) {
    criteria.put("$lt", value);
    return this;
  }
  /**
   * Creates a criterion using the {@literal $lte} operator.
   *
   * @param value must not be {@literal null}.
   * @return this.
   * @see <a href="https://docs.mongodb.com/manual/reference/operator/query/lte/">MongoDB Query operator: $lte</a>
   */
  public Criteria lte(Object value) {
    criteria.put("$lte", value);
    return this;
  }
/**
   * Creates a criterion using the {@literal $size} operator.
   *
   * @param size
   * @return this.
   * @see <a href="https://docs.mongodb.com/manual/reference/operator/query/size/">MongoDB Query operator: $size</a>
   */
  public Criteria size(int size) {
    criteria.put("$size", size);
    return this;
  }
  /**
   * Creates a criterion using the {@literal $exists} operator.
   *
   * @param value
   * @return this.
   * @see <a href="https://docs.mongodb.com/manual/reference/operator/query/exists/">MongoDB Query operator: $exists</a>
   */
  public Criteria exists(boolean value) {
    criteria.put("$exists", value);
    return this;
  }
  /**
   * Creates a criterion using the {@literal $type} operator.
   *
   * @param typeNumber
   * @return this.
   * @see <a href="https://docs.mongodb.com/manual/reference/operator/query/type/">MongoDB Query operator: $type</a>
   */
  public Criteria type(int typeNumber) {
    criteria.put("$type", typeNumber);
    return this;
  }

我们可以看到,Criteria对MongoDB中的操作进行了封装,并提供了重构方法,保证各种形式的传参。

下面的实例中,只要是涉及到查询,就是使用Criteria对条件进行拼接,然后通过new Query(criteria)作为参数传进去。

三、增删改查

1.新增

Cat cat = new Cat();
        cat.setName("糖果");
        cat.setAge(3);
        cat.setLikeCount(100);
        mongoTemplate.insert(cat);

2.删除

String id = "620a27c3db5ca321f4cc5754";
        Criteria criteria = (new Criteria(entityClass.getDeclaredField("id").getName())).is(id);
        //根据条件删除
        Cat cat = mongoTemplate.findAndRemove(new Query(criteria), entityClass);
        System.out.println(cat);
        //直接删除
        Cat cat2 = mongoTemplate.findById("620a27c3db5ca321f4cc5754", entityClass);
        assert cat2 != null;
        DeleteResult result = mongoTemplate.remove(cat2);
        System.out.println(result);
        //findAllAndRemove 和 findAndRemove 的区别在于,前者删除全部匹配的数据,后者只删除一个

3. 查找

//查询全部
        List<Cat> cats = mongoTemplate.findAll(entityClass);
        System.out.println(cats);
        //根据条件查询
        Criteria criteria = (new Criteria(entityClass.getDeclaredField("likeCount").getName())).is(cats.get(0).getLikeCount());
        List<Cat> cats2 = mongoTemplate.find(new Query(criteria), entityClass);
        System.out.println(cats2);
        //根据ID查询
        Cat cat = mongoTemplate.findById(cats.get(1).getId(), entityClass);
        System.out.println(cat);
        //查询单条记录
        Criteria criteria2 = (new Criteria(entityClass.getDeclaredField("name").getName())).is(cats.get(0).getName());
        Cat cat2 = mongoTemplate.findOne(new Query(criteria2), entityClass);
        System.out.println(cat2);

4. 更新

String id = "620b1b46d6e42202392f5653";
        Criteria criteria = (new Criteria(entityClass.getDeclaredField("id").getName())).is(id);
        Update update = new Update();
        update.set(entityClass.getDeclaredField("name").getName(), "炸酱233");
        update.inc("likeCount");
        //单条更新
        UpdateResult updateResult = mongoTemplate.updateFirst(new Query(criteria), update, entityClass);
        System.out.println(updateResult);
        Criteria criteria2 = (new Criteria(entityClass.getDeclaredField("age").getName())).is(3);
        Update update2 = new Update();
        update2.set(entityClass.getDeclaredField("name").getName(), "炸酱");
        update2.inc("age");
        //批量更新
        UpdateResult updateResult2 = mongoTemplate.updateMulti(new Query(criteria2), update2, entityClass);
        System.out.println(updateResult2);

5. 其他

//获取集合名称
        String collectionName =  mongoTemplate.getCollectionName(entityClass);
        System.out.println(collectionName);
        //判断集合是不是存在 false
        boolean check = mongoTemplate.collectionExists("dog");
        System.out.println(check);
        //判断集合是不是存在 true
        boolean checkCat = mongoTemplate.collectionExists("cat");
        System.out.println(checkCat);
        //创建集合
        mongoTemplate.createCollection("bug2");
        //删除集合
        mongoTemplate.dropCollection("bug2");

四、总结

熟练掌握MongoDB的增删改查,需要在熟悉原生查询语法的基础上,对Criteria的方法比较熟悉,其他的都可以通过查源码的方式理解。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
7天前
|
人工智能 NoSQL Go
Go MongoDB Driver 实例
Go MongoDB Driver 实例
9 1
|
17天前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些骚操作用法
MongoDB作为一种NoSQL数据库,在不需要传统SQL数据库的表格结构的情况下,提供了灵活的数据存储方案。在Spring Boot中可以通过官方SDK、Spring JPA或MongoTemplate等方式集成MongoDB。文章重点介绍了Spring Data MongoDB提供的注解功能,例如`@Id`、`@Document`和`@Field`等,这些注解简化了Java对象到MongoDB文档的映射。此外,文中还讨论了MongoTemplate监听器的使用,包括设置主键值和日志记录等高级特性。
80 0
SpringBoot中MongoDB的那些骚操作用法
|
24天前
|
消息中间件 Java Kafka
Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息
Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息
34 5
|
23天前
|
SQL NoSQL API
MongoDB 增删改查 常用sql总结
MongoDB 增删改查 常用sql总结
19 1
|
6天前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
22 0
|
9天前
|
Java Spring
Spring Boot Admin 离线实例
Spring Boot Admin 离线实例
8 0
|
9天前
|
NoSQL Java MongoDB
MongoDB 读写分离——SpringBoot读写分离
MongoDB 读写分离——SpringBoot读写分离
18 0
|
1月前
|
NoSQL Java MongoDB
Spring Boot与MongoDB的集成应用
Spring Boot与MongoDB的集成应用
|
1月前
|
存储 NoSQL Java
使用Spring Boot和MongoDB构建NoSQL应用
使用Spring Boot和MongoDB构建NoSQL应用
|
1月前
|
NoSQL Java MongoDB
如何在Spring Boot应用中集成MongoDB数据库
如何在Spring Boot应用中集成MongoDB数据库