MongoDB在企业级项目中一般用于存储文档信息、图片资源等,MongoDB的内容完全是以 JSON字符串的形式进行存储的,所以我们在获取数据时通过简单的 反序列化就可以完成与项目内的实体类转换,不过这个过程是自动的,不需要我们手动进行反序列化处理。
免费教程专题
恒宇少年在博客整理三套免费学习教程专题,由于文章偏多特意添加了阅读指南,新文章以及之前的文章都会在专题内陆续填充,希望可以帮助大家解惑更多知识点。
本章目标
完成简单的SpringBoot与MongoDB的自动化整合,让我们像是使用spring-data-jpa的形式来完成MongoDB的数据操作。
为你推荐
- 第四十七章:SpringBoot2.0新特性 - Quartz自动化配置集成
- 第四十八章:SpringBoot2.0新特性 - RabbitMQ信任package设置
- 第四十九章:SpringBoot2.0新特性 - 你get到WebMvcConfigurer两种配置方式了吗?
- 第五十章:SpringBoot2.0新特性 - 岂止至今最简单redis缓存集成
SpringBoot 企业级核心技术学习专题
| 专题 | 专题名称 | 专题描述 |
|---|---|---|
| 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官方提供的安装方式进行安装,下面是对应系统的官方安装文档:
创建用户
我们需要创建一个用户,用于本章的使用,如果你是OSX系统,只需要打开终端输入mongo命令就可以进入MongoDB的管理界面。
1. 创建数据库
使用 use test; 命令可以创建一个名为`test`的数据库
2. 创建数据库所有者角色的用户
db.createUser(
{
user: "test",
pwd: "123456",
roles: [ { role: "dbOwner", db: "test" } ]
}
);
用户创建完成后就可以进行本章的编码了,环境有了之后我们接下来需要进行环境的连接进行操作数据。
构建项目
我们使用IDEA创建一个新的SpringBoot项目,在pom.xml配置文件内添加我们本章所需要的依赖,如下所示:
<dependencies>
<!--mongodb依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--fastjson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.44</version>
</dependency>
<!--测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</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>,如下所示:
/**
* 客户数据接口
* 继承自MongoRepository接口
*
* @author:于起宇 <br/>
* ===============================
* Created with IDEA.
* Date:2018/3/28
* Time:下午7:41
* 简书:http://www.jianshu.com/u/092df3f77bca
* ================================
*/
public interface CustomerRepository extends MongoRepository<Customer, String> {
}
MongoRepository <T,PK>同样也是采用了两个泛型参数,
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文档内的数据,从而减少了学习的成本。
本章源码已经上传到码云:
SpringBoot配套源码地址:https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源码地址:https://gitee.com/hengboy/spring-cloud-chapter