时间:2023-04-04 11:41
人气:
作者:admin
比 MyBatis 效率快 100 倍的条件检索引擎,天生支持联表,使一行代码实现复杂列表检索成为可能!
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
- 视频教程:https://doc.iocoder.cn/video/
使用Apache-2.0开源协议
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://github.com/YunaiV/yudao-cloud
- 视频教程:https://doc.iocoder.cn/video/

你的产品给你画了以上一张图,还附带了一些要求:
这时候,后台接口该怎么写???使用 Mybatis 或 Hibernate 写 100 行代码是不是还打不住?而使用 Bean Searcher,只需 一行代码 便可实现上述要求!!!
使用 Bean Searcher 可以极大节省后端的复杂列表检索接口的开发时间
可以和任意 Java Web 框架集成,如:SpringBoot、Grails、Jfinal 等
面向接口设计,用户可自定义扩展 Bean Searcher 中的任何组件
约定优于配置,可省略注解,可复用原有域类,同时支持自定义注解
分库分表?在这里特别简单,告别分库分表带来的代码熵值增高问题
同一个实体类,可指定只 Select 其中的某些字段,或排除某些字段
支持添加多个参数过滤器,可自定义参数过滤规则
支持添加多个字段转换器,可自定义数据库字段到实体类字段的转换规则
支持添加多个 SQL 拦截器,可自定义 SQL 生成规则

这绝不是一个重复的轮子
虽然 增删改 是 hibernate 和 mybatis、data-jdbc 等等 ORM 的强项,但查询,特别是有 多条件、联表、分页、排序 的复杂的列表查询,却一直是它们的弱项。
传统的 ORM 很难用较少的代码实现一个复杂的列表检索,但 Bean Searcher 却在这方面下足了功夫,这些复杂的查询,几乎只用一行代码便可以解决。

后端需要写一个检索接口,而如果用传统的 ORM 来写,代码之复杂是可以想象的。
而 Bean Searcher 却可以:
只一行代码实现以上功能
首先,你有一个实体类:
@SearchBean(tables="useru,roler",joinCond="u.role_id=r.id",autoMapTo="u")
publicclassUser{
privatelongid;
privateStringusername;
privateintstatus;
privateintage;
privateStringgender;
privateDatejoinDate;
privateintroleId;
@DbField("r.name")
privateStringroleName;
//Gettersandsetters...
}
然后你就可以用一行代码实现这个用户检索接口:
@RestController
@RequestMapping("/user")
publicclassUserController{
@Autowired
privateBeanSearcherbeanSearcher;//注入BeanSearcher的检索器
@GetMapping("/index")
publicSearchResultindex(HttpServletRequestrequest) {
//这里只写一行代码
returnbeanSearcher.search(User.class,MapUtils.flat(request.getParameterMap()),newString[]{"age"});
}
}
这一行代码实现了以下功能:
例如,该接口支持如下请求:
Mapparams=MapUtils.builder()
.selectExclude(User::getJoinDate)//排除joinDate字段
.field(User::getStatus,1)//过滤:status=1
.field(User::getName,"Jack").ic()//过滤:name='Jack'(caseignored)
.field(User::getAge,20,30).op(Opetator.Between)//过滤:agebetween20and30
.orderBy(User::getAge,"asc")//排序:年龄,从小到大
.page(0,15)//分页:第0页,每页15条
.build();
Listusers=beanSearcher.searchList(User.class,params);
快速开发
使用 Bean Searcher 可以极大地节省后端的复杂列表检索接口的开发时间!
可以和任意 Java Web 框架集成,如:SpringBoot、Spring MVC、Grails、Jfinal 等等。
Spring Boot 项目,添加依赖即集成完毕:
implementation'com.ejlchina3.6.0'
接着便可在 Controller 或 Service 里注入检索器:
/**
*注入Map检索器,它检索出来的数据以Map对象呈现
*/
@Autowired
privateMapSearchermapSearcher;
/**
*注入Bean检索器,它检索出来的数据以泛型对象呈现
*/
@Autowired
privateBeanSearcherbeanSearcher;
其它框架,使用如下依赖:
implementation'com.ejlchina3.6.0'
然后可以使用 SearcherBuilder 构建一个检索器:
DataSourcedataSource=...//拿到应用的数据源
//DefaultSqlExecutor也支持多数据源
SqlExecutorsqlExecutor=newDefaultSqlExecutor(dataSource);
//构建Map检索器
MapSearchermapSearcher=SearcherBuilder.mapSearcher()
.sqlExecutor(sqlExecutor)
.build();
//构建Bean检索器
BeanSearcherbeanSearcher=SearcherBuilder.beanSearcher()
.sqlExecutor(sqlExecutor)
.build();
面向接口设计,用户可自定义扩展 Bean Searcher 中的任何组件!
比如你可以:
审核编辑 :李倩
上一篇:如何写出整洁的代码