比MyBatis快100倍,天生支持聯(lián)表!
閱讀本文大概需要 5 分鐘。
來自:https://c1n.cn/my8R6
簡介

開源協(xié)議
界面展示
如下圖:

檢索結(jié)果分頁展示
可以按任意字段排序
按檢索條件統(tǒng)計某些字段值
功能概述
特性如下:
支持實體多表映射
支持動態(tài)字段運算符
支持分組聚合、查詢
支持Select | Where | From 子查詢
支持實體類嵌入?yún)?shù)
支持字段轉(zhuǎn)換器
支持?Sql 攔截器
支持?jǐn)?shù)據(jù)庫 Dialect 擴展
支持多數(shù)據(jù)源與動態(tài)數(shù)據(jù)源
支持注解缺省與自定義
支持字段運算符擴展
等等
| 快速開發(fā)
使用 Bean Searcher 可以極大節(jié)省后端的復(fù)雜列表檢索接口的開發(fā)時間。
| 集成簡單
| 擴展性強
| 支持注解缺省
| 支持多數(shù)據(jù)源
| 支持 Select 指定字段
| 支持參數(shù)過濾器
| 支持字段轉(zhuǎn)換器
| 支持 SQL 攔截器
技術(shù)選型


@SearchBean(tables="user?u,?role?r",?joinCond="u.role_id?=?r.id",?autoMapTo="u")
public?class?User?{
??private?long?id;
??private?String?username;
??private?int?status;
??private?int?age;
??private?String?gender;
??private?Date?joinDate;
??private?int?roleId;
??@DbField("r.name")
??private?String?roleName;
??//?Getters?and?setters...
}
@RestController
@RequestMapping("/user")
public?class?UserController?{
????@Autowired
????private?BeanSearcher?beanSearcher;?//?注入?BeanSearcher?的檢索器
????@GetMapping("/index")
????public?SearchResult?index(HttpServletRequest?request)?{
????????//?這里只寫一行代碼
????????return?beanSearcher.search(User.class,?MapUtils.flat(request.getParameterMap()),?new?String[]{?"age"?});
????}
}
多表聯(lián)查
分頁搜索
組合過濾
任意字段排序
字段統(tǒng)計
{
??"dataList":?[
????{
??????"id":?1,
??????"username":?"Jack",
??????"status":?1,
??????"level":?1,
??????"age":?25,
??????"gender":?"Male",
??????"joinDate":?"2021-10-01"
????},
????...?????//?默認(rèn)返回?15?條數(shù)據(jù)
??],
??"totalCount":?100,
??"summaries":?[
????2500????//?age?字段統(tǒng)計
??]
}
{
??"dataList":?[
????{
??????"username":?"Jack",
??????"age":?25
????},
????...
??],
??"totalCount":?100,
??"summaries":?[
????2500
??]
}
| 參數(shù)構(gòu)建器
Map ?params?=?MapUtils.builder()
????????.selectExclude(User::getJoinDate)?????????????????//?排除?joinDate?字段
????????.field(User::getStatus,?1)????????????????????????//?過濾:status = 1
????????.field(User::getName,?"Jack").ic()????????????????//?過濾:name =?'Jack'?(case ignored)
????????.field(User::getAge,?20,?30).op(Opetator.Between)?//?過濾:age between 20 and 30
????????.orderBy(User::getAge,?"asc")?????????????????????//?排序:年齡,從小到大
????????.page(0,?15)??????????????????????????????????????//?分頁:第?0?頁, 每頁 15 條
????????.build();
List?users?=?beanSearcher.searchList(User.class,?params);
| 快速開發(fā)
普通的復(fù)雜列表查詢只需一行代碼
單表檢索可復(fù)用原有?Domain,無需定義?SearchBean
| 集成簡單
SpringBoot 項目,添加依賴即集成完畢:
implementation?'com.ejlchina:bean-searcher-boot-stater:3.6.0'
/**
?*?注入?Map?檢索器,它檢索出來的數(shù)據(jù)以?Map?對象呈現(xiàn)
?*/
@Autowired
private?MapSearcher?mapSearcher;
/**
?*?注入?Bean?檢索器,它檢索出來的數(shù)據(jù)以?泛型?對象呈現(xiàn)
?*/
@Autowired
private?BeanSearcher?beanSearcher;
其他框架,使用如下依賴:
implementation?'com.ejlchina:bean-searcher:3.6.0'
DataSource?dataSource?=?...?????//?拿到應(yīng)用的數(shù)據(jù)源
//?DefaultSqlExecutor?也支持多數(shù)據(jù)源
SqlExecutor?sqlExecutor?=?new?DefaultSqlExecutor(dataSource);
//?構(gòu)建?Map?檢索器
MapSearcher?mapSearcher?=?SearcherBuilder.mapSearcher()
????????.sqlExecutor(sqlExecutor)
????????.build();
//?構(gòu)建?Bean?檢索器
BeanSearcher?beanSearcher?=?SearcherBuilder.beanSearcher()
????????.sqlExecutor(sqlExecutor)
????????.build();
| 擴展性強
自定義?FieldOp?來支持更多的字段運算符
自定義?FieldConvertor?來支持任意的 特殊字段類型
自定義?DbMapping?來實現(xiàn)自定義注解,或讓 Bean Searcher 識別其它 ORM 的注解
自定義?ParamResolver?來支持其它形式的檢索參數(shù)
自定義?Dialect?來支持更多的數(shù)據(jù)庫
等等..
源碼地址
Gitee:https://gitee.com/ejlchina-zhxu/bean-searcher
GitHub:https://github.com/ejlchina/bean-searcher
這些SpringBoot天生自帶Buff工具類你都用過哪些?
內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper......等技術(shù)棧!
?戳閱讀原文領(lǐng)取!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??朕已閱?

