SpringBoot | 第三十一章:MongoDB的集成和使用

上一章节,简单讲解了如何集成Spring-data-jpa。本章节,我们来看看如何集成NoSQL的Mongodb。mongodb是最早热门非关系数据库的之一,使用也比较普遍。最适合来存储一些非结构数据了,适合对大量或者无固定格式的数据进行存储,比如:日志、缓存等。

一点知识

以下部分关于Mongodb介绍,来自网站:https://www.mongodb.com/cn 、纯洁的微笑

MongoDB简介

MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新。与此同时,它也为开发人员 提供了传统数据库的功能:二级索引,完整的查询系统以及严格一致性等等。 MongoDB能够使企业更加具有敏捷性和可扩展性,各种规模的企业都可以通过使用MongoDB来创建新的应用,提高与客户之间的工作效率,加快产品上市时间,以及降低企业成本。

MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。 MongoDB的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性。

简单来说,MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。

MongoDB支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型,也因为他的存储格式也使得它所存储的数据在Nodejs程序应用中使用非常流畅。

传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。

MongoDB中的一条记录就是一个文档,是一个数据结构,由字段和值对组成。MongoDB文档与JSON对象类似。字段的值有可能包括其它文档、数组以及文档数组。MongoDB支持OS X、Linux及Windows等操作系统,并提供了Python,PHP,Ruby,Java及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。

MongoDB的适合对大量或者无固定格式的数据进行存储,比如:日志、缓存等。对事物支持较弱,不适用复杂的多文档(多表)的级联查询。

SpringBoot集成MongoDB

得力于SpringBoot方便性,集成MongoDB也是很简单的。可通过三种方式进行访问,分别是:原生Db对象、MongoTemplate以及MongoRepository。原生的方式需要连接其语法规则,这里就不阐述了,毕竟不熟悉。还是使用封装好的吧,开箱急用!

准备工作

本文示例的MongoDB版本为:4.0.3。
可视化工具为:studio-3t-x64。

studio-3t

至于MongoDB如何安装,大家简单百度下就好了,很简单。下载个msi,直接安装即可。

下载地址:https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.3-signed.msi

0.加入POM依赖。

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

1.创建实体。

/** * 通知消息对象 * @author oKong * */ @Document(collection="notify_msg")//集合名 @Data @Builder @NoArgsConstructor @AllArgsConstructor public class NotifyMsg implements Serializable{ /** * */ private static final long serialVersionUID = -8985545025018238754L; @Id String id; /** * 消息类型 */ @Indexed String notifyType; /** * 消息单号 */ @Indexed String notifyNo; /** * 消息通知日期 */ String notifyDate; /** * 消息体 */ @Field("notifyMsg")//可指定存储时的字段名 String notifyMsg; /** * 创建时间 */ @CreatedDate Date gmtCreate; }

这里注意:@Document(collection="notify_msg") 表示:操作的集合为:notify_msg。
这个可手动使用工具创建下。

另外,针对@CreatedDate注解,也和之前的jpa用法一直,创建时会自动赋值,需要在启动类中添加@EnableMongoAuditing注解使其生效!

同时,可使用@Field注解,可指定存储的键值名称,默认就是类字段名。如设置@Field("notify_Msg")后,效果如下:

@Field注解声明键值

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzgpf.html