1. pom.xml Maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
2. application.yml 配置文件
spring: data: mongodb: host: 127.0.0.1 port: 27017 username: root password: 123456 # 认证库(验证用户名和密码) authentication-database: admin # 操作库 database: db
3. 配置类
package com.ruhuanxingyun.dcy.service.manage.config; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.MongoDatabaseFactory; import org.springframework.data.mongodb.core.convert.*; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; /** * @description: MongoDB 配置类 * @author: ruphie * @date: Create in 2021/4/11 14:06 * @company: ruhuanxingyun */ @Configuration public class MongoConfig { /** * 去掉_class字段 * * @param factory MongoDatabaseFactory * @param context MongoMappingContext * @param beanFactory BeanFactory * @return MappingMongoConverter */ @Bean public MappingMongoConverter mappingMongoConverter(MongoDatabaseFactory factory, MongoMappingContext context, BeanFactory beanFactory) { DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory); MappingMongoConverter mappingMongoConverter = new MappingMongoConverter(dbRefResolver, context); // 若选择CustomConversions类,需要注意继承类就一个才可以,否则启动报错,本项目还有redis,所以要用MongoCustomConversions类 mappingMongoConverter.setCustomConversions(beanFactory.getBean(MongoCustomConversions.class)); // 去掉数据库中的_class字段,_class字段旨在把document转换成Java对象时能够转换到具体的子类 mappingMongoConverter.setTypeMapper(new DefaultMongoTypeMapper(null)); return mappingMongoConverter; } }
4. 注解
A. @Document:把一个java类声明为mongodb文档,其中collection参数代表文档,如果未指明collection,默认是类名;
B. @Id:文档的唯一标识,在mongodb中为ObjectId,由时间戳+机器标识+进程ID+自增计数器构成;
C. @Transient:忽略该字段序列化到mongodb中;
D. @Indexed:声明该字段需要索引;
E. @CompoundIndex:复合索引的声明;
注意:实体映射是通过MappingMongoConverter类实现的。
5. 常见问题
A. 问题一:连接MongoDB认证异常;
原因:在admin库中创建的用户,需要去admin库认证,然后才能访问其他库;
解决方式:在application.yml配置文件中添加spring.data.mongodb.authentication-database=admin即可。
B. 问题二:新增一条记录时报InvalidDataAccessApiUsageException异常;
原因:MongoDB无法为实体自动生成java.lang.Long类型的ID,默认的集合主键_id是ObjectId类型;
解决方式:若使用数据库_id字段,就将类型改为string。
可参考:SpringBoot整合MongoDB;