SpringBoot 整合MongoDB

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

 

posted @   如幻行云  阅读(271)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示