Spring整合MongoDB

官方文档地址:https://docs.spring.io/spring-data/mongodb/docs/3.1.3/reference/html/#introduction

一、 Spring整合MongoDB 

1、依赖

        <!--mongo-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>3.1.3</version>
        </dependency>

        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
            <version>4.1.1</version>
        </dependency>

将Spring的版本更改为 5.3.3: <spring.framework.version>5.3.3</spring.framework.version>

若springboot版本为2.4.2,则Spring版本就是 5.3.3

2、将MongoClient交给Spring IOC容器管理

 MongoConfig.java

@Configuration
public class MongoConfig {

    @Bean
    public MongoClient mongoClient() {
        // 使用更高级的配置MongoClientSettings(请注意,这些不是建议值)
//        MongoClientSettings settings = MongoClientSettings.builder()
//                .applyConnectionString(new ConnectionString("mongodb://10.13.130.1:37017"))
//                .applyToConnectionPoolSettings(builder -> ConnectionPoolSettings.builder()
//                        .maxConnectionLifeTime(10, TimeUnit.SECONDS)
//                        .maxWaitTime(15, TimeUnit.SECONDS)
//                        .maxConnectionIdleTime(30, TimeUnit.SECONDS)
//                        .maintenanceFrequency(10, TimeUnit.SECONDS)
//                        .maintenanceInitialDelay(11, TimeUnit.SECONDS)
//                        .minSize(10)
//                        .maxSize(20)
//                        .build())
//                .build();
//        return MongoClients.create(settings);
        return MongoClients.create("mongodb://10.13.130.1:37017");

    }

    @Bean
    public MongoDatabaseFactory mongoDatabaseFactory() {
        return new SimpleMongoClientDatabaseFactory(mongoClient(), "mitv_mall");
    }

    @Bean
    public MongoTemplate mongoTemplate() {
        return new MongoTemplate(mongoDatabaseFactory());
    }

}

3、简单使用示例

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    void mongoTest() {
        Map<String, Object> record = new HashMap<>(4);
        record.put("_id", "1");
        record.put("name", "hello mongo");
        // 插入
        Map<String, Object> result = mongoTemplate.insert(record, "cf_products");
        // 查询
        List<Map> cfProductsMapList = mongoTemplate.findAll(Map.class,"cf_products");
    }

 数据:

> db.cf_products.find().pretty()
{ "_id" : "1", "name" : "hello mongo" }

二、SpringBoot整合MongoDB 

Springboot版本为2.4.2

1、依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
            <version>2.4.2</version>
        </dependency>

 2、application.properties中配置连接信息

#mongodb://user:pwd@ip1:port1,ip2:port2/database
spring.data.mongodb.uri=mongodb://10.13.130.1:37017/mitv_mall

 3、简单使用示例

   @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    void mongoTest() {
        Map<String, Object> record = new HashMap<>(4);
        record.put("_id", "1");
        record.put("name", "hello mongo");
        // 插入
        Map<String, Object> result = mongoTemplate.insert(record, "cf_products");
        // 查询
        List<Map> cfProductsMapList = mongoTemplate.findAll(Map.class,"cf_products");
    }

MongoTeplate简介

  org.springframework.data.mongodb.core.MongoTemplate

  MongoTemplate是Spring对MongoDB支持的核心,并且是线程安全的,可以在多个实例之间复用。

  提供了创建,更新,删除和查询MongoDB的快捷操作,并提供了 domain 对象和 mongoDB document之间的映射。

  MongoDB文档和域类之间的映射是通过委托MongoConverter接口的实现来完成的。Spring提供了MappingMongoConverter实现,但您也可以编写自己的转换器

如何_id在映射层中处理字段

   MongoDB要求您有一个_id用于所有文档的字段。如果不提供,驱动程序将为分配ObjectId一个生成的值。

  当您使用时MappingMongoConverter,某些规则将控制Java类中的属性如何映射到此_id字段:

    ① 用@Id(org.springframework.data.annotation.Id)注释的属性或字段映射到该_id字段。

    ② 没有注释但已命名的属性或字段id映射到该_id字段

   

END.

原文地址:https://www.cnblogs.com/yangyongjie/p/14383963.html