mongoHelper spring-data-mongodb 增强工具包开源项目

我要开发同款
匿名用户2020年02月26日
200阅读

技术信息

开源地址
https://gitee.com/cym1102/mongoHelper
授权协议
Apache

作品详情

sprig-data-mogodb增强工具包,简化CRUD操作,提供类jpa的数据库操作。

传统关系型数据库及围绕它们构建的orm在项目开发中有很多难用的痛点,而mogodb这种文档性数据库的出现,完美地解决了sql数据库在项目开发中的诸多痛点,在mogodb4.0以后支持了事务,已经可以完美地用于工程项目。sprig-data-mogodb已经对mogodb的操作做了一部分封装,但依然不够,QueryCriteriaSort的操作依然有比较大的局限性,而且对于习惯sql操作的人来说,理解其使用法则依然稍显别扭。

mogoHelper对sprig-data-mogodb又进行了进一步封装,使其更易于使用,并添加了很多易于项目管理的功能。

使用说明

1.基本操作

本orm会在容器中注入一个对象MogoHelper,这个对象拥有诸多单表查询功能,如下

按id删除:deleteById(Strig,Class<?>)按条件删除:deleteByQuery(Criteria,Class<?>)查询所有:fidAll(Class)查询数量:fidCout(Class<?>)根据id查询:fidById(Strig,Class)根据条件查询:fidListByQuery(Criteria,Class<?>)根据条件查询并分页:fidPage(Criteria,Page,Class<?>)插入:isert(Object)插入或更新:isertOrUpdate(Object)根据id更新:updateById(Object)根据id更新全部字段:updateAllColumById(Object)根据条件更新第一项:updateFirst(Criteria,Update,Class<?>)根据条件更新所有项:updateMulti(Criteria,Update,Class<?>)累加某一个字段的数量,原子操作:addCoutById(Strigid,Strigproperty,Logcout,Class<?>clazz)这个mogoHelper能够完成所有查询任务,插入和更新操作能够自动判断pojo的类型操作对应表,查询操作根据传入的Class进行对应表操作,本orm所有数据库操作都基于mogoHelper的功能,不用像mybatis一样,每个表都要建立一套Mapper,xml,Service,model,大大减少数据层的代码量。可以将mogoHelper直接注入到cotroller层,简单的操作直接调用mogoHelper进行操作,不需要调用service层。

而复杂的操作及事务处理需要service层,将mogoHelper注入service,并使用service层的@Trasactioal注解就能使用sprigBoot管理的事务功能。本orm能够自动判断当前数据库操作是否处于事务中,处于事务中的话,所有查询和插入操作都会使用primary库偏好。非事务的话,查询优先走SecodaryPreferred库偏好,这样能够充分利用mogodb集群的负载均衡能力,提高数据库性能。

2.复杂查询功能

本orm的查询功能都在MogoHelper的fidByQuery,fidPage方法中,封装条件的对象使用sprig-data-mogodb的Criteria或Query,sprig-data-mogodb的查询对象Criteria封装比较死板且不宜用,不太适合像sql一样根据条件拼接,本orm提供了CriteriaAdWrapper与CriteriaOrWrapper。类似于sql中的ad连接与or连接,能够组装为近似sql的查询条件。

//根据输入条件进行查询publicList<User>search(Strigword,Itegertype){CriteriaAdWrappercriteriaAdWrapper=ewCriteriaAdWrapper();if(StrUtil.isNotEmpty(word)){criteriaAdWrapper.ad(ewCriteriaOrWrapper().like("ame",word).like("phoe",word));}if(type!=ull){criteriaAdWrapper.eq("type",type);}List<User>userList=mogoHelper.fidListByQuery(criteriaAdWrapper,User.class);returuserList;}以上代码组装了类似于select*fromuserwhere(amelike'%xxx%'orphoelike'%xxx%')adtype=xxx的查询语句,简单易懂。当然如果习惯使用Criteria进行查询也可以直接使用Criteria。

3.分页查询,

本orm提供一个Page类,包含cout总记录数,limit每页记录数,curr起始页(从1开始),records结果列表四个属性,只要将包含curr和limit数据的Page对象传入fidPage,即可查询出records,cout的数据并自动返回到Page对象中。这里三个属性参考了layui的分页参数,可直接无缝对接layui的分页控件。

publicPagesearch(Pagepage,Strigword,Itegertype){CriteriaAdWrappercriteriaAdWrapper=ewCriteriaAdWrapper();if(StrUtil.isNotEmpty(word)){criteriaAdWrapper.ad(ewCriteriaOrWrapper().like("ame",word).like("phoe",word));}if(type!=ull){criteriaAdWrapper.eq("type",type);}Sortsort=Sort.by(Directio.DESC,"creatTime");page=mogoHelper.fidPage(criteriaAdWrapper,sort,page,User.class);returpage;}

4.表映射对象

sprig.data.mogodb.package所指向的包下,存放数据库表所对应的pojo类,项目启动时本orm会扫描该包下所有@Documet注解的类并建立相应表、索引、字段默认值,这个@Documet注解是sprig-data-mogodb定义的,另外本项目新增了一个属性注解@IitValue,用于提供字段初始值,和mysql的默认值类似,注意mogodb本身字段是没有默认值的,这里是项目本身用代码实现默认值的功能。如要建立索引,使用@Idexed标记属性建立相应索引,也是sprig-data-mogodb定义的。

@DocumetpublicclassUserextedsBaseModel{@IitValue("0")Itegertype;//类型0客户1经销商@IdexedStrigame;Strigphoe;publicStriggetPhoe(){returphoe;}publicvoidsetPhoe(Strigphoe){this.phoe=phoe;}publicStriggetName(){returame;}publicvoidsetName(Strigame){this.ame=ame;}publicItegergetType(){returtype;}publicvoidsetType(Itegertype){this.type=type;}}另外本orm提供了一个基础model,包含id(用@Id注解),createTime,updateTime三个必备属性,createTime和updateTime在插入和更新时会自动填充时间戳,其他pojo类可继承此BaseModel,简化代码编写。

@DocumetpublicclassBaseModelimplemetsSerializable{@IdStrigid;LogcreateTime;LogupdateTime;publicStriggetId(){returid;}publicvoidsetId(Strigid){this.id=id;}publicLoggetCreateTime(){returcreateTime;}publicvoidsetCreateTime(LogcreateTime){this.createTime=createTime;}publicLoggetUpdateTime(){returupdateTime;}publicvoidsetUpdateTime(LogupdateTime){this.updateTime=updateTime;}}

5.数据库导入导出工具

本orm提供一个数据库导入导出工具ImportExportUtil注入到容器中,拥有exportDb和importDb两个方法,可按照pojo类导入导出相应表结构和数据,可使用定时任务定期备份数据库。

6.打印查询语句

sprig-data-mogodb默认的打印语句方式为修改配置文件loggig.level.root:debug。但这里打印出来的语句基本不可读,也不能像sql一样直接复制出来到数据库中进行执行,处于集群模式下还每隔数秒发送一次检测当前数据库isMaster的命令,很干扰debug。本orm重写了查询语句的打印功能,只要配置sprig.data.mogodb.prit:true就能打印出如下的语句:

db.admi.fid({"$ad":[{"ame":{"$regex":"^.*ad.*$","$optios":"i"}}]}).projectio({"ame":1}).sort({"id":-1});可直接复制到mogodb客户端中进行执行,非常方便调试。

功能介绍

spring-data-mongodb 增强工具包,简化 CRUD 操作,提供类 jpa 的数据库操作。 传统关系型数据库及围绕它们构建的 orm 在项目开发中有很多难用的痛点,而 mongod...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论