MongoDB的下载与安装以及与SpringBoot进行集成
MongoDB简介
MongoDB是由 C++的一个基于分布式文件存储的数据库,为 WEB 应用提供可扩展的高性能数据存储解决方案。支持的数据结构非常松散,因此可以存储比较复杂的数据类型。模式自由(schema-free),意味着对于存储在MongoDB数据库中的文件,不需要知道任何结构定义,完全可以把不同结构的文件存储在同一个数据库里。所以说MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
Github地址:https://github.com/mongodb/mongo
官方网站:https://www.mongodb.com/
官方文档:https://docs.mongodb.com/
中文社区:http://www.mongoing.com/
文件数据库
MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。
MongoDB主要特点:
1.高性能:对嵌入式数据模型的支持,减少了对数据库IO操作。索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。
2.丰富的查询语言:MongoDB支持丰富的查询语言以支持读写操作(CRUD)以及数据聚合,文本搜索和空间查询
3.高可用性:MongoDB的拷贝工具称为副本集,副本集就是通过部署多个mongod实例构成的一个集群,这个集群中的mongod之间有主从关系。提供了数据复制冗余和通过选举机制实现自动故障转移
4.水平可伸缩性:MongoDB提供了分片集群部署模式,在分片集群部署中,每个分片负责保存一部分数据,对于每个分片,仍然可以采用副本集的方式,通过复制冗余的方式,保证这部分数据的高可用性。从3.4版本开始,MongoDB支持基于分片键创建数据区域。在集群中,MongoDB仅将区域覆盖的读取和写入指向区域内的分片。
5.MongoDB支持多个存储引擎
WiredTiger(默认存储引擎):非常适合大多数工作负载,提供文档级并发模型,检查点和压缩等功能,还支持静态加密。
内存存储引擎:它不是将文档存储在磁盘上,而是将它们保留在内存中,以实现更可预测的数据延迟。
MMAPv1:是MongoDB 3.0及更早版本的默认存储引擎,现不推荐使用
下载社区版
下载地址:https://www.mongodb.com/download-center/community
推荐下载安装版,可以直接安装配置为系统服务
安装步骤
1.Next
image.png2.接受,next
image.png3.如果不想把软件装在系统盘,就选择Custom,然后Next
image.png4.选择安装路径,next
image.png5.从 MongoDB 4.0 开始,可以在安装期间配置 MongoDB 作为服务,不需要像以前版本那样输入一堆命令来将 MongoDB 配置成 Windows 服务来自动运行。
image.png网络服务用户: Windows 内置的 Windows 用户帐户
本地或域用户:
对于现有本地用户帐户,Account Domain
指定为.
,并为该用户指定 Account Name
和 Account Password
对于现有域用户,指定 Account Domain
,Account Name
和 Account Password
Service Name
:也就是Windows 服务的服务名,如果你已有指定名称的服务,则必须选择其他名称。
Data Directory
:数据保存目录,如果该目录不存在,安装程序将创建该目录并为服务用户设置访问权限
Log Directory
:日志保存目录,如果该目录不存在,安装程序将创建该目录并为服务用户设置访问权限
6.不要勾选 Install MongoDB Compass
,貌似勾选安装MongoDB Compass
的话会很慢,这个不影响使用
7.开始安装
image.png启动
安装完启动会发现启动失败,先ignore
忽略掉
image.png
安装完成
image.png启动服务成功的话需要到bin
目录下找到mongod.cfg
文件
image.png
找到并打开编辑,把mp:
去掉,保存
image.png
WIN+X
进入计算机管理→服务和应用程序→服务,
找到对应服务将其启动即可
MongoDB默认端口是27017
,所以在浏览器上访问http://localhost:27017/,需要修改可以到mongod.cfg
文件中配置
显示如下图说明启动成功,可以使用Navicat可视化工具对MongoDB进行操作
MongoDB与SpringBoot进行集成
以图片上传为例子
实体类
@Data
public class File {
private String id;
private String name;
private String contentType;
private long size;
private byte[] content;
public File(String name, String contentType, long size,byte[] content) {
this.name = name;
this.contentType = contentType;
this.size = size;
this.content = content;
}
}
两种方式实现DAO层
1.实现MongoRepository
统一接口操作MongoDB
Spring Data JPA和Spring Data MongoDB共享相同的通用基础架构。与JPA存储库一样,基本原则是基于方法名称自动构造查询。
public interface FileRepository extends MongoRepository<File, String> {
}
MongoRepository
源码如下
@NoRepositoryBean
public interface MongoRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
<S extends T> List<S> saveAll(Iterable<S> var1);
List<T> findAll();
List<T> findAll(Sort var1);
<S extends T> S insert(S var1);
<S extends T> List<S> insert(Iterable<S> var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
2.使用Spring Data MongoDB提供的MongoTemplate,与Spring的JdbcTemplate
设计非常相似
Controller层,这里选择使用MongoTemplate
,直接注入使用即可
@RestController
public class FileUploadApi {
@Autowired
MongoTemplate mongoTemplate;
@PostMapping("/upload")
public JSONObject handleFileUpload(@RequestParam MultipartFile file) {
JSONObject jsonObject=new JSONObject();
try {
File newFile=mongoTemplate.save(new File(file.getOriginalFilename(), file.getContentType(), file.getSize(), file.getBytes()));
jsonObject.put("file_message",mongoTemplate.findById(newFile.getId(),File.class));
} catch (IOException ex) {
jsonObject.put("file_message","上传失败");
}
return jsonObject;
}
}
关于SpringBoot配置
spring.data.mongodb.database
设置MongoDB连接数据库,默认情况下连接的是test
数据库
spring.data.mongodb.host
MongoDB服务器地址,默认localhost
spring.data.mongodb.port
端口,默认 27017
spring.data.mongodb.uri
MongoDB的uri
,多用于集群,默认mongodb://localhost/test,多数据源用,
分隔
启动测试
Navicat中看到存入的数据,_id
和_class
是MongoDB自动生成的
推荐参考:
官方示例:https://github.com/spring-projects/spring-data-book/tree/master/mongodb
API文档:https://docs.spring.io/spring-data/mongodb/docs/2.1.3.RELEASE/api/