比MyBatis快100倍,天生支持联表!
程序员的成长之路
共 4921字,需浏览 10分钟
·
2022-05-15 16:49
阅读本文大概需要 5 分钟。
来自:https://c1n.cn/my8R6
简介
开源协议
界面展示
如下图:
检索结果分页展示
可以按任意字段排序
按检索条件统计某些字段值
功能概述
特性如下:
支持实体多表映射
支持动态字段运算符
支持分组聚合、查询
支持Select | Where | From 子查询
支持实体类嵌入参数
支持字段转换器
支持 Sql 拦截器
支持数据库 Dialect 扩展
支持多数据源与动态数据源
支持注解缺省与自定义
支持字段运算符扩展
等等
| 快速开发
使用 Bean Searcher 可以极大节省后端的复杂列表检索接口的开发时间。
| 集成简单
| 扩展性强
| 支持注解缺省
| 支持多数据源
| 支持 Select 指定字段
| 支持参数过滤器
| 支持字段转换器
| 支持 SQL 拦截器
技术选型
@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 SearchResultindex(HttpServletRequest request) {
// 这里只写一行代码
return beanSearcher.search(User.class, MapUtils.flat(request.getParameterMap()), new String[]{ "age" });
}
}
多表联查
分页搜索
组合过滤
任意字段排序
字段统计
{
"dataList": [
{
"id": 1,
"username": "Jack",
"status": 1,
"level": 1,
"age": 25,
"gender": "Male",
"joinDate": "2021-10-01"
},
... // 默认返回 15 条数据
],
"totalCount": 100,
"summaries": [
2500 // age 字段统计
]
}
{
"dataList": [
{
"username": "Jack",
"age": 25
},
...
],
"totalCount": 100,
"summaries": [
2500
]
}
| 参数构建器
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();
Listusers = beanSearcher.searchList(User.class, params);
| 快速开发
普通的复杂列表查询只需一行代码
单表检索可复用原有 Domain,无需定义 SearchBean
| 集成简单
SpringBoot 项目,添加依赖即集成完毕:
implementation 'com.ejlchina:bean-searcher-boot-stater:3.6.0'
/**
* 注入 Map 检索器,它检索出来的数据以 Map 对象呈现
*/
@Autowired
private MapSearcher mapSearcher;
/**
* 注入 Bean 检索器,它检索出来的数据以 泛型 对象呈现
*/
@Autowired
private BeanSearcher beanSearcher;
其他框架,使用如下依赖:
implementation 'com.ejlchina:bean-searcher:3.6.0'
DataSource dataSource = ... // 拿到应用的数据源
// DefaultSqlExecutor 也支持多数据源
SqlExecutor sqlExecutor = new DefaultSqlExecutor(dataSource);
// 构建 Map 检索器
MapSearcher mapSearcher = SearcherBuilder.mapSearcher()
.sqlExecutor(sqlExecutor)
.build();
// 构建 Bean 检索器
BeanSearcher beanSearcher = SearcherBuilder.beanSearcher()
.sqlExecutor(sqlExecutor)
.build();
| 扩展性强
自定义 FieldOp 来支持更多的字段运算符
自定义 FieldConvertor 来支持任意的 特殊字段类型
自定义 DbMapping 来实现自定义注解,或让 Bean Searcher 识别其它 ORM 的注解
自定义 ParamResolver 来支持其它形式的检索参数
自定义 Dialect 来支持更多的数据库
等等..
源码地址
Gitee:https://gitee.com/ejlchina-zhxu/bean-searcher
GitHub:https://github.com/ejlchina/bean-searcher
这些SpringBoot天生自带Buff工具类你都用过哪些?
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取! 朕已阅
评论