10、MongoDB -- MongoDB 的 MongoTemplate 的功能和用法介绍


MongoTemplate 的功能和用法


演示前提:


登录单机模式的 mongodb 服务器命令

mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf"

在这里插入图片描述


登录【test】数据库的 mongodb 客户端命令

mongo mongodb://192.168.0.107:27017/test -u LJHAAA -p 123456

在这里插入图片描述


登录【admin】数据库的 mongodb 客户端命令

mongo mongodb://192.168.0.107:27017/admin -u admin -p 123456

在这里插入图片描述



为 MongoDB 提供的两个 Starter

spring-boot-starter-data-mongodb:连接 MongoDB 传统 API 的 Starter。

spring-boot-starter-data-mongodb-reactive:连接 MongoDB 反应式 API 的 Starter。

这两个Starter分别依赖于不同的驱动。

MongoDb 为不同的 API ( 同步 和 反应式 )都提供了对应(不同)的驱动。


spring-boot-starter-data-mongodb(为以同步方式操作 MongoDB 提供的 Starter )

添加该Starter后,Spring Boot 将会在容器中自动配置 MongoDatabaseFactory 和 MongoTemplate。

如果在容器中配置自己的 com.mongodb.client.MongoClient,Spring Boot 就会用它配置 MongoDatabaseFactory

——MongoDatabaseFactory 需要依赖 MongoClient。


spring-boot-starter-data-mongodb-reactive(反应式 Starter )

添加该 Starter 后,Spring Boot 将会在容器中自动配置 ReactiveMongoDatabaseFactory 和 ReactiveMongoTemplate 。

如果在容器中配置自己的 com.mongodb.reactivestreams.client.MongoClient(与前面MongoClient不是同一个),
Spring Boot 就会用它配置 ReactiveMongoDatabaseFactory。


MongoClient ——负责去连接 MongoDB 数据库。

MongoDB 为同步和反应式两种编程模式,都提供了对应的驱动。

MongoClient 是属于 MongoDB 官方提供的驱动 API,它不是 Spring Boot、Spring Data MongoDB 所提供的。

MongoClient有两个版本,分别是同步版本和反应式版本,两个不同版本的 MongoClient 分别位于不同包下。
——它们位于不同的驱动包

【MongoClient 是连接 MongoDB 的核心API】,调用它的 getDatabase?(String name) 方法即可得到指定数据库对应的 MongoDatabase,

这个 API 就相当于 MongoDB 客户端中的 “db” 对象,

因此接下来即可通过 MongoDatabase 的方法来操作该数据库,例如操作 Collection。

若要对自动配置的 MongoDatabaseFactory 或 ReactiveMongoDatabaseFactory 进行定制,

只要配置自己的 MongoClient 即可,MongoClient 负责连接 MongoDB 的实际工作,

而 MongoDatabaseFactory 或 ReactiveMongoDatabaseFactory 只是一层包装。


MongoDB官网查看 MongoClient 驱动API 文档的详细步骤

MongoDB官网查看 MongoClient 驱动API 文档的详细步骤

查看这个API文档

在这里插入图片描述


MongoTemplate 的方法

常用方法:

MongoTemplate 或 ReactiveMongoTemplate(返回Mono或Flux)提供了如下常用方法:

- insert(T objectToSave):保存数据对象,对应于插入一个文档。

- remove(Object object):删除数据对象,对应于删除一个文档。

- remove(Query query, Class<?> entityClass):从指定集合(由数据类映射)中删除所有符合条件的文档。

- updateFirst(Query query, UpdateDefinition update, Class<?> entityClass):
         更新指定集合(由数据类映射)中符合条件的第一条记录。
         
- updateMulti(Query query, UpdateDefinition update, Class<?> entityClass):
         更新指定集合(由数据类映射)中符合条件的所有记录。
         
- find(Query query, Class<T> entityClass):从指定集合(由数据类映射)中查找所有符合条件的记录。

Spring官网中查看MongoDB的API文档的详细步骤

Class MongoTemplate

在这里插入图片描述

高级用法:

从用法角度来看,MongoTemplate 提供的方法,ReactiveMongoTemplate 同样也会提供,

区别只是 MongoTemplate 的方法返回同步的结果,如 List 等;
而 ReactiveMongoTemplate 的方法返回反应式的结果:如 Flux 或 Mono。


更高级的用法:MongoTemplate 或 ReactiveMongoTemplate 提供了系列 execute() 方法,
这些方法都需要传入一个 Lambda 形式(或匿名内部类形式)的 Callback 对象,

开发者在实现 Callback 接口中抽象方法时,可访问到 MongoDatabase(相当于命令行中的db)、
MongoCollection 等底层 API,从而直接使用 MongoDatabase、MongoCollection 等底层 API 来操作 MongoDB 。

MongoDatabase、MongoCollection 都属于 MongoDB 驱动所提供的原生API。

在这里插入图片描述

Class ReactiveMongoTemplate

在这里插入图片描述

代码演示

创建项目

勾选上同步和反应式的依赖

在这里插入图片描述

配置 MongoDB 连接

方式一:

Spring Boot 自动连接URL为 “mongodb://localhost/test” 的 MongoDB 服务器。
也可通过 spring.data.mongodb.uri 属性改变 MongoDB 服务器的 URL ,
例如通过如下属性指定 MongoDB 副本集的 URL :

   spring.data.mongodb.uri=mongodb://user:pass@host1:12345,host2:23456/boot

上面配置指定了两个副本:位于host1:12345 的副本和位于 host2:23456的副本。

一旦指定了 spring.data.mongodb.uri,那就无需指定 host, port, credentials,replica属性。

简单来说,uri 相当于是指定连接 MongoDB 的快捷方式。


查看 MongoProperties 这个属性配置类

在这里插入图片描述


方式二:用这个

也可通过如下方式配置 MongoDB 服务器的地址:

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=test
spring.data.mongodb.username=LJHAAA
spring.data.mongodb.password=123456

所有 spring.data.mongodb.* 开头的属性都由 MongoProperties 负责处理

在这里插入图片描述


  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.了解Spring 2.了解NoSQL和文档数据库 3.要求 4.其他帮助资源 4.1。支持 4.1.1。社区论坛 4.1.2。专业支持 4.2。发展之后 5.新&值得注意的 5.1。Spring Data MongoDB 2.1中的新特性 5.2。Spring Data MongoDB 2.0中的新特性 5.3。Spring Data MongoDB 1.10中的新特性 5.4。Spring Data MongoDB 1.9中的新特性 5.5。Spring Data MongoDB 1.8中的新特性 5.6。Spring Data MongoDB 1.7中有什么新功能 6.依赖 6.1。Spring Boot的依赖管理 6.2。Spring框架 7.使用Spring Data Repositories 7.1。核心概念 7.2。查询方法 7.3。定义存储库接口 7.3.1。微调储存库定义 7.3.2。空处理存储库方法 7.3.3。将存储库与多个Spring Data模块一起使用 7.4。定义查询方法 7.4.1。查询查询策略 7.4.2。查询创建 7.4.3。属性表达式 7.4.4。特殊参数处理 7.4.5。限制查询结果 7.4.6。流式查询结果 7.4.7。异步查询结果 7.5。创建存储库实例 7.5.1。XML配置 7.5.2。JavaConfig 7.5.3。独立使用 7.6。Spring Data存储库的自定义实现 7.6.1。定制个人存储库 7.6.2。自定义基础存储库 7.7。从聚合根发布事件 7.8。Spring数据扩展 7.8.1。Querydsl扩展 7.8.2。Web支持 7.8.3。存储库填充程序 7.8.4。传统网络支持 参考文档 8.介绍 8.1。文档结构 9. MongoDB支持 9.1。入门 9.2。示例存储库 9.3。用Spring连接到MongoDB 9.3.1。使用基于Java的元数据注册Mongo实例 9.3.2。使用基于XML的元数据注册Mongo实例 9.3.3。MongoDbFactory接口 9.3.4。使用基于Java的元数据注册MongoDbFactory实例 9.3.5。使用基于XML的元数据注册MongoDbFactory实例 9.4。MongoTemplate简介 9.4.1。实例化MongoTemplate 9.4.2。WriteResultChecking策略 9.4.3。WriteConcern 9.4.4。WriteConcernResolver 9.5。保存,更新和删除文档 9.5.1。如何_id在映射图层中处理该字段 9.5.2。类型映射 9.5.3。保存和插入文件的方法 9.5.4。更新集合中的文档 9.5.5。在集合中插入文档 9.5.6。在集合中查找和插入文档 9.5.7。删除文件的方法 9.5.8。乐观锁定 9.6。查询文件 9.6.1。查询集合中的文档 9.6.2。查询文件的方法 9.6.3。查询不同的值 9.6.4。地理空间查询 9.6.5。GeoJSON支持 9.6.6。全文查询 9.6.7。排序规则 9.6.8。JSON模式 9.6.9。流利的模板API 9.7。按实例查询 9.7.1。介绍 9.7.2。用法 9.7.3。示例匹配器 9.7.4。执行一个例子 9.7.5。无类型示例 9.8。减少地图操作 9.8.1。使用示例 9.9。脚本操作 9.9.1。使用示例 9.10。集团运营 9.10.1。使用示例 9.11。聚合框架支持 9.11.1。基本概念 9.11.2。支持的聚合操作 9.11.3。投影表达式 9.11.4。分面分类 9.12。用自定义转换器覆盖默认映射 9.12.1。使用已注册的Spring Converter进行保存 9.12.2。使用Spring转换器读取 9.12.3。使用MongoConverter注册Spring转换器 9.12.4。转换器消除歧义 9.13。索引和集合管理 9.13.1。创建索引的方法 9.13.2。访问索引信息 9.13.3。使用集合的方法 9.14。执行命令 9.14.1。执行命令的方法 9.15。生命周期事件 9.16。例外翻译 9.17。执行回调 9.18。GridFS支持 9.19。更改流 9.19.1。使用MessageListener更改流 9.19.2。更改流 - 无效 10.反应性的MongoDB支持 10.1。入门 10.2。使用Spring和Reactive Streams Driver连接到MongoDB 10.2.1。使用基于Java的元数据注册MongoClient实例 10.2.2。ReactiveMongoDatabaseFactory接口 10.2.3。使用基于

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值