程序员社区

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的下载与安装以及与SpringBoot进行集成插图
image.png

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
推荐下载安装版,可以直接安装配置为系统服务

MongoDB的下载与安装以及与SpringBoot进行集成插图1
image.png

安装步骤

1.Next
MongoDB的下载与安装以及与SpringBoot进行集成插图2
image.png
2.接受,next
MongoDB的下载与安装以及与SpringBoot进行集成插图3
image.png
3.如果不想把软件装在系统盘,就选择Custom,然后Next
MongoDB的下载与安装以及与SpringBoot进行集成插图4
image.png
4.选择安装路径,next
MongoDB的下载与安装以及与SpringBoot进行集成插图5
image.png
5.从 MongoDB 4.0 开始,可以在安装期间配置 MongoDB 作为服务,不需要像以前版本那样输入一堆命令来将 MongoDB 配置成 Windows 服务来自动运行。
MongoDB的下载与安装以及与SpringBoot进行集成插图6
image.png

网络服务用户: Windows 内置的 Windows 用户帐户
本地或域用户:
对于现有本地用户帐户,Account Domain 指定为.,并为该用户指定 Account NameAccount Password
对于现有域用户,指定 Account DomainAccount NameAccount Password
Service Name:也就是Windows 服务的服务名,如果你已有指定名称的服务,则必须选择其他名称。
Data Directory:数据保存目录,如果该目录不存在,安装程序将创建该目录并为服务用户设置访问权限
Log Directory:日志保存目录,如果该目录不存在,安装程序将创建该目录并为服务用户设置访问权限

6.不要勾选 Install MongoDB Compass,貌似勾选安装MongoDB Compass的话会很慢,这个不影响使用
MongoDB的下载与安装以及与SpringBoot进行集成插图7
7.开始安装
MongoDB的下载与安装以及与SpringBoot进行集成插图8
image.png

启动

安装完启动会发现启动失败,先ignore忽略掉
MongoDB的下载与安装以及与SpringBoot进行集成插图9
image.png
安装完成
MongoDB的下载与安装以及与SpringBoot进行集成插图10
image.png
启动服务成功的话需要到bin目录下找到mongod.cfg文件
MongoDB的下载与安装以及与SpringBoot进行集成插图11
image.png
找到并打开编辑,把mp:去掉,保存
MongoDB的下载与安装以及与SpringBoot进行集成插图12
image.png
WIN+X进入计算机管理→服务和应用程序→服务,

找到对应服务将其启动即可

MongoDB的下载与安装以及与SpringBoot进行集成插图13
image.png

MongoDB默认端口是27017,所以在浏览器上访问http://localhost:27017/,需要修改可以到mongod.cfg文件中配置

显示如下图说明启动成功,可以使用Navicat可视化工具对MongoDB进行操作

MongoDB的下载与安装以及与SpringBoot进行集成插图14
image.png

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);
}

为什么具有Crud操作呢

注意看以下继承关系

public interface MongoRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID>

不难发现最后有继承CrudRepository接口
CrudRepository源码

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S var1);
    <S extends T> Iterable<S> saveAll(Iterable<S> var1);
    Optional<T> findById(ID var1);
    boolean existsById(ID var1);
    Iterable<T> findAll();
    Iterable<T> findAllById(Iterable<ID> var1);
    long count();
    void deleteById(ID var1);
    void delete(T var1);
    void deleteAll(Iterable<? extends T> var1);
    void deleteAll();
}
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.hostMongoDB服务器地址,默认localhost
spring.data.mongodb.port 端口,默认 27017
spring.data.mongodb.uriMongoDB的uri,多用于集群,默认mongodb://localhost/test,多数据源用,分隔

启动测试

MongoDB的下载与安装以及与SpringBoot进行集成插图15
image.png

Navicat中看到存入的数据,_id_class是MongoDB自动生成的

MongoDB的下载与安装以及与SpringBoot进行集成插图16
image.png

推荐参考:

官方示例: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/

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MongoDB的下载与安装以及与SpringBoot进行集成

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区