mongoHelper 是 spring-data-mongodb 增强工具包,简化 CRUD 操作,提供类 mybatis plus 的数据库操作。
传统关系型数据库及围绕它们构建的 ORM 在项目开发中有很多难用的痛点,而 mongodb 这种文档性数据库的出现,完美的解决了 SQL 数据库在项目开发中的诸多痛点,在 mongodb4.0 以后支持了事务,已经可以完美的用于工程项目。
spring-data-mongodb 已经对 mongodb 的操作做了一部分封装,但依然不够,Query Criteria Sort 的操作依然有比较大的局限性,而且对于习惯 SQL 操作的人来说,理解其使用法则依然稍显别扭。
mongoHelper 对 spring-data-mongodb 又进行了进一步封装,使其更易于使用,并添加了很多易于项目管理的功能。
本项目只适用于springBoot项目,项目也依赖springBoot相关库,springMVC 项目无法使用,另外项目依赖了 hutool 提供的诸多 Util 工具,让代码更简洁。
演示应用项目:https://gitee.com/cym1102/mongoStudy
<dependency> <groupId>cn.craccd</groupId> <artifactId>mongoHelper</artifactId> <version>0.6.2</version> </dependency>
spring: data: mongodb: uri: mongodb://user:pass@host:27017/study?replicaSet=rs0&authSource=admin&w=majority&j=true&wtimeout=5000&readPreference=primary print: true #是否打印查询语句 slowQuery: true #是否记录慢查询到数据库中 slowTime: 1000 #慢查询最短时间,默认为1000毫秒
@Configuration @ComponentScan(basePackages = {"cn.craccd"}) // 必须填写此包路径 public class MongoConfig { // 开启事务(如使用单机mongodb,可不配置此@Bean) @Bean public MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) { return new MongoTransactionManager(dbFactory); } }
在 springBoot 主运行类中加入@EnableTransactionManagement 注解开启事务(如使用单机 mongodb,可不配置此项)
注意:
mongodb 必须在集群配置下才能支持事务,本 ORM 可以在集群mongodb 下使用,也可以在单机 mongodb 下使用,但事务只能在集群下才起作用;
单机下使用事务会报错,mongodb 集群配置请查阅相关文档,如果业务量不大,可以配置一个单一实例集群,同样可支持事务。
springBoot 配置文件 application.yml 中 spring.data.mongodb.uri 如果配置为集群 uri。如:
mongodb://user:pass@host:27017/electric?replicaSet=rs0&authSource=admin&w=majority&j=true&wtimeout=5000&readPreference=primary
本 ORM 会在容器中注入一个对象 MongoHelper,这个对象拥有诸多单表查询功能,如下:
按id删除:deleteById(String, Class<?>)
按条件删除:deleteByQuery(Criteria, Class<?>)
查询所有:findAll(Class)
查询数量:findCount(Class<?>)
根据id查询:findById(String, Class)
根据条件查询:findListByQuery(Criteria, Class<?>)
根据条件查询并分页:findPage(Criteria, Page, Class<?>)
插入:insert(Object)
插入或更新:insertOrUpdate(Object)
根据id更新:updateById(Object)
根据id更新全部字段:updateAllColumnById(Object)
根据条件更新第一项:updateFirst(Criteria, Update, Class<?>)
根据条件更新所有项:updateMulti(Criteria, Update, Class<?>)
累加某一个字段的数量, 原子操作:addCountById(String id, String property, Long count, Class<?> clazz)