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
相关文章
|
2月前
|
NoSQL Java MongoDB
Springboot WebFlux项目结合mongodb进行crud
这篇文章介绍了如何使用Spring Boot WebFlux框架结合MongoDB进行基本的CRUD(创建、读取、更新、删除)操作,包括项目设置、实体类和Repository的创建、控制器的实现以及配置文件的编写。
56 0
Springboot WebFlux项目结合mongodb进行crud
|
4月前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些高级用法
本文探讨了在Spring Boot项目中使用MongoDB的多种方式及其高级用法。MongoDB作为一种NoSQL数据库,在某些场景下相较于SQL数据库有着独特的优势。文中详细介绍了在Spring Boot中使用MongoDB的三种主要方式:直接使用官方SDK、使用Spring JPA以及使用MongoTemplate,并对比分析了它们之间的差异。此外,文章深入讲解了Spring Data MongoDB提供的各种注解(如@Id, @Document, @Field等)以简化操作流程,并探讨了MongoTemplate监听器的应用,如设置主键值、记录日志等。
214 2
|
2月前
|
SQL NoSQL Java
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
本文介绍了如何在Spring Boot中操作NoSQL数据库MongoDB,包括在MongoDB官网创建服务器、配置Spring Boot项目、创建实体类、仓库类、服务类和控制器类,以及如何进行测试。
24 1
springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作
|
3月前
|
SQL JSON Java
springboot 如何编写增删改查后端接口,小白极速入门,附完整代码
本文为Spring Boot增删改查接口的小白入门教程,介绍了项目的构建、配置YML文件、代码编写(包括实体类、Mapper接口、Mapper.xml、Service和Controller)以及使用Postman进行接口测试的方法。同时提供了SQL代码和完整代码的下载链接。
springboot 如何编写增删改查后端接口,小白极速入门,附完整代码
|
2月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
4月前
|
人工智能 NoSQL Go
Go MongoDB Driver 实例
Go MongoDB Driver 实例
26 1
|
4月前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些骚操作用法
MongoDB作为一种NoSQL数据库,在不需要传统SQL数据库的表格结构的情况下,提供了灵活的数据存储方案。在Spring Boot中可以通过官方SDK、Spring JPA或MongoTemplate等方式集成MongoDB。文章重点介绍了Spring Data MongoDB提供的注解功能,例如`@Id`、`@Document`和`@Field`等,这些注解简化了Java对象到MongoDB文档的映射。此外,文中还讨论了MongoTemplate监听器的使用,包括设置主键值和日志记录等高级特性。
259 0
SpringBoot中MongoDB的那些骚操作用法
|
5月前
|
SQL NoSQL API
MongoDB 增删改查 常用sql总结
MongoDB 增删改查 常用sql总结
212 1
|
4月前
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之创建 PorkInst 实例如何解决
SpringBoot单元测试快速写法问题之创建 PorkInst 实例如何解决
|
4月前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
394 0