MongoPlus 教程

张开发
2026/4/20 1:51:41 15 分钟阅读

分享文章

MongoPlus 教程
一、MongoPlus 简介MongoPlus是一个基于 MyBatis-Plus 思想设计的 MongoDB ORM 框架提供了类似 MyBatis-Plus 的便捷操作体验。⚠️注意MyBatis-Plus 本身是针对关系型数据库MySQL、PostgreSQL等的增强工具并不支持 MongoDB。操作 MongoDB 需要使用专门的框架如MongoPlus国产仿 MyBatis-Plus 风格Spring Data MongoDB官方推荐Morphia二、MongoPlus 快速上手1. 添加依赖dependency groupIdcom.gitee.anwena/groupId artifactIdmongo-plus-boot-starter/artifactId version1.0.4/version /dependency2. 配置 application.ymlspring: data: mongodb: uri: mongodb://localhost:27017/testdb # 或使用以下配置 host: localhost port: 27017 database: testdb username: admin password: 1234563. 实体类定义import com.gitee.anwena.mongo.plus.annotation.*; Data CollectionName(users) // 指定集合名 public class User { MongoId(IdTypeEnum.ASSIGN_ID) // 自动生成ID private String id; MongoIndex // 普通索引 MongoField(user_name) // 字段映射 private String username; MongoIndex(type IndexTypeEnum.DESC) // 降序索引 private Integer age; MongoField private String email; MongoField private LocalDateTime createTime; }4. Mapper 接口import com.gitee.anwena.mongo.plus.core.MongoMapper; Repository public interface UserMapper extends MongoMapperUser { // 继承 MongoMapper 即可获得基础CRUD方法 }5. Service 层使用Service public class UserService { Autowired private UserMapper userMapper; // 插入 public void insertUser() { User user new User(); user.setUsername(张三); user.setAge(25); user.setEmail(zhangsanexample.com); user.setCreateTime(LocalDateTime.now()); userMapper.insert(user); System.out.println(插入ID: user.getId()); } // 查询所有 public ListUser getAllUsers() { return userMapper.selectList(new QueryWrapper()); } // 条件查询 public ListUser getUsersByAge(Integer age) { QueryWrapperUser wrapper new QueryWrapper(); wrapper.eq(age, age); return userMapper.selectList(wrapper); } // 分页查询 public PageUser getUsersByPage(int pageNum, int pageSize) { PageUser page new Page(pageNum, pageSize); return userMapper.selectPage(page, new QueryWrapper()); } // 更新 public void updateUser(String id, Integer newAge) { UpdateWrapperUser wrapper new UpdateWrapper(); wrapper.eq(_id, id); wrapper.set(age, newAge); userMapper.update(null, wrapper); } // 删除 public void deleteUser(String id) { QueryWrapperUser wrapper new QueryWrapper(); wrapper.eq(_id, id); userMapper.delete(wrapper); } }三、Spring Data MongoDB 官方方案更推荐由于 MongoPlus 文档较少实际生产中更常用Spring Data MongoDB1. 依赖配置dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-mongodb/artifactId /dependency2. 实体类import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; Data Document(collection users) // 指定集合 public class User { Id private String id; Indexed(unique true) // 唯一索引 Field(user_name) private String username; private Integer age; private String email; private Date createTime; }3. Repository 接口import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; public interface UserRepository extends MongoRepositoryUser, String { // 根据年龄查询 ListUser findByAge(Integer age); // 年龄大于指定值 ListUser findByAgeGreaterThan(Integer age); // 模糊查询 ListUser findByUsernameLike(String username); // 复杂查询使用JSON Query({ age : { $gt: ?0 }, username : { $regex: ?1 } }) ListUser findUsersByCondition(Integer minAge, String usernamePattern); }4. Service 使用Service public class UserService { Autowired private UserRepository userRepository; Autowired private MongoTemplate mongoTemplate; // 更灵活的查询 // 基础CRUD public User save(User user) { user.setCreateTime(new Date()); return userRepository.save(user); } public ListUser findAll() { return userRepository.findAll(); } public OptionalUser findById(String id) { return userRepository.findById(id); } public void deleteById(String id) { userRepository.deleteById(id); } // 使用 MongoTemplate 进行复杂操作 public ListUser findByAgeRange(Integer minAge, Integer maxAge) { Query query new Query(Criteria.where(age).gte(minAge).lte(maxAge)); return mongoTemplate.find(query, User.class); } // 聚合查询 public ListUserStats getUserStats() { Aggregation aggregation Aggregation.newAggregation( Aggregation.group(age).count().as(count), Aggregation.sort(Sort.Direction.DESC, count) ); return mongoTemplate.aggregate(aggregation, users, UserStats.class) .getMappedResults(); } }5. 常用查询条件// 等值查询 Criteria.where(age).is(25) // 范围查询 Criteria.where(age).gte(18).lte(30) // 模糊查询 Criteria.where(username).regex(张.*) // IN 查询 Criteria.where(age).in(Arrays.asList(20, 25, 30)) // 逻辑组合 Criteria.where(age).gt(18).and(username).exists(true) // OR 条件 Criteria.orOperator( Criteria.where(age).lt(18), Criteria.where(age).gt(60) )四、两者对比特性MongoPlusSpring Data MongoDB风格类 MyBatis-PlusSpring 官方风格文档较少完善社区活跃度较低非常高学习成本低MP用户友好中等生产环境验证较少广泛使用功能完整性基础功能全面包括聚合、GridFS等五、推荐方案个人项目/快速原型可以使用 MongoPlus企业级生产项目强烈推荐使用Spring Data MongoDB高性能复杂查询直接使用 MongoDB Driver 自定义封装六、完整示例项目结构src/ ├── main/ │ ├── java/ │ │ └── com/example/mongodemo/ │ │ ├── entity/User.java │ │ ├── repository/UserRepository.java │ │ ├── service/UserService.java │ │ ├── controller/UserController.java │ │ └── MongodemoApplication.java │ └── resources/ │ └── application.yml

更多文章