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

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 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
相关文章
|
19天前
|
NoSQL Java MongoDB
springboot整合MongoDB(简单demo实现包含注意点及踩坑)
springboot整合MongoDB(简单demo实现包含注意点及踩坑)
13 0
|
2月前
|
NoSQL Java 测试技术
spring boot MongoDB实战(二)
spring boot MongoDB实战
54 1
|
1月前
|
SQL Java 数据库连接
用springboot mybatis写一个增删改查
用springboot mybatis写一个增删改查
17 0
|
2月前
|
存储 前端开发 JavaScript
完整的SpringBoot+Vue增删改查(学生管理)
完整的SpringBoot+Vue增删改查(学生管理)
100 0
|
2月前
|
NoSQL Java MongoDB
Spring Boot中MongoDB的使用和实战
Spring Boot中MongoDB的使用和实战
36 0
|
4天前
|
JavaScript 关系型数据库 MySQL
springboot+vue实现增删改查小demo
springboot+vue实现增删改查小demo
15 0
|
2月前
|
存储 前端开发 JavaScript
完整的SpringBoot+Vue增删改查(学生管理)
完整的SpringBoot+Vue增删改查(学生管理)
115 1
|
2月前
|
存储 监控 NoSQL
数据存储与分析:办公室电脑屏幕监控的MongoDB应用实例
在当今数字时代,数据的存储和分析变得愈发重要,尤其是在办公环境中,对电脑屏幕进行监控成为一种日益普遍的需求。本文将介绍如何利用MongoDB数据库实现办公室电脑屏幕监控,并通过代码实例展示其应用。
165 0
|
2月前
|
Java 数据库
Activity7整合springboot:流程部署,定义,实例(一)
Activity7整合springboot:流程部署,定义,实例(一)
|
2月前
|
SQL Java 数据库
Activity7整合springboot:流程部署,定义,实例(一)
Activity7整合springboot:流程部署,定义,实例(一)