MongoDB在企业级项目中一般用于存储文档信息、图片资源等,MongoDB的内容完全是以 JSON字符串的形式进行存储的,所以我们在获取数据时通过简单的 反序列化就可以完成与项目内的实体类转换,不过这个过程是自动的,不需要我们手动进行反序列化处理。
本章目标
完成简单的SpringBoot与MongoDB的自动化整合,让我们像是使用spring-data-jpa的形式来完成MongoDB的数据操作。

001
Spring Boot 核心技术
讲解SpringBoot一些企业级层面的核心组件

002
Spring Boot 核心技术章节源码
Spring Boot 核心技术简书每一篇文章码云对应源码

003
Spring Cloud 核心技术
对Spring Cloud核心技术全面讲解

004
Spring Cloud 核心技术章节源码
Spring Cloud 核心技术简书每一篇文章对应源码

005
QueryDSL 核心技术
全面讲解QueryDSL核心技术以及基于SpringBoot整合SpringDataJPA

006
SpringDataJPA 核心技术
全面讲解SpringDataJPA核心技术

007
SpringBoot核心技术学习目录
SpringBoot系统的学习目录,

准备MongDB
我们使用MongoDB官方提供的安装方式进行安装,下面是对应系统的官方安装文档:

Linux下安装MongoDB
Windows下安装MongoDB
OSX下安装MongoDB

创建用户
我们需要创建一个用户,用于本章的使用,如果你是OSX系统,只需要打开终端输入mongo命令就可以进入MongoDB的管理界面。

  1. 创建数据库
    使用 use test; 命令可以创建一个名为test的数据库
  2. 创建数据库所有者角色的用户
    db.createUser(
    {
    user: "test",
    pwd: "123456",
    roles: [ { role: "dbOwner", db: "test" } ]
    }
    );
    用户创建完成后就可以进行本章的编码了,环境有了之后我们接下来需要进行环境的连接进行操作数据。

构建项目
我们使用IDEA创建一个新的SpringBoot项目,在pom.xml配置文件内添加我们本章所需要的依赖,如下所示:
<dependencies>

org.springframework.boot spring-boot-starter-data-mongodb org.projectlombok lombok true com.alibaba fastjson 1.2.44 org.springframework.boot spring-boot-starter-test test 根据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,如下所示: /** * 客户数据接口 * 继承自MongoRepository接口 * * @author:
* =============================== * Created with IDEA. * Date:2018/3/28 * Time:下午7:41 * ================================ */ public interface CustomerRepository extends MongoRepository { } MongoRepository 同样也是采用了两个泛型参数, T:实体类类型。 PK:T实体类内的主键类型,如:String。 自定义实体类 我们在CustomerRepository接口内使用了Customer实体类作为泛型参数,下面我们简单创建Customer实体类,内容如下所示: @Data public class Customer implements Serializable { /** * 客户编号 */ @Id public String id; /** * 客户名称 */ public String firstName; /** * 客户姓氏 */ public String lastName; public Customer(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } } 同样我们需要通过@Id注解进行设置主键,不过这个主键的值是MongoDB自动生成的,生成的主键值是具有唯一性的。 添加配置 代码已经准备好了,我们只需要添加MongoDB的一些配置信息就大功告成了,下面我们需要在application.yml配置文件内添加如下配置: spring: application: name: spring-boot-mongodb data: mongodb: uri: mongodb://localhost/test username: test password: 123456 在上面配置的uri内的test即为数据库的名称,username配置我们自定义的用户名称,password配置为自定义用户设置的密码。 上面我们的代码已经全部编写完成,接下来我们需要进行测试,来查看我们的CustomerRepository是否已经生效. 测试 我们使用CommandLineRunner接口进行简单的项目运行后就执行Customer文档内的数据操作,修改Chapter51Application入口类,添加CommandLineRunner接口的实现,如下所示: /** * 程序入口类 * @author yuqiyu */ @SpringBootApplication public class Chapter51Application implements CommandLineRunner { /** * logger instance */ static Logger logger = LoggerFactory.getLogger(Chapter51Application.class); /** * 客户数据接口注入 */ @Autowired private CustomerRepository repository; public static void main(String[] args) { SpringApplication.run(Chapter51Application.class, args); logger.info("【【【【【SpringBoot整合Mongodb启动完成.】】】】】"); } @Override public void run(String... args) { // 删除全部 repository.deleteAll(); // 添加一条数据 repository.save(new Customer("于", "起宇")); // 查询全部 logger.info(JSON.toJSONString(repository.findAll())); } } 在run方法内 删除了Customer文档内的全部内容 执行了保存数据的操作 查询出本次保存的数据内容 下面我们来运行下程序查看控制台的效果,如下所示: [{"firstName":"于","id":"5ad4be1cab73ac0bdc23bd9a","lastName":"起宇"}] 【【【【【SpringBoot整合Mongodb启动完成.】】】】】 已经可以正常的输出了MongoDB我们添加到文档内的数据,在上面说到了id这个字段的特殊性,这是个分布式唯一性的字段值,是一个短板的md5格式的字符串。 修改默认扫描路径 如果你不打算使用SpringBoot默认的扫描路径(SpringBoot默认扫描XxxApplication类的同级以及所有子级的package)可以通过@EnableMongoRepositories注解配置basePackages属性完成自定义的MongoDB的MongoRepository实现类的扫描,如下所示: @SpringBootApplication @EnableMongoRepositories(basePackages = "com.hengyu.chapter51") public class Chapter51Application implements CommandLineRunner { } 总结 本章简单的讲解了SpringBoot集成MongoDB,它与JPA有着同样的数据操作方式,数据接口通过继承MongoRepository就可以让我们可以使用与JPA相同的方法进行操作MongoDB文档内的数据,从而减少了学习的成本。