SpringData 已经集成了很多技术,也包含了 MongoDB,这篇笔记就以整合 SpringData MongoDB 为例。
[TOC]
为什么使用NoSQL?
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
MongoDB
MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为 WEB 应用提供可扩展的高性能数据库解决方案。MongoDB 将数据存储为一个文档,数据结构由键值对(key => value)组成。MongoDB 文档类似于 JSON 对象,key 必须为字符串类型,value 可以包含基本类型(string,int,float,timestamp,binary 等),其他文档,基本类型数组以及文档数组。

SpringData MongoDB
由于 SpringData MongoDB 和 SpringData JPA 都属于 SpringData 系列,所以它们实现了 SpringData 同一套规范,在操作上有些非常相似。例如:继承 MongoRepository<T, ID>就会有一套crud 自动生成了。开箱即用~~
环境/版本一览:
- 开发工具:Intellij IDEA 2018.2.2
- springboot: 2.0.5.RELEASE
- jdk:1.8.0_171
- maven:3.3.9
- spring-boot-starter-data-mongodb:2.0.10.RELEASE
1、pom.xml
1 | <dependencies> |
2、application.yml
1 | spring: |
3、enums
1 | package com.fatal.enums; |
4、utils
1 | package com.fatal.utils; |
5、entity
Customer
1 | package com.fatal.entity; |
Address
1 | package com.fatal.entity; |
6、dto
CustomerDTO
1 | package com.fatal.dto; |
CustomerDetailDTO
1 | package com.fatal.dto; |
AddressDTO
1 | package com.fatal.dto; |
7、Test
SingleTableTests
1 | package com.fatal; |
MongoTemplateTests
这套 API 有点不一样
1 | package com.fatal; |
MultiTableTests
1 | package com.fatal; |
8、测试
单表测试
MongoRepository<T, ID>
1、访问 SingleTableTests.saveTest()
控制台

RoBo 3T

2、访问 SingleTableTests.updateTest()
控制台

RoBo 3T

3、访问 SingleTableTests.findByIdTest()
控制台

4、访问 SingleTableTests.deleteByIdTest()
控制台

RoBo 3T

5、访问 SingleTableTests.saveAllTest()
RoBo 3T

6、访问 SingleTableTests.findCustomerByNameTest()
控制台

7、访问 SingleTableTests.findAllByAgeTest()
控制台

8、访问 SingleTableTests.findAllByExampleTest()
控制台

9、访问 SingleTableTests.pageTest()
控制台

MongoTemplate
1、访问 MongoTemplateTests.saveTest()
RoBo 3T

2、访问 MongoTemplateTests.updateById()
RoBo 3T

3、访问 MongoTemplateTests.findByQueryTest()
控制台

4、访问 MongoTemplateTests.saveAllTest()
RoBo 3T

多表测试
访问 MultiTableTests.findMultiply()
控制台

你可以把这个测试方法的聚合操作 localField 改为id(去掉下划线),你会发现关联不上了,所以 lookup 中 Field 对数据库字段的名称有很高要求,下划线不能省略(与 Field 有关的都不能省略)。
总结
源码地址: https://github.com/ynfatal/springboot2-learning/tree/master/chapter12