SpringBoot2.x使用MongoDB存储数据
MongoDB
在企业级项目中一般用于存储文档信息、图片资源等,MongoDB
的内容完全是以 JSON
字符串的形式进行存储的,所以我们在获取数据时通过简单的 反序列化
就可以完成与项目内的实体类转换,不过这个过程是自动的,不需要我们手动进行反序列化处理。
本章目标
完成简单的SpringBoot
与MongoDB
的自动化整合,让我们像是使用spring-data-jpa
的形式来完成MongoDB
的数据操作。
准备MongDB
我们使用MongoDB
官方提供的安装方式进行安装,下面是对应系统的官方安装文档:
创建用户
我们需要创建一个用户,用于本章的使用,如果你是OSX
系统,只需要打开终端输入mongo
命令就可以进入MongoDB
的管理界面。
1 | 1. 创建数据库 |
用户创建完成后就可以进行本章的编码了,环境有了之后我们接下来需要进行环境的连接进行操作数据。
构建项目
我们使用IDEA
创建一个新的SpringBoot
项目,在pom.xml
配置文件内添加我们本章所需要的依赖,如下所示:
1 | <dependencies> |
根据mongodb
的依赖我们可以看到Spring
家族式的设计,把所有操作数据的依赖都进行归类到spring-boot-starter-data-xxx
下,我们比较常用到的如:spring-boot-starter-data-jpa
、spring-boot-starter-data-redis
等。
MongoRepository
spring-boot-starter-data-mongodb
确实采用了跟spring-boot-starter-data-jpa
同样的方式来完成接口代理类的生成,并且提供了一些常用的单个对象操作的公共方法,MongoRepository
接口作用与JPARepository
一致,继承了该接口的业务数据接口
就可以提供一个被Spring IOC
托管的代理实现类,这样我们在注入业务数据接口
时就会完成代理实现类的注入。
废话不多说了,下面我们直接来创建一个名为CustomerRepository
的数据接口,该接口继承MongoRepository<T,PK>
,如下所示:
1 | /** |
MongoRepository <T,PK>
同样也是采用了两个泛型参数,T
:实体类类型。PK
:T
实体类内的主键类型,如:String。
自定义实体类
我们在CustomerRepository
接口内使用了Customer
实体类作为泛型参数,下面我们简单创建Customer
实体类,内容如下所示:
1 |
|
同样我们需要通过@Id
注解进行设置主键,不过这个主键的值是MongoDB
自动生成的,生成的主键值是具有唯一性的。
添加配置
代码已经准备好了,我们只需要添加MongoDB
的一些配置信息就大功告成了,下面我们需要在application.yml
配置文件内添加如下配置:
1 | spring: |
在上面配置的uri
内的test
即为数据库的名称,username
配置我们自定义的用户名称,password
配置为自定义用户设置的密码。
上面我们的代码已经全部编写完成,接下来我们需要进行测试,来查看我们的CustomerRepository
是否已经生效.
测试
我们使用CommandLineRunner
接口进行简单的项目运行后就执行Customer
文档内的数据操作,修改Chapter51Application
入口类,添加CommandLineRunner
接口的实现,如下所示:
1 | /** |
在run
方法内
- 删除了
Customer
文档内的全部内容 - 执行了保存数据的操作
- 查询出本次保存的数据内容
下面我们来运行下程序查看控制台的效果,如下所示:
1 | [{"firstName":"于","id":"5ad4be1cab73ac0bdc23bd9a","lastName":"起宇"}] |
已经可以正常的输出了MongoDB
我们添加到文档内的数据,在上面说到了id
这个字段的特殊性,这是个分布式唯一性的字段值,是一个短板的md5
格式的字符串。
修改默认扫描路径
如果你不打算使用SpringBoot
默认的扫描路径(SpringBoot
默认扫描XxxApplication
类的同级以及所有子级的package
)可以通过@EnableMongoRepositories
注解配置basePackages
属性完成自定义的MongoDB
的MongoRepository
实现类的扫描,如下所示:
1 |
|
总结
本章简单的讲解了SpringBoot
集成MongoDB
,它与JPA
有着同样的数据操作方式,数据接口通过继承MongoRepository
就可以让我们可以使用与JPA
相同的方法进行操作MongoDB
文档内的数据,从而减少了学习的成本。
SpringBoot2.x使用MongoDB存储数据