Spring Boot MongoDB 入门
1. 概述
可能有一些胖友对 MongoDB 不是很了解,这里我们引用一段介绍:
FROM 《分布式文档存储数据库 MongoDB》
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
他支持的数据结构非常松散,是类似 json 的 bjson 格式,因此可以存储比较复杂的数据类型。
Mongo 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB 中的许多概念在 MySQL 中具有相近的类比。本表概述了每个系统中的一些常见概念。
对于不熟悉的胖友,可以先看下该表,然后开始本文的旅程。
MySQL | MongoDB |
---|---|
库 Database | 库 Database |
表 Table | 集合 Collection |
行 Row | 文档 Document |
列 Column | 字段 Field |
joins | 嵌入文档或者链接 |
在早期,在项目中 MongoDB 的 ORM 框架使用 Morphia 较多。随着 Spring Data MongoDB 的日趋完善,更为主流。目前,艿艿手头所有的项目,都从 Morphia 该用 Spring Data MongoDB 。
在 Spring Data MongoDB 中,有两种方式进行 MongoDB 操作:
Spring Data Repository 方式
MongoTemplate
艿艿:如果胖友还没安装 MongoDB ,可以参考下 《芋道 MongoDB 安装部署》 文章,先进行下安装。
2. 快速入门
示例代码对应仓库:lab-16-spring-data-mongodb 。
MongoDB 版本号:4.2.1
本小节,我们会使用 spring-boot-starter-data-mongodb
自动化配置 Spring Data MongoDB 主要配置。同时,使用 Spring Data Repository 实现的 MongoDB 的 CRUD 操作。
2.1 引入依赖
在 pom.xml
文件中,引入相关依赖。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/><!-- lookup parent from repository --></parent><modelVersion>4.0.0</modelVersion><artifactId>lab-16-spring-data-mongodb</artifactId><dependencies><!-- 自动化配置 Spring Data Mongodb --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!-- 方便等会写单元测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>
具体每个依赖的作用,胖友自己认真看下艿艿添加的所有注释噢。
2.2 Application
创建 Application.java
类,配置 @SpringBootApplication
注解即可。代码如下:
// Application.java@SpringBootApplication(exclude = {ElasticsearchAutoConfiguration.class, ElasticsearchDataAutoConfiguration.class})
publicclass Application {
}
2.3 MongoDBConfig
在 cn.iocoder.springboot.lab16.springdatamongodb.config
包路径下,创建 MongoDBConfig 配置类。代码如下:
// MongoDBConfig.java@Configuration
publicclass MongoDBConfig {@Bean// 目的,就是为了移除 _class field 。参考博客 https://blog.csdn.net/bigtree_3721/article/details/82787411public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory,MongoMappingContext context,BeanFactory beanFactory) {// 创建 DbRefResolver 对象DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);// 创建 MappingMongoConverter 对象MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);// 设置 conversions 属性try {mappingConverter.setCustomConversions(beanFactory.getBean(CustomConversions.class));} catch (NoSuchBeanDefinitionException ignore) {}// 设置 typeMapper 属性,从而移除 _class field 。mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));return mappingConverter;}}
通过在自定义 MappingMongoConverter Bean 对象,避免实体保存到 MongoDB 中时,会多一个
_class
字段,存储实体的全类名。
2.4 配置文件
在 application.yml
中,添加 MongoDB 配置,如下:
spring:data:# MongoDB 配置项,对应 MongoProperties 类mongodb:host:127.0.0.1port:27017database:yourdatabaseusername:test01password:password01# 上述属性,也可以只配置 urilogging:level:org:springframework:data:mongodb:core:DEBUG# 打印 mongodb 操作的具体语句。生产环境下,不建议开启。
2.5 UserDO
在 cn.iocoder.springboot.lab16.springdatamongodb.dataobject
包路径下,创建 UserDO 类。代码如下:
@Document(collection = "User")
publicclass UserDO {/*** 用户信息*/publicstaticclass Profile {/*** 昵称*/private String nickname;/*** 性别*/private Integer gender;// ... 省略 setting/getting 方法}@Idprivate Integer id;/*** 账号*/private String username;/*** 密码*/private String password;/*** 创建时间*/private Date createTime;/*** 用户信息*/private Profile profile;// ... 省略 setting/getting 方法}
在 UserDO 类中,我们内嵌了一个
profile
属性,它是 Profile 类。这里仅仅作为示例,实际场景下,还是建议把 User 和 Profile 拆分开。推荐阅读 《你应该知道的 MongoDB 最佳实践》 文章。对于初用 MongoDB 的开发者,往往错误的使用内嵌属性,需要去理解一下。
2.6 UserRepository
在 cn.iocoder.springboot.lab16.springdatamongodb.repository
包路径下,创建 UserRepository 接口。代码如下:
// ProductRepository.javapublicinterface UserRepository extends MongoRepository<UserDO, Integer> {
}
继承
org.springframework.data.mongodb.repository.MongoRepository
接口,第一个泛型设置对应的实体是 UserDO ,第二个泛型设置对应的主键类型是 Integer 。因为实现了 MongoRepository 接口,Spring Data MongoDB 会自动生成对应的 CRUD 等等的代码。
Spring Boot MongoDB 入门相关推荐
- 芋道 Spring Boot 快速入门
点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2019 超神之路,很肝~ 中文详细注释的开源项目 RP ...
- 芋道 Spring Boot JPA 入门(一)之快速入门
点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2019 超神之路,很肝~ 中文详细注释的开源项目 RP ...
- Spring boot mongodb
mongodb语法 spring boot mongodb 引入 pom依赖 <dependencies><dependency><groupId>org.spri ...
- spring boot(一)入门
目录 spring boot(一)入门 一.简介 1.微服务的概念 2.什么是spring boot 3.快速入门 4.springboot的快捷部署 spring boot(一)入门 一.简介 1. ...
- Spring Boot Mybatis入门示例
Spring Boot Mybatis 入门示例 基于Spring Boot 2.3.4,Junit5 步骤说明 整个工程的最终目录结构如下,添加文件或者新建的目录的参考: └─src├─ma ...
- Spring Boot 高效入门实战
凭借开箱即用,远离繁琐的配置等特性,Spring Boot 已经成为 Java 开发者人人必学必会的开源项目.那么开发者该如何快速上手Spring Boot 呢? 进入Spring Boot世界 Ja ...
- spring boot 快速入门
文章来源:https://www.cnblogs.com/junyang/p/8151802.html spring boot入门 -- 介绍和第一个例子 "越来越多的企业选择使用sprin ...
- 【720开发】 spring boot 快速入门
spring boot 快速入门 通过构建简单的REST应用,了解spring boot的开发基本流程,验证其简单.易用特性. 环境要求 Spring Boot 2.0.0.BUILD-SNAPSHO ...
- 视频教程-Spring Boot实战入门视频课程-Java
Spring Boot实战入门视频课程 国内上市大型医疗软件公司产品研发部总经理,技术培训总监.6年以上大型项目一线开发.架构.管理经验,曾主导医疗大数据+移动BI产品设计与研发.技术狂热爱好者,擅长 ...
最新文章
- javascript_JavaScript疲劳疲劳
- 2019年一线大厂20个长问mongo面试题和答案
- python里什么叫子图_Python 如何构建多个子图表
- FPGA基础之锁存器与触发器的设计
- LOJ 121 「离线可过」动态图连通性——LCT维护删除时间最大生成树 / 线段树分治...
- 智能合约语言 Solidity 教程系列8 - Solidity API
- Ubuntu16.04 安装 docker
- P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】
- monthdiff oracle_Oracle计算时间差函数
- 从安全到镜像流水线,Docker 最佳实践与反模式一览
- 设计模式速查手册-创建型
- 利用MATLAB平台实现字的语音识别功能
- 获取虚拟账号列表失败啥意思_「图」Windows 10 Build 18963发布:可显GPU温度 支持重命名虚拟桌面...
- 发现同济七版高等数学中的一处疑似错误
- 使用ACR122U NFC读卡器对M1卡进行读写操作(可以读写中文)
- js导入xlsx文件
- 微型打印机方案(包含原理图、PCB和BOM表)
- 魔法阵c语言课程设计,魔法阵真的存在吗?
- fullscreen mode and windowed mode
- java解析Excel文件
热门文章
- 芋道 Spring Boot 快速入门