这逆天的框架!一行代码竟超越Hibernate、MyBatis等一众框架100倍!
这逆天的框架!一行代码竟超越Hibernate、MyBatis等一众框架100倍!
前言
在后端与数据库交互中,hibernate 和 mybatis、data-jdbc 等等 ORM 是我们经常会选用的技术框架!
这些ORM框架,在增
、删
、改
上都提供了快捷、方便的操作。但是,他们都有一个弱项,那就是查询
的功能!
传统的 ORM 都很难用较少的代码实现一个复杂的列表检索。
今天,我们要分享的是一个专注高级查询的只读 ORM 框架:Bean Searcher
。
Bean Searcher简介
Bean Searcher 绝对不是一个重复的 ORM 轮子。因为从未有过一个功能复杂的检索接口可以简单的只剩一行代码。
Bean Searcher 是一个基于 Java 的只读 ORM 框架,可以一行代码实现复杂的列表检索功能,支持分页、组合过滤、排序、统计、多表联查等。适合开发效率高、性能要求高的项目。
相较于 MyBatis、Hibernate 等传统 ORM,Bean Searcher检索引擎拥有数倍的运行时性能提升。
Bean Searcher特性
- 支持 实体多表映射
- 支持 动态字段运算符
- 支持 分组聚合 查询
- 支持 Select | Where | From 子查询
- 支持 实体类嵌入参数
- 支持 字段转换器
- 支持 Sql
- 支持 数据库 Dialect 扩展
- 支持 多数据源 与 动态数据源
- 支持 注解缺省 与 自定义
- 支持 字段运算符 扩展
- 等等
Bean Searcher 安装和使用
这里举个例子。
你得到这样一个需求,还附带了如下功能:
- 各种复杂条件组合过滤
- 年龄统计(支持多字段统计)
- 任意字段后端排序(点击表头)
- 分页查询功能
- 总条数统计
如果使用 Mybatis 或 Hibernate,这代码至少100+以上了吧!
但使用 Bean Searcher,只需 一行代码便可实现上述要求!!!我们一起来看!
安装
这里选用的是 Maven 构建的方式,在Spring Boot中集成使用。
代码语言:javascript代码运行次数:0运行复制<!-- SpringBoot / Grails 的项目直接使用以下依赖,更为方便(只添加这一个依赖即可) -->
<dependency>
<groupId>cn.zhxu</groupId>
<artifactId>bean-searcher-boot-starter</artifactId>
<version>4..</version>
</dependency>
功能代码实现
重点就一句:searcher.search(xxx)
。不信?请看代码!
@RestController
public class DemoController {
@Autowired
private Searcher searcher;
/**
* 列表检索接口
*/
@GetMapping("/employee/index")
public Object index(HttpServletRequest request) {
// 组合检索、排序、分页 和 统计 都在这一句代码中实现了
return searcher.search(, // 指定实体类
MapUtils.flat(request.getParameterMap()), // 收集页面请求参数
new String[] { "age" }); // 统计字段:年龄
}
}
细心的同学会发现在上述代码里用到一个 Employee
这个类。没错,它就是用来告诉 bean-searcher 如何与数据库字段映射的一个实体类,并且特别重要!
@SearchBean(
tables = "employee e, department d", // 员工表 与 部门表
joinCond = "e.department_id = d.id" // 连接条件
)
public class Employee {
@DbField("e.id")
private Long id;
@DbField("")
private String name;
@DbField("e.age")
private Integer age;
@DbField("")
private String department;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
@DbField("_date")
private Date entryDate;
// Getter and Setter ...
}
功能拆解
就上面这一个接口,就能支持多种查询方式:
- (1)无参请求:GET /employee/index
- (2)分页请求(page | size) GET /employee/index? page=2 & size=10
- ()数据排序(sort | order) GET /employee/index? sort=age & order=desc
- (4)指定(排除)字段(onlySelect | selectExclude) GET /employee/index? onlySelect=id,name GET /employee/index? selectExclude=age
- (5)字段过滤( [field]-op=eq ) GET /employee/index? age=20 GET /employee/index? age=20 & age-op=eq
- (6)字段过滤( [field]-op=ne ) GET /employee/index? age=20 & age-op=ne
- (7)字段过滤( [field]-op=ge ) GET /employee/index? age=20 & age-op=ge
- (8)字段过滤( [field]-op=le ) GET /employee/index? age=20 & age-op=le
- (9)忽略大小写( [field]-ic=true ) GET /employee/index? name=Jack & name-ic=true
另外还有其他各种字段过滤方式,这里就不细说了。大家看文末的官方地址查阅。
小结
使用 Bean Searcher
可以极大地节省后端的复杂列表检索接口的开发时间!普通的复杂列表查询只需一行代码。
单表检索可复用原有 Domain,无需定义 SearchBean。
Bean Searcher
可以和任意 Java Web 框架集成,如:SpringBoot、Spring MVC、Grails、Jfinal 等等。
此外,Bean Searcher
扩展性很强。用户可自定义扩展 Bean Searcher 中的任何组件!你可以:
- 自定义 FieldOp 来支持更多的字段运算符
- 自定义 FieldConvertor 来支持任意的 特殊字段类型
- 自定义 DbMapping 来实现自定义注解,或让 Bean Searcher 识别其它 ORM 的注解
- 自定义 ParamResolver 来支持其它形式的检索参数
- 自定义 Dialect 来支持更多的数据库
- 等等..
上就有自定义的例子,大家可以查阅。
本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2024-10-10,如有侵权请联系 cloudcommunity@tencent 删除统计数据库mybatishibernate框架/
GitHub源码
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 16 条评论) |
本站网友 广东省长 | 18分钟前 发表 |
因为从未有过一个功能复杂的检索接口可以简单的只剩一行代码 | |
本站网友 最新楼盘 | 21分钟前 发表 |
代码语言:javascript代码运行次数:0运行复制<!-- SpringBoot / Grails 的项目直接使用以下依赖 | |
本站网友 金沙江水电开发 | 2分钟前 发表 |
在增 | |
本站网友 透明售房网杭州 | 5分钟前 发表 |
不信?请看代码!代码语言:javascript代码运行次数:0运行复制@RestController public class DemoController { @Autowired private Searcher searcher; /** * 列表检索接口 */ @GetMapping("/employee/index") public Object index(HttpServletRequest request) { // 组合检索 | |
本站网友 眼角去皱纹 | 9分钟前 发表 |
大家看文末的官方地址查阅 | |
本站网友 当天金融 | 19分钟前 发表 |
我们要分享的是一个专注高级查询的只读 ORM 框架:Bean Searcher | |
本站网友 3399 | 5分钟前 发表 |
mm" | |
本站网友 皮肤美白 | 20分钟前 发表 |
Bean Searcher 是一个基于 Java 的只读 ORM 框架 | |
本站网友 长洲未来 | 7分钟前 发表 |
Jfinal 等等 | |
本站网友 零陵二手房 | 12分钟前 发表 |
name GET /employee/index? selectExclude=age(5)字段过滤( [field]-op=eq ) GET /employee/index? age=20 GET /employee/index? age=20 & age-op=eq(6)字段过滤( [field]-op=ne ) GET /employee/index? age=20 & age-op=ne(7)字段过滤( [field]-op=ge ) GET /employee/index? age=20 & age-op=ge(8)字段过滤( [field]-op=le ) GET /employee/index? age=20 & age-op=le(9)忽略大小写( [field]-ic=true ) GET /employee/index? name=Jack & name-ic=true另外还有其他各种字段过滤方式 | |
本站网友 虫草花的功效 | 16分钟前 发表 |
可以一行代码实现复杂的列表检索功能 | |
本站网友 市政基础设施 | 0秒前 发表 |
Bean Searcher检索引擎拥有数倍的运行时性能提升 | |
本站网友 丹麦女孩 | 6分钟前 发表 |
我们要分享的是一个专注高级查询的只读 ORM 框架:Bean Searcher | |
本站网友 海拉尔美食 | 26分钟前 发表 |
更为方便(只添加这一个依赖即可) --> <dependency> <groupId>cn.zhxu</groupId> <artifactId>bean-searcher-boot-starter</artifactId> <version>4..</version> </dependency> 功能代码实现重点就一句 | |
本站网友 本巴恩斯 | 1分钟前 发表 |
如:SpringBoot |