比MyBatis快100倍的条件搜索引擎,天然支持联表,一行代码实现复杂列表检索成为可能!2.开源协议使用Apache-2.0开源协议。3.在界面上展示您的产品。上图是给大家画的,附上一些要求:搜索结果可以分页显示,按任意字段排序,某些字段的值按搜索条件统计。这个时候,后台接口应该怎么写呢???用Mybatis或者Hibernate写100行代码是不可能的?使用BeanSearcher,只需一行代码即可实现上述需求!!!4功能概览支持实体多表映射支持动态字段运算符支持分组聚合查询支持选择|在哪里|从子查询支持实体类嵌入参数支持字段转换器支持Sql拦截器支持数据库方言扩展支持多数据源和动态数据源支持注解默认和自定义支持字段运算符扩展等快速开发使用BeanSearcher可以大大节省开发时间后端复杂列表检索接口简单集成可与任何JavaWeb框架集成,如:SpringBoot、Grails、Jfinal等扩展性强面向接口的设计,用户可以自定义扩展BeanSearcher中的任何组件支持注解默认约定优于配置,可以省略注解,可以复用原有领域类,支持自定义注解支持多数据源分库分表?到这里就很简单了,告别分库分表带来的代码熵增加的问题。支持选择指定同一实体类的字段。Select中可以只指定部分字段,也可以排除部分字段。支持参数过滤器,支持添加多个参数过滤器,可以自定义参数过滤规则支持字段转换器支持添加多个字段转换器,可以自定义数据库字段到实体类字段的转换规则支持SQL拦截器支持添加多个SQL拦截器,可以自定义SQLGenerationrule5技术选型框架目的:仅一行代码实现:多表联合查询分页搜索任意字段组合Filter任意字段sortdata-jdbc等ORM强,但查询,尤其是多表复杂列表查询条件、联表、分页、排序,一直是他们的弱项。传统的ORM很难用更少的代码实现复杂的列表检索,但是BeanSearcher在这方面下了功夫。这些复杂的查询几乎可以用一行代码来解决。比如这样一个典型的需求:后端需要写一个检索接口,如果用传统的ORM来写,代码的复杂度可想而知。但是BeanSearcher可以:只需要一行代码就可以实现以上功能首先,你有一个实体类:@SearchBean(tables="useru,roler",joinCnotallow="u.role_id=r.id",autoMapTo="u")publicclassUser{privatelongid;私有字符串用户名;私有状态;私人年龄;私有字符串性别;私人日期加入日期;私有introleId;@DbField("r.name")privateStringroleName;//gettersandsetters...}那么你就可以用一行代码实现这个用户检索接口:@RestController@RequestMapping("/user")publicclassUserController{@AutowiredprivateBeanSearcherbeanSearcher;//注入BeanSearcher的检索器@GetMapping("/index")publicSearchResultindex(HttpServletRequestrequest){//这里只写一行代码returnbeanSearcher.search(User.class,MapUtils.flat(request.getParameterMap()),新字符串[]{"年龄"});}}这行代码实现了如下功能:多表联合查询分页搜索组合过滤任意字段排序字段统计例如该接口支持如下请求:GET:/user/index无参数请求(默认分页):{“dataList”:[{“id”:1,“用户名”:“杰克”,"status":1,"level":1,"age":25,"gender":"Male","joinDate":"2021-10-01"},...//返回15条数据default],"totalCount":100,"summaries":[2500//agefieldstatistics]}GET:/user/index?page=1&size=10指定分页参数GET:/user/index?status=1返回status=1userGET:/user/index?name=Jac&name-op=sw返回名称以JacGET:/user/index?name=Jack&name-ic=true返回name=Jack(忽略大小写)userGET:/user/index?sort=age&order=desc按字段年龄降序查询GET:/user/index?notallow=username,age只检索用户名和年龄两个字段:{"dataList":[{"username":"Jack","age":25},...],"totalCount":100,"summaries":[2500]}获取:/用户/索引?selectExclude=joinDate搜索Builder时排除joinDate字段参数Mapparams=MapUtils.builder().selectExclude(User::getJoinDate)//排除joinDate字段。field(User::getStatus,1)//过滤器:status=1.field(User::getName,"Jack").ic()//过滤器:name='Jack'(忽略大小写).field(User::getAge,20,30).op(Opetator.Between)//过滤器:年龄b20和30之间.orderBy(User::getAge,"asc")//排序:年龄,从小到大。page(0,15)//分页:第0页,每页15个条目。build();Listusers=beanSearcher.searchList(User.class,params);快速开发使用BeanSearcher可以大大节省后端复杂的列表检索接口的开发时间!普通复杂列表查询只需一行代码,单表检索可复用原有Domain,无需定义SearchBean集成简单,可与任何Javaweb框架集成,如:SpringBoot,SpringMVC,Grails,Jfinal,ETC。对于SpringBoot项目,添加依赖后集成完成:implementation'com.ejlchina:bean-searcher-boot-stater:3.6.0'然后就可以在Controller或者Service中注入retriever了:***注入Mapretriever,检索输出数据以Map对象呈现*/@AutowiredprivateMapSearchermapSearcher;/***注入Bean检索器,检索数据以通用对象呈现*/@AutowiredprivateBeanSearcherbeanSearcher;其他框架,使用以下依赖项:implementation'com.ejlchina:bean-searcher:3.6.0'然后你可以使用SearcherBuilder构建一个搜索器:DataSourcedataSource=...//获取应用程序的数据源//DefaultSqlExecutor也支持多数据源SqlExecutorsqlExecutor=newDefaultSqlExecutor(dataSource);//构建一个Map检索器MapSearchermapSearcher=SearcherBuilder.mapSearcher().sqlExecutor(sqlExecutor).build();//构建一个Bean检索器BeanSearcherbeanSearcher=SearcherBuilder.beanSearcher().sqlExecutor(sqlExecutor).build();强大的面向接口设计,用户可以自定义扩展BeanSearcher中的任何组件!例如,你可以:自定义FieldOp支持更多字段操作符自定义FieldConvertor支持任何特殊字段类型自定义DbMapping实现自定义注解,或者让BeanSearcher识别其他ORM注解自定义ParamResolver支持其他形式自定义Dialect搜索参数支持更多数据库等欢迎关注我的公众号:打码的老贾回复“领取”赠送《Java面试》素材,阿里、腾讯、字节、美团、饿了么等各大厂商