官方文档地址: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.