springboot2与mongodb整合

Spring Boot 2.x基础教程:使用MongoDB 前段时间因为团队调整,大部分时间放在了团队上,这系列的更新又耽误了一下。但既然承诺持久更新,那就不会落下,今天开始继续更新这部分的内容! 过了年,重申一下这个系列的目标:目前主要任务就是把Spring Boot 1.x部分没有升级的内容做完升级。我会将因为版本升级而产生的变化做一些说明,这样不论低版本的读者还是高版本的读者都能找到自己想要的部分。这也是这次做2.x版本升级的重要原因,尽量避免或减少有读者用着高版本参考我这边低版本的实现而出现问题,然后开始问候我家人的情况。 在完成上述所有的更新之后,接下来很 阅读详情

MongoDB是一款高性能的分布式文件存储数据库,类似于JSON的存储格式,结构松散,易部署,易扩展,支持索引,简单易用,广泛用于各种类型的系统。MongoDB功能强大,SpringBoot也与之进行集成,下面我们就来看看到底如何使用。

项目搭建

先来一个demo看看应该如何进行整合使用,再来详细描述其中的细节。由于在工作中,接触较多的就是maven,所以还是采用maven的方式进行项目构建。至于采用Gradle等其它构建工具,大家可以自行尝试。

项目版本:SpringBoot (2.1.4)

首先,引入MongoDB相关依赖,如下所示:

pom.xml:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

application.properties:

spring.data.mongodb.uri=mongodb://localhost/test

ExceptionLog(Entity):

@Data
public class ExceptionLog {
    @Id
    private String openId;
    private Integer status;
    private String body;
}

ExceptionLogService(用于操作ExceptionLog):

@Service
public class ExceptionLogService {
    private final MongoTemplate mongoTemplate;

    @Autowired
    public ExceptionLogService(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    /**
     * 使用insert添加数据
     * @param exceptionLog 实体信息
     * @return 保存后的信息
     */
    public ExceptionLog add(ExceptionLog exceptionLog) {
        return this.mongoTemplate.insert(exceptionLog);
    }

    /**
     * 根据主键进行删除
     * @param openId 主键
     * @return 删除的数量
     */
    public long delete(String openId) {
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(openId));
        DeleteResult remove = this.mongoTemplate.remove(query, ExceptionLog.class);
        return remove.getDeletedCount();
    }

    /**
     * 使用update方式修改数据
     * @param exceptionLog 需要修改的信息
     */
    public void update(ExceptionLog exceptionLog) {
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(exceptionLog.getObjectId()));
        Update update = new Update();
        update.set("status", exceptionLog.getStatus());
        update.set("body", exceptionLog.getBody());
        this.mongoTemplate.updateFirst(query, update, ExceptionLog.class);
    }

    /**
     * 查询当前集合中所有的文档
     * @return list
     */
    public List<ExceptionLog> findAll() {
        return this.mongoTemplate.findAll(ExceptionLog.class);
    }
}

SpringbootMongodbApplicationTests(测试):

//添加数据
ExceptionLog exceptionLog = new ExceptionLog();
exceptionLog.setStatus(400);
exceptionLog.setBody("传递参数错误");
ExceptionLog add = this.exceptionLogService.add(exceptionLog);
System.out.println("------------------------------------------------------------");
System.out.println("添加数据结果:" + add);
//修改数据
ExceptionLog update = new ExceptionLog();
update.setObjectId(add.getObjectId());
update.setStatus(500);
update.setBody("服务不可用");
this.exceptionLogService.update(update);
//查询数据
List<ExceptionLog> all = this.exceptionLogService.findAll();
System.out.println("------------------------------------------------------------");
System.out.println("所有结果:" + all);
//删除数据
long delete = this.exceptionLogService.delete(add.getObjectId());
System.out.println("------------------------------------------------------------");
System.out.println("删除条数:" + delete);

执行结果:

------------------------------------------------------------
添加数据结果:ExceptionLog(objectId=5caf54c50c3233203065d66d, status=400, body=传递参数错误)
------------------------------------------------------------
所有结果:[ExceptionLog(objectId=5caf54c50c3233203065d66d, status=500, body=服务不可用)]
------------------------------------------------------------
删除条数:1

存储格式:

{
    "_id" : ObjectId("5cb0993b0c32334508390171"),
    "status" : 404,
    "body" : "URL不存在",
    "_class" : "com.fanqie.springboot2.mongo.entity.ExceptionLog"
}

现在,我们已经搭建了一个SpringBoot与MongoDB的Demo,大家可以发现整个流程还是比较简单的,没有太多复杂的东西。大家注意到没有,Criteria.where("_id").is(exceptionLog.getObjectId())中的_id是哪里来的,我们好像没有定义这个字段啊。继续往下看。

基础使用

在项目中,针对任何数据库的操作,无非就是增删改查,只要解决了这些基本操作,就能完成至少百分之九十的工作,所以重点讲解一下相关操作。在SpringBoot中操作MongoDB主要有两种方式:MongoTemplate和Repository。

MongoTemplate

MongoTemplate是Spring Data MongoDB提供用于操作MongoDB数据库的一个高级抽象,类似于JdbcTemplete,操作简单。SpringBoot基于自动配置,已经实现相关配置,我们可以直接使用。

添加数据

添加数据相对比较简单,MongoTemplete提供了三种方式:insert、insertAll、save。

  • insert:用于添加文档,即使文档已存在也会再次添加。

  • save: 用于保存文档,文档存在则覆盖文档并更新id。

  • insertAll:用于添加文档集合。

使用相对简单,操作如下:

//单条记录插入
//exceptionLog就是我们需要添加的对象,后面跟着的是MongoDB对应的collection名称
//第二个参数还可以传入ExceptionLog.class或者不传,这样就会默认使用类名的首字母小写作为collection名称
this.mongoTemplate.insert(exceptionLog, "exceptionLog")

//多条记录插入
public List<ExceptionLog> addAll(List<ExceptionLog> list) {
    return (List<ExceptionLog>) this.mongoTemplate.insertAll(list);
}

查找数据

数据查询,应该是我们平时最常接触的,针对MongoDB,MongoTemplete也提供了非常多的方式,例如:

  • findAll:查询某个collection的所有文档。

  • findOne:根据条件查询某个collection中的单个文档。

  • findById:通过id查询collection中的文档。

  • find:根据条件,将查询结果映射到List。

相关操作如下:

/**
 * 查询集合exceptionLog中所有的文档
 * @return list
 */
public List<ExceptionLog> findAll() {
    return this.mongoTemplate.findAll(ExceptionLog.class);
}

/**
 * 根据status升序获取List
 * @return list
 */
public List<ExceptionLog> find() {
    Query query = new Query();
    query.with(Sort.by(Sort.Order.asc("status")));
    return this.mongoTemplate.find(query, ExceptionLog.class);
}

/**
 * 查询状态小于404 的一个文档
 * @return ExceptionLog
 */
public ExceptionLog findOne() {
    Query query = new Query();
    query.addCriteria(Criteria.where("status").lt(404));
    return this.mongoTemplate.findOne(query, ExceptionLog.class);
}

MongoTemplete依赖Query和Criteria指定查询条件,支持lt,lte,is等方式查询。另外还可以通过Query.with()方法指定Sort和Pageable,满足用户的大部分的需求。假若Query不能满足你的业务,还可以使用Query的子类BasicQuery,采用json格式描述查询条件,例如:

BasicQuery query = new BasicQuery("{ status : { $lt : 404 }}");

修改数据

针对数据修改,MongoTemplete也提供了两种方式:update(updateFirst / updateMulti)、findAndModify。

  • updateFirst:修改查询结果中的第一条记录并返回UpdateResult。

  • updateMulti:修改查询到的所有结果并返回UpdateResult。

  • findAndModify:修改查询结果的第一条记录并返回旧数据。

操作如下:

/**
 * 根据主键,修改实体
 * @param exceptionLog 需要修改的信息
 */
public void findAndModify(ExceptionLog exceptionLog) {
    Query query = new Query();
    query.addCriteria(Criteria.where("_id").is(exceptionLog.getObjectId()));
    Update update = new Update();
    update.set("status", exceptionLog.getStatus());
    update.set("body", exceptionLog.getBody());
    this.mongoTemplate.findAndModify(query, update, ExceptionLog.class);
}
/**
 * 使用update方式修改数据
 * @param exceptionLog 需要修改的信息
 */
public void update(ExceptionLog exceptionLog) {
    Query query = new Query();
    query.addCriteria(Criteria.where("_id").is(exceptionLog.getObjectId()));
    Update update = new Update();
    update.set("status", exceptionLog.getStatus());
    update.set("body", exceptionLog.getBody());
    this.mongoTemplate.updateFirst(query, update, ExceptionLog.class);
}

和Query类似,Update被用于更新文档,支持多种API,大家可以自行尝试。

删除数据

针对数据删除,MongoTemplete也提供了两种方式:remove、findAndRemove。

  • remove:默认会将查询到的所有数据删除。

  • findAndRemove:只会将查询结果中的第一条记录删除

操作如下:

Query query = new Query();
query.addCriteria(Criteria.where("_id").is(openId));
DeleteResult remove = this.mongoTemplate.remove(query, ExceptionLog.class);
或者
this.mongoTemplate.findAndRemove(query,ExceptionLog.class);

大家发现,我们在很多地方都使用到了 _id这个字段,它是哪里来的呢?其实_id是MongoDB自带的一个字符串类型主键,用于文档唯一性,即使我们没有指定这个字段,它也是会自动生成并赋值的。如果我们想在程序中使用它,可以使用@Id注解去映射该字段为主键,这样就可以拿到该值并在程序中使用。

上述我们采用MongoTemplete实现增删改查,接下来,就来看看Repository如何使用。

MongoRepository

MongoRepository是Repository的子类,提供了CRUD相关API,使用方式和JpaRepository类似。MongoRepository<T, ID>在使用过程中需要指定collection实体以及主键类型,使用相对简单,就不做过多介绍,示例如下:

@Repository 
public interface ExceptionLogRepository extends MongoRepository<ExceptionLog, String> { 
}

springboot2与mongodb的基本内容就到此为止了,这里我就不给大家分析MongoDB自动配置的相关源码了,在之前的几篇文章中,已经简单的为大家介绍了源码如何查找,并且做过简单分析,大致的原理其实都是一样的,我就不重复描述了,大家可以在spring-boot-autoconfigure->spring.factories找到你想要的答案。

总结

springboot2-mongodb整合内容都比较基础,但是平常工作中用的最多的就是它们。相关内容是在学习和使用过程中的一点见解,若有不当的地方,望大家指正,谢谢。

源码见于:https://gitee.com/hpaw/SpringBoot2Demo/tree/master/springboot-mongodb

Spring Boot整合MongoDB 阅读详情

相关推荐

轻轻松松学习SpringBoot2:第二十五篇: Spring Boot和Mongodb整合(完整版)

今天主要讲的是Spring Boot和Mongodb整合我们先来回顾一下前面章节的相关内容前面我们讲了SpringBoot和mysql整合,并且讲了操作数据库的几种方式SpringBoot+JPA自动生成表数据库操作SpringBoot+JDBC操作篇SpringBoot+Mybatis自动生成代码   操作篇回到正题,mongodb的安装在这就不累述了,win版本的去官网下载,然后一直下一步即可...

美丽的泡沫 14万+

Spring Boot 2.0.0.M7 springBoot-mongodb使用

springBoot  2.0.0.M7 -mongodb使用更多干货spring-boot系列一 之restfull api与多环境配置springboot系列二之 日志SpringBoot系列三之 MVC 模版引擎SpringBoot 2.0.0.M7 系列四 异常处理springboot 2.0.0.M7之 注解 与 配置springboot 2.0.0.M7 配置mvcspringboot...

架构师的成长之路的博客 2309

SpringBoot2.x 整合MongoDB——MongoTemplate

MongoDB 按照惯例,肯定是要介绍一番的,不想看的朋友可以直接跳到下面的MongoTemplate使用。 MongoDB是一个文档数据库,是一个非关系型数据库(NoSql)。处理速度超级快,同样的数据库还有Redis,被称为性能利器的Redis同样是非关系数据库,但是redis不能运算,尽管有脚本可以辅助,但是终究在某些方面是不如MongoDB的。可以说MongoDB是一个最接近关系型数据库的...

客官你来啦,姑娘任你挑 3090

SpringBoot2.x教程——-NoSQL之SpringBoot整合MongoDB

一. MongoDB 1. MongoDB简介 MongoDB一词来自于英文单词“Humongous”,中文含义为“庞大”,是由C++语言编写的一个基于分布式文件存储的高性能,开源,无模式的文档型数据库,属于当前NoSql数据库中比较热门的一种,可以应用于各种规模的企业、各个行业以及各类应用程序中。 2. MongoDB数据结构 传统的关系数据库一般由数据库(database)、表(tab...

qianfeng_dashuju的博客 1349

Spring Boot 2.6+ 整合MongoDB-Plus实战:从配置到CRUD完整指南

本文详细介绍了如何在Spring Boot 2.6+中高效整合MongoDB-Plus工具包,从环境配置到CRUD操作的全栈实践指南。通过版本适配策略、实体类映射技巧、动态操作模式及高阶特性应用,帮助开发者快速掌握这一被誉为'MongoDB界的MyBatis-Plus'的强大工具,显著提升开发效率。

purple的博客 903

在Spring Boot 2中配置MongoDB数据库

在Spring Boot 2中,我们可以轻松地集成MongoDB,并使用它来存储和检索数据。现在,我们可以运行Spring Boot应用程序,并使用MongoDB来存储和检索数据了。在上面的代码中,我们使用了Spring Data MongoDB的注解来指定集合名称和ID字段。在上面的测试代码中,我们创建了一个用户对象并保存到MongoDB中,然后检索并打印用户的名称。在上面的代码中,我们指定了MongoDB服务器的主机和端口,以及要使用的数据库名称。在上面的代码中,我们创建了一个。来保存和检索用户数据。

PqCybersecurity的博客 216

springBoot2.3 使用MongoRepository整合mongoDb

springBoot2.3 使用MongoRepository整合mongoDb

qq_28227405的博客 1200

Zemax非序列模式实战:手把手教你设计光纤耦合圆光斑整形系统(附Thorlabs透镜选型)

本文提供了一份基于Zemax非序列模式的光纤耦合圆光斑整形系统实战设计指南。文章详细讲解了从圆柱体光源建模、Thorlabs商业透镜库选型调用,到系统搭建、光线追迹与优化的完整流程,旨在帮助工程师高效完成从仿真到落地的光束整形系统设计。

weixin_28335283的博客 633

springBoot2.3 使用mongoTemplate整合mongoDb

springBoot2.3 使用mongoTemplate整合mongoDb

qq_28227405的博客 1172

Mplus—随机截距交叉滞后模型(RI-CLPM)语法

随机截距交叉滞后模型RI-CLPM的Mplus语法。

m0_54401011的博客 2535

On the convergence of FedAvg on non-iid data

On the convergence of FedAvg on non-iid data

Lyn_S的博客 7082

SpringBoot2.7.4整合MongoDb

1.百度云: https://pan.baidu.com/s/1LJ-wNNY00xOhxFaq2mpRHQ 提取码: q1ew。"name": "小明",3.controller层。4.service层。

qq_35160479的博客 364

标准高斯过程回归(Gaussian Processes Regression, GPR)从零开始,公式推导

标准高斯过程回归从零开始公式推导

qq_43587949的博客 1万+

mongodb 数组添加_SpringBoot2.0 基础案例(15):整合MongoDB数据库,实现增删改查

一、NoSQL简介1、NoSQL 概念NoSQL( Not Only SQL ),意即"不仅仅是SQL"。对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。2、NoSQL的优点/缺点--优点: 高可扩展性 分布式计算 低成本 架构的灵活性,半结构化数据 没有复杂的关系 --缺点: ...

weixin_39714383的博客 171

11种图像清晰度评价函数附MATLAB代码

博主的第一篇博客! 本科毕业论文是“基于图像处理的自动对焦技术研究”,对焦过程中的一个重要阶段是图像清晰度评价,博主自己用MATLAB实现了4类清晰度评价函数:基于图像梯度的清晰度评价函数、频域评价函数、信息熵评价函数、统计学评价函数,总计11种。博主之前没有用过MATLAB,完全是本科论文需要,没办法对着别人的代...

kungfu_rabbit的博客 5万+

SAP License USMM SLAW2 SAP审计

引言 企业每年都会收到SAP License审计邮件,邮件内容大致就是根据贵公司与SAP签定的合同XXX条款规定,贵公司所安装的SAP系统需要进行测定。 关键字: SAP License、 SAP USMM、 SLAW2、 SAP 账号、SAP 账号审计、 SAP License 审计、 SAP 审计报告、SAP 账号优化 SAP License审计邮件 企业每年都会收到SAP License审计邮件,邮件内容大致就是根据贵公司与SAP签定的合同XXX条款规定,贵公司所安...

感悟人生 2981

springboot2整合mongodb

springboot2整合mongodb

tommer911 426

SQL进阶技巧:数据预处理如何对数据进行分桶【分箱】?

本文详细介绍了数据分析中常见的几种分桶方式:基于业务规则的分桶、等距分桶及等频分桶等,针对每种分桶方式给出了SQL实现

石榴姐yyds 4021

springboot2 整合mybatis+通用mapper+swagger+MySQL+Redis+activemq+MongoDB

springboot2 整合mybatis+通用mapper+swagger+MySQL+Redis+activemq+MongoDB 目录 springboot2 整合mybatis+通用mapper+swagger+MySQL+Redis+activemq+MongoDB 一、环境: 二、是时候表演新的技术了 三、整合Mybatis(通用mapper、分页助手)+MySQL ...

AIGUO666666的博客 546

ESP32学习笔记06-UART 的485 通讯模式

通信方式选择UART 控制器支持多种通信模式,使用函数 uart_set_mode() 可以选择模式。选择特定模式后,UART 驱动程序将处理已连接 UART 设备的相应行为。例如,主机开始向 Tx FIFO 缓冲区写入数据时,UART 驱动程序会自动置位 RTS 管脚(逻辑 1);最后一位数据传输完成后,驱动程序就会取消置位 RTS 管脚(逻辑 0)。要使用此模式,软件。

Car12 2476

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring Boot 整合——MongoDB整合2(MongoDB实体创建以及简单CRUD)

文章前面 关于版本 依赖 版本 springboot 2.0.8.RELEASE mongodb 4.0.14 本内容只是为了介绍mongodb最基础的使用以及配置,作为一个知名的数据库,其存在相当多的高级用法,展开来介绍内容会相当多,当然本人并非相关领域的大神,下面内容只不过整理了自己日常使用的一些积累。是对自己经验的积累,也希望能帮助后来的同学 关于项目 本内容也是我尝...

大风的博客 5021

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spring Boot 2.X 实战--Spring Boot 整合 MongoDB

源代码仓库:https://github.com/zhshuixian/learn-spring-boot-2 码云:https://gitee.com/ylooq/learn-spring-boot-2 《Spring Boot 2.X 实战》全文在线阅读 – 微信平台 码云 Git Pages https://ylooq.gitee.io/learn-spring-boot-2/#/ 在数据量日益暴涨的今天,用户的个人信息如浏览点击记录、商品购买记录等成倍增加,传统的 SQL 数据库已经无法很好的存.

Java 小先 1135

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

springboot2整合MongoDB,并说明遇到的错误

是在sprinngboot整合SSM上的二次开发 关于MongoDB的好处和用途这就不说了,可以自行百度 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-da...

胖墩的IT博客 2678

SpringBoot2.x系列教程51--NoSQL之SpringBoot整合MongoDB

SpringBoot2.x系列教程51--NoSQL之SpringBoot整合MongoDB 作者:一一哥 一. MongoDB 1. MongoDB简介 MongoDB一词来自于英文单词“Humongous”,中文含义为“庞大”,是由C++语言编写的一个基于分布式文件存储的高性能,开源,无模式的文档型数据库,属于当前NoSql数据库中比较热门的一种,可以应用于各种规模的企业、各个行业以及...

一一哥 572
上一篇: springboot2与cache-redis整合
下一篇: springboot2与swagger2整合
西红柿丶番茄
博客等级 码龄10年 21粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值