MongoDB整合SpringBoot
发布日期:2025-04-14 17:33:19 浏览次数:14 分类:精选文章

本文共 4483 字,大约阅读时间需要 14 分钟。

Spring Boot 整合 MongoDB 开发指南

环境准备

1. 引入依赖

在项目中添加 MongoDB 相关依赖:

org.springframework.boot
spring-boot-starter-data-mongodb

2. 配置文件编写

application.properties 中添加以下配置:

server:    port: 8088spring:    application:        name: mongdb-server    data:        mongodb:            uri: mongodb://hushang:123456@192.168.75.100:27017/test?authSource=admin            # URI 可转换为以下格式:            # database: test            # host: 192.168.75.100            # port: 27017            # username: hushang            # password: 123456            # authentication-database: admin

连接配置请参考 MongoDB 官方文档

测试

创建测试主类 LearnMongodbApplicationTest,示例代码如下:

public class MongoTemplateTests extends LearnMongodbApplicationTest {    @Autowired    private MongoTemplate mongoTemplate;    @Test    public void testCollection() {        boolean exists = mongoTemplate.collectionExists("emp");        if (exists) {            mongoTemplate.dropCollection("emp");        }        mongoTemplate.createCollection("emp");    }}

文档操作

相关注解

注解 描述
@Document 用于将类映射为 MongoDB 文档
@Id 用于映射 MongoDB 的 _id 字段
@Field 用于映射字段名称
@Transient 用于忽略序列化字段

创建实体

实体类 Employee 示例:

@Data@Document("emp")@AllArgsConstructor@NoArgsConstructorpublic class Employee {    @Id    private Integer id;    @Field("username")    private String name;    @Field    private Integer age;    @Field    private Date createTime;    @Transient    private String script;}

插入文档

@Testpublic void testInsertDocument() {    Employee user = new Employee(1, "hushang", 25, new Date(), "这是一个测试数据");    Employee userSave = mongoTemplate.save(user);    // 或使用批量插入    List
employeeList = new ArrayList<>(); employeeList.add(new Employee(2, "hushang", 25, new Date(), "")); employeeList.add(new Employee(3, "hushang", 25, new Date(), "")); employeeList.add(new Employee(4, "hushang", 25, new Date(), "")); mongoTemplate.insert(employeeList, Employee.class);}

查询文档

@Testpublic void testFind() {    log.info("查询所有文档");    List
employeeList = mongoTemplate.findAll(Employee.class); employeeList.forEach(System.out::println); log.info("查询单个文档"); Employee mongoTemplateById = mongoTemplate.findById(1, Employee.class); System.out.println(mongoTemplateById); log.info("findOne 查询"); Employee employeeByOne = mongoTemplate.findOne(new Query(), Employee.class); System.out.println(employeeByOne); log.info("条件查询"); Query query1 = new Query(Criteria.where("age").gt(18)); Query query2 = new Query(Criteria.where("age").gt(18).lt(28)); Query query3 = new Query(Criteria.where("name").regex("hu")); log.info("复杂查询"); Criteria criteria = new Criteria(); criteria.andOperator(Criteria.where("age").gt(18), Criteria.where("name").is("hushang")); Query query4 = new Query(criteria); List
result = mongoTemplate.find(query4, Employee.class); System.out.println(result); log.info("排序查询"); Query query5 = new Query(); query5.with(Sort.by(Sort.Order.desc("age"))); log.info("分页查询"); Query query6 = new Query(); query6.with(Sort.by(Sort.Order.desc("age"))) .skip(1) .limit(2);}

更新文档

@Testpublic void testUpdate() {    Query query = new Query(Criteria.where("username").is("hushang"));    List
employees = mongoTemplate.find(query, Employee.class); System.out.println("更新前:" + employees); Update update = new Update(); update.set("age", 18); // 更新所有匹配的记录 UpdateResult updateResult = mongoTemplate.updateMulti(query, update, Employee.class); System.out.println("更新结果:" + updateResult);}

删除文档

@Testpublic void testDelete() {    // 删除所有文档    mongoTemplate.remove(new Query(), Employee.class);    // 条件删除    Query query = new Query(Criteria.where("age").gte(45));    mongoTemplate.remove(query, Employee.class);}

小技巧:去掉 _class 属性

MongoConfig 中定义自定义映射:

@Configurationpublic class TulingMongoConfig {    @Bean    public MappingMongoConverter mappingMongoConverter(            MongoDatabaseFactory mongoDatabaseFactory,            MongoMappingContext context,            MongoCustomConversions conversions) {        DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDatabaseFactory);        MappingMongoConverter mappingMongoConverter = new MappingMongoConverter(dbRefResolver, context);        mappingMongoConverter.setCustomConversions(conversions);        mappingMongoConverter.setTypeMapper(new DefaultMongoTypeMapper(null));        return mappingMongoConverter;    }}
上一篇:MongoDB整理笔记の增加节点
下一篇:MongoDB数据的导入与导出

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年05月18日 19时38分09秒