本文共 2386 字,大约阅读时间需要 7 分钟。
在项目中引入必要的依赖项,确保与 MongoDB 进行通信。通过 Maven 的方式添加 Spring Boot 数据 MongoDB Starter:
org.springframework.boot spring-boot-starter-data-mongodb
配置 application.properties
文件,设置 MongoDB 的基本信息,包括 URI、命名策略等。注意:MongoDB URI 格式为 mongodb://ip:port/database
。
spring.data.mongodb.uri=mongodb://192.168.73.3:27017/demospring.data.mapping.fieldNamingStrategy=org.springframework.data.mapping.model.SnakeCaseFieldNamingStrategy
检查集合是否存在,如果不存在则创建:
if (!mongoTemplate.collectionExists("demo")) { mongoTemplate.createCollection("demo");}
删除指定集合:
mongoTemplate.dropCollection("demo1");
在 MongoDB 中,通过注解对应字段进行映射和操作。
用于将 POJO 映射为 MongoDB 文档,指定集合名称:
@Document("demo")public class User { // ... }
将字段映射为 MongoDB 的 _id
:
@Idprivate Integer id;
指定字段在 MongoDB 中的命名:
@Field("work_day")private Date workDay;
标记字段不参与序列化:
@Transientprivate String transientField;
// 查询所有文档Listusers = mongoTemplate.findAll(User.class);// 根据 ID 查询单个文档User userById = mongoTemplate.findById(1, User.class);// 根据条件查询List usersByCondition = mongoTemplate.find( Query.query(Criteria.where("name").is("周杰伦")), User.class);
// 分页查询public ListfindPaginated(int page, int size) { Query query = new Query(); query.skip((page - 1) * size).limit(size); return mongoTemplate.find(query, User.class);}
// 更新单条记录mongoTemplate.updateFirst( Query.query(Criteria.where("name").is("周杰伦")), new Update().set("age", 20), User.class);// 更新多条记录mongoTemplate.updateMulti( Query.query(Criteria.where("name").is("周杰伦")), new Update().set("age", 20), User.class);
// 删除所有文档mongoTemplate.remove(new Query(), User.class);// 删除按条件mongoTemplate.remove( Query.query(Criteria.where("name").is("林俊杰")), User.class);
在应用配置类中启用事务管理:
@Configurationpublic class MongoTransactionConfig { @Bean public MongoTransactionManager transactionManager( MongoDatabaseFactory factory ) { return new MongoTransactionManager(factory); }}
在需要事务的业务逻辑中使用 @Transactional
注解:
@Transactionalpublic void handler(RegDto dto) { // 业务逻辑 userIdentRepo.save(dto); throw new RuntimeException("业务处理错误");}
转载地址:http://wcffk.baihongyu.com/