开源比MyBatis效率快100倍的条件检索引擎,天生支持联
一、开源项目简介
比MyBatis效率快100倍的条件检索引擎,天生支持联表,使一行代码实现复杂列表检索成为可能!二、开源协议
使用Apache2。0开源协议三、界面展示
你的产品给你画了以上一张图,还附带了一些要求:检索结果分页展示可以按任意字段排序按检索条件统计某些字段值
这时候,后台接口该怎么写???使用Mybatis或Hibernate写100行代码是不是还打不住?而使用BeanSearcher,只需一行代码便可实现上述要求!!!四、功能概述特性支持实体多表映射支持动态字段运算符支持分组聚合查询支持SelectWhereFrom子查询支持实体类嵌入参数支持字段转换器支持Sql拦截器支持数据库Dialect扩展支持多数据源与动态数据源支持注解缺省与自定义支持字段运算符扩展等等快速开发
使用BeanSearcher可以极大节省后端的复杂列表检索接口的开发时间集成简单
可以和任意JavaWeb框架集成,如:SpringBoot、Grails、Jfinal等扩展性强
面向接口设计,用户可自定义扩展BeanSearcher中的任何组件支持注解缺省
约定优于配置,可省略注解,可复用原有域类,同时支持自定义注解支持多数据源
分库分表?在这里特别简单,告别分库分表带来的代码熵值增高问题支持Select指定字段
同一个实体类,可指定只Select其中的某些字段,或排除某些字段支持参数过滤器
支持添加多个参数过滤器,可自定义参数过滤规则支持字段转换器
支持添加多个字段转换器,可自定义数据库字段到实体类字段的转换规则支持SQL拦截器
支持添加多个SQL拦截器,可自定义SQL生成规则五、技术选型框架目的:只一行代码实现:多表联查分页搜索任意字段组合过滤任意字段排序多字段统计架构图:
为什么用这绝不是一个重复的轮子
虽然增删改是hibernate和mybatis、datajdbc等等ORM的强项,但查询,特别是有多条件、联表、分页、排序的复杂的列表查询,却一直是它们的弱项。
传统的ORM很难用较少的代码实现一个复杂的列表检索,但BeanSearcher却在这方面下足了功夫,这些复杂的查询,几乎只用一行代码便可以解决。例如,这样的一个典型的需求:
后端需要写一个检索接口,而如果用传统的ORM来写,代码之复杂是可以想象的。
而BeanSearcher却可以:只一行代码实现以上功能
首先,你有一个实体类:SearchBean(tablesuseru,roler,joinCondu。roleidr。id,autoMapTou)publicclassUser{privatelongid;privateStringusername;privateintstatus;privateintage;privateStringgender;privateDatejoinDate;privateintroleId;DbField(r。name)privateStringroleName;Gettersandsetters。。。}
然后你就可以用一行代码实现这个用户检索接口:RestControllerRequestMapping(user)publicclassUserController{AutowiredprivateBeanSearcherbeanSearcher;注入BeanSearcher的检索器GetMapping(index)publicSearchResultUserindex(HttpServletRequestrequest){这里只写一行代码returnbeanSearcher。search(User。class,MapUtils。flat(request。getParameterMap()),newString〔〕{age});}}
这一行代码实现了以下功能:多表联查分页搜索组合过滤任意字段排序字段统计
例如,该接口支持如下请求:GET:userindex无参请求(默认分页):{dataList:〔{id:1,username:Jack,status:1,level:1,age:25,gender:Male,joinDate:20211001},。。。默认返回15条数据〕,totalCount:100,summaries:〔2500age字段统计〕}GET:userindex?page1size10指定分页参数GET:userindex?status1返回status1的用户GET:userindex?nameJacnameopsw返回name已Jac开头的用户GET:userindex?nameJacknameictrue返回nameJack(忽略大小写)的用户GET:userindex?sortageorderdesc按字段age降序查询GET:userindex?onlySelectusername,age只检索username与age两个字段:{dataList:〔{username:Jack,age:25},。。。〕,totalCount:100,summaries:〔2500〕}GET:userindex?selectExcludejoinDate检索时排除joinDate字段参数构建器MapString,ObjectparamsMapUtils。builder()。selectExclude(User::getJoinDate)排除joinDate字段。field(User::getStatus,1)过滤:status1。field(User::getName,Jack)。ic()过滤:nameJack(caseignored)。field(User::getAge,20,30)。op(Opetator。Between)过滤:agebetween20and30。orderBy(User::getAge,asc)排序:年龄,从小到大。page(0,15)分页:第0页,每页15条。build();ListUserusersbeanSearcher。searchList(User。class,params);
快速开发
使用BeanSearcher可以极大地节省后端的复杂列表检索接口的开发时间!普通的复杂列表查询只需一行代码单表检索可复用原有Domain,无需定义SearchBean集成简单
可以和任意JavaWeb框架集成,如:SpringBoot、SpringMVC、Grails、Jfinal等等。SpringBoot项目,添加依赖即集成完毕:implementationcom。ejlchina:beansearcherbootstater:3。6。0
接着便可在Controller或Service里注入检索器:注入Map检索器,它检索出来的数据以Map对象呈现AutowiredprivateMapSearchermapSearcher;注入Bean检索器,它检索出来的数据以泛型对象呈现AutowiredprivateBeanSearcherbeanSearcher;其它框架,使用如下依赖:implementationcom。ejlchina:beansearcher:3。6。0
然后可以使用SearcherBuilder构建一个检索器:DataSourcedataSource。。。拿到应用的数据源DefaultSqlExecutor也支持多数据源SqlExecutorsqlExecutornewDefaultSqlExecutor(dataSource);构建Map检索器MapSearchermapSearcherSearcherBuilder。mapSearcher()。sqlExecutor(sqlExecutor)。build();构建Bean检索器BeanSearcherbeanSearcherSearcherBuilder。beanSearcher()。sqlExecutor(sqlExecutor)。build();扩展性强
面向接口设计,用户可自定义扩展BeanSearcher中的任何组件!
比如你可以:自定义FieldOp来支持更多的字段运算符自定义FieldConvertor来支持任意的特殊字段类型自定义DbMapping来实现自定义注解,或让BeanSearcher识别其它ORM的注解自定义ParamResolver来支持其它形式的检索参数自定义Dialect来支持更多的数据库等等。。六、源码地址
访问一飞开源:https:code。exmay。com
瓜帅不管我在哪里,只要巴萨给我打电话我都会回去瓜迪奥拉和阿尔特塔将互相碰撞,这对师傅和徒弟将在英格兰足总杯中相遇,这看起来是比赛中的精彩对决之一。两位教练都举行了礼节性的新闻发布会,都提到了对方。但在瓜迪奥拉接受采访……
浅谈我做网络直播的日子现在很多人在喊网络直播赚钱,那它到底赚钱吗?因为疫情,我闲着无事,约了几个兄弟在一起喝酒聊天,其中的一个兄弟手里有一套直播器材,原打算是给孩子直播游戏用的,结果,孩子不肯……
范志毅携小17岁娇妻罕见现身!妻子穿着粉嫩很年轻,老范却很苍头条创作挑战赛每年大年初二是足坛名宿徐根宝的生日,每年根宝基地走出的球员都会前往徐根宝家中拜年并为恩师庆生,而今年是徐根宝的80岁生日,大部分弟子也都纷纷前来祝贺,张琳芃更是一……
区块链能解决什么问题本文我们提到区块链技术是指搭建政府及企业应用的联盟链技术(只针对某个特定群体的成员和有限的第三方,其内部指定多个预选节点为记账人,每个块的生成由所有的预选节点共同决定)。在国家……
雷公可以回家了!网友手绘长津湖后续,主演胡军看了都说暖国庆假期已过半,而国庆档电影票冠也基本可以确定了。《长津湖》以绝对优势占领票房日冠,且票房日益飙升,上映5天后,直接跻身进内地年底票房榜第三,仅次于《你好,李焕英》和《唐……
第四方支付,犯罪边界在哪里第四方支付,又可称之为融合支付或一码支付,是一种通过技术手段将银行、第三方支付等多种支付服务方式融合为一体的综合性支付服务,常见的聚合支付产品有聚合扫码、智能POS、扫码枪、扫……
艾滋病人武汉人,是谁藏在谷歌翻译背后作死?11月26日,谷歌翻译部分搜索结果被恶意篡改,呈现辱华字样。把艾滋病人翻译成武汉人,其他艾滋病相关词汇的翻译则更加过分,不得不打码展示。讽刺的是,这是一家自诩不作恶……
董明珠的接班人孟羽童直播带货真验了李国庆的神预言1hr最近,被董明珠亲自点名为接班人的女秘书孟羽童,已经在抖音开始直播带货了。她带货账号的名字叫明珠羽童精选,头像为董明珠与孟羽童的合照,账号认证为格力电子商务有限公司,……
金铲铲之战离子剑姬成为版本答案!千分王者顶级理解Hello大家好,我是小嗨。小嗨攻略组现在增加了一位来自金铲铲之战《时空裂痕》王者战神。今天就让战神给大家带来克制当前版本护卫北地游侠的阵容金色神将2。0阵容推荐阵……
马赛球迷心碎,法国球迷急眼,欧冠三连冠主帅被姆巴佩说服了法甲冠军巴黎圣日耳曼的主帅位置竟然成为了一块烫手的山芋,足球总监坎波斯正式上任,几乎就宣告了波切蒂诺在巴黎王子公园球场已经没有了未来!波切蒂诺从热刺离职后拿起了大巴黎的教鞭,本……
从未低头认错的女人小组博物馆如果你老婆在你面前从来都没有低过一次头认过一次错,今天你一定不能错过这段话你们说一点掏心窝子的实话,这种从来都不愿意低头认错的女人,她不是自尊心强,也不是……
开水也有保质期?只能存放16小时?保存不当小心喝下毒水在生活中,很多人都习惯将白开水晾凉后再饮用,但晾好的白开水能放多久呢?有保质期吗?最近网上就有一种说法:烧开的白开水只能存放16小时!这是真的吗?白开水也有保质期?……