网易首页 > 网易号 > 正文 申请入驻

比MyBatis快100倍的开源ORM框架!

0
分享至

Java精选面试题 (微信小程序): 5000+ 道面试题和选择题, 真实面经 , 简历模版 ,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!
开源项目简介

对于java程序员来说,myBatis、Hibernate等都是常见的 ORM框架,对于一些简单的 CRUD,事务支持非常不错。但是有时候用起来可能比较繁琐,比如接下来我们要聊的话题,比 MyBatis 效率快 100 倍的条件检索引擎,天生支持联表,使一行代码实现复杂列表检索成为可能,绝无夸张之语!

开源协议

使用Apache-2.0开源协议

界面展示

你的产品给你画了以上一张图,还附带了一些要求:

  • 检索结果分页展示

  • 可以按任意字段排序

  • 按检索条件统计某些字段值

这时候,后台接口该怎么写???使用 Mybatis 或 Hibernate 写 100 行代码是不是还打不住?而使用 Bean Searcher,只需 一行代码 便可实现上述要求!!!

功能概述特性

  • 支持 实体多表映射

  • 支持 动态字段运算符

  • 支持 分组聚合 查询

  • 支持 Select | Where | From 子查询

  • 支持 实体类嵌入参数

  • 支持 字段转换器

  • 支持 Sql 拦截器

  • 支持 数据库 Dialect 扩展

  • 支持 多数据源 与 动态数据源

  • 支持 注解缺省 与 自定义

  • 支持 字段运算符 扩展

  • 等等

快速开发使用 Bean Searcher 可以极大节省后端的复杂列表检索接口的开发时间集成简单

可以和任意 Java Web 框架集成,如:SpringBoot、Grails、Jfinal 等

扩展性强

面向接口设计,用户可自定义扩展 Bean Searcher 中的任何组件

支持 注解缺省

约定优于配置,可省略注解,可复用原有域类,同时支持自定义注解

支持 多数据源

分库分表?在这里特别简单,告别分库分表带来的代码熵值增高问题

支持 Select 指定字段

同一个实体类,可指定只 Select 其中的某些字段,或排除某些字段

支持 参数过滤器

支持添加多个参数过滤器,可自定义参数过滤规则

支持 字段转换器

支持添加多个字段转换器,可自定义数据库字段到实体类字段的转换规则

支持 SQL 拦截器

支持添加多个 SQL 拦截器,可自定义 SQL 生成规则

技术选型

  • 框架目的:只一行代码实现:多表联查分页搜索任意字段组合过滤任意字段排序多字段统计

  • 架构图:

为什么用?

这绝不是一个重复的轮子

虽然 增删改 是 hibernate 和 mybatis、data-jdbc 等等 ORM 的强项,但查询,特别是有 多条件、联表、分页、排序 的复杂的列表查询,却一直是它们的弱项。

传统的 ORM 很难用较少的代码实现一个复杂的列表检索,但 Bean Searcher 却在这方面下足了功夫,这些复杂的查询,几乎只用一行代码便可以解决。

  • 例如,这样的一个典型的需求:


后端需要写一个检索接口,而如果用传统的ORM来写,代码之复杂是可以想象的。

而 Bean Searcher 却可以:

只一行代码实现以上功能

首先,你有一个实体类:

@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" });     }    }

这一行代码实现了以下功能:

  • 多表联查

  • 分页搜索

  • 组合过滤

  • 任意字段排序

  • 字段统计

  • 面试宝典: https://www.yoodb.com/

例如,该接口支持如下请求:

  • GET: /user/index

  • 无参请求(默认分页):

  • { "dataList": [ { "id": 1, "username": "Jack", "status": 1, "level": 1, "age": 25, "gender": "Male", "joinDate": "2021-10-01" }, ... // 默认返回 15 条数据 ], "totalCount": 100, "summaries": [ 2500 // age 字段统计 ] }

  • GET: /user/index? page=1 & size=10

  • 指定分页参数

  • GET: /user/index? status=1

  • 返回 status = 1 的用户

  • GET: /user/index? name=Jac & name-op=sw

  • 返回 name 已 Jac 开头的用户

  • GET: /user/index? name=Jack & name-ic=true

  • 返回 name = Jack(忽略大小写)的用户

  • GET: /user/index? sort=age & order=desc

  • 按字段 age 降序查询

  • GET: /user/index? onlySelect=username,age

  • 只检索 username 与 age 两个字段:

  • { "dataList": [ { "username": "Jack", "age": 25 }, ... ], "totalCount": 100, "summaries": [ 2500 ] }

  • GET: /user/index? selectExclude=joinDate

  • 检索时排除 joinDate 字段

参数构建器

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);

快速开发

使用 Bean Searcher 可以极大地节省后端的复杂列表检索接口的开发时间!

  • 普通的复杂列表查询只需一行代码

  • 单表检索可复用原有 Domain,无需定义 SearchBean


集成简单

可以和任意 Java Web 框架集成,如:SpringBoot、Spring MVC、Grails、Jfinal 等等。更多开源项目:https://www.yoodb.com/projects/springboot-user-manger.html

Spring Boot 项目,添加依赖即集成完毕:

implementation 'com.ejlchina:bean-searcher-boot-stater:3.6.0'

接着便可在 Controller 或 Service 里注入检索器:

/**  * 注入 Map 检索器,它检索出来的数据以 Map 对象呈现  */ @Autowired private MapSearcher mapSearcher; /**  * 注入 Bean 检索器,它检索出来的数据以 泛型 对象呈现  */ @Autowired private BeanSearcher beanSearcher;

其它框架,使用如下依赖:

implementation 'com.ejlchina:bean-searcher:3.6.0'

然后可以使用 SearcherBuilder 构建一个检索器:

DataSource dataSource = ... // 拿到应用的数据源 // DefaultSqlExecutor 也支持多数据源 SqlExecutor sqlExecutor = new DefaultSqlExecutor(dataSource); // 构建 Map 检索器 MapSearcher mapSearcher = SearcherBuilder.mapSearcher()         .sqlExecutor(sqlExecutor)         .build(); // 构建 Bean 检索器 BeanSearcher beanSearcher = SearcherBuilder.beanSearcher()         .sqlExecutor(sqlExecutor)         .build();

扩展性强

面向接口设计,用户可自定义扩展 Bean Searcher 中的任何组件!

比如你可以:

  • 自定义 FieldOp 来支持更多的字段运算符

  • 自定义 FieldConvertor 来支持任意的 特殊字段类型

  • 自定义 DbMapping 来实现自定义注解,或让 Bean Searcher 识别其它 ORM 的注解

  • 自定义 ParamResolver 来支持其它形式的检索参数

  • 自定义 Dialect 来支持更多的数据库

  • 等等..

源码地址
  • Gitee:https://gitee.com/ejlchina-zhxu/bean-searcher

  • GitHub:https://github.com/ejlchina/bean-searcher

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

最近有很多人问,有没有技术或摸鱼交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!在线摸鱼:https://www.yoodb.com/

Java精选面试题(微信小程序):3000+道面试题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计等,在线随时刷题!

特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,「大咖笔记」,专注挖掘好东西,非常值得大家关注。点击下方公众号卡片关注

文章有帮助的话,点在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
前湖人中锋炮轰詹姆斯:难进历史前十,国王错失三大巨星!

前湖人中锋炮轰詹姆斯:难进历史前十,国王错失三大巨星!

舞指如飞
2026-05-03 19:02:14
宣布独立,中国未承认的有哪些?

宣布独立,中国未承认的有哪些?

地图帝
2026-05-02 12:07:52
一位亲子鉴定师的自述:我从业10年,给上千个男人检测出了绿帽子

一位亲子鉴定师的自述:我从业10年,给上千个男人检测出了绿帽子

千秋文化
2026-05-02 19:48:10
张雪峰的财产争夺战开始了!

张雪峰的财产争夺战开始了!

八卦疯叔
2026-04-29 11:08:54
追觅俞浩晒模块化手机:不仅镜头能拆 机身都能拆

追觅俞浩晒模块化手机:不仅镜头能拆 机身都能拆

快科技
2026-05-02 08:06:06
日本媒体惊呼:中国电动两轮车横扫越南,让本田措手不及

日本媒体惊呼:中国电动两轮车横扫越南,让本田措手不及

阿芒娱乐说
2026-05-02 01:54:13
性能超4060 国产自研6nm显卡即将开卖!售多少你买

性能超4060 国产自研6nm显卡即将开卖!售多少你买

3DM游戏
2026-05-03 06:44:06
广东队G3摊牌,杜锋重用3人要打败广州,徐杰被误会,胡明轩起飞

广东队G3摊牌,杜锋重用3人要打败广州,徐杰被误会,胡明轩起飞

阿信点评
2026-05-03 17:48:26
东南亚怎么旅居?反正瞿颖戴军已经提前躺平了

东南亚怎么旅居?反正瞿颖戴军已经提前躺平了

精品购物指南
2026-05-02 18:03:50
老话说“一地菜花蛇,十里无毒蛇”,菜花蛇这么厉害?它能打赢眼镜王蛇吗?

老话说“一地菜花蛇,十里无毒蛇”,菜花蛇这么厉害?它能打赢眼镜王蛇吗?

农夫也疯狂
2026-05-03 16:17:27
被人民日报点名!景区NPC互动被指“擦边”,最新致歉:立即整改!

被人民日报点名!景区NPC互动被指“擦边”,最新致歉:立即整改!

新浪财经
2026-05-03 06:31:32
最后一辆 Model X 下线,车身签满特斯拉员工名字!

最后一辆 Model X 下线,车身签满特斯拉员工名字!

新浪财经
2026-05-03 13:52:00
“足浴店起火事发时,消防控制室无人值班值守,致6人死亡”

“足浴店起火事发时,消防控制室无人值班值守,致6人死亡”

澎湃新闻
2026-05-03 16:03:05
巴拿马彻底傻眼了!抢完港口后,却发现全世界都没人敢接盘

巴拿马彻底傻眼了!抢完港口后,却发现全世界都没人敢接盘

南宗历史
2026-05-03 01:35:25
大量研究表明:阳痿是心梗的前兆!

大量研究表明:阳痿是心梗的前兆!

黯泉
2026-05-02 12:01:45
突然高烧39.7℃!上海七旬阿姨左手像充了气一样肿胀、剧痛!医生:72小时未干预死亡率接近100%

突然高烧39.7℃!上海七旬阿姨左手像充了气一样肿胀、剧痛!医生:72小时未干预死亡率接近100%

新民晚报
2026-05-02 18:26:43
深圳市分区暴雨橙色预警信号扩展

深圳市分区暴雨橙色预警信号扩展

环球网资讯
2026-05-03 16:03:16
夏洛特公主11岁生日,新照长发似男相,尊贵蓝眼彻底消失,太像了

夏洛特公主11岁生日,新照长发似男相,尊贵蓝眼彻底消失,太像了

聪明的橙子hj
2026-05-03 16:45:49
深蹲,被严重低估了!研究提示:每天坚持5分钟,能预防6种疾病

深蹲,被严重低估了!研究提示:每天坚持5分钟,能预防6种疾病

增肌减脂
2026-04-30 19:15:09
王钰栋进球后浙江副总喜极而泣,米特里策上前拍肩安慰

王钰栋进球后浙江副总喜极而泣,米特里策上前拍肩安慰

懂球帝
2026-05-03 12:53:07
2026-05-03 19:59:01
Java精选
Java精选
一场永远也演不完的戏
1787文章数 3859关注度
往期回顾 全部

科技要闻

库克罕见"拒答"!苹果正被AI供应链卡脖子

头条要闻

课堂上弹唱《无地自容》走红的副教授病逝 年仅44岁

头条要闻

课堂上弹唱《无地自容》走红的副教授病逝 年仅44岁

体育要闻

裁判准备下班,结果吴宜泽进了决赛

娱乐要闻

蔡卓妍婚后首现身 戴结婚戒指笑容不断

财经要闻

后巴菲特时代,首场股东会透露了啥

汽车要闻

同比大涨190% 方程豹4月销量29138台

态度原创

本地
手机
艺术
家居
公开课

本地新闻

用青花瓷的方式,打开西溪湿地

手机要闻

小米最强自研芯片来了!核心规格已清晰,不止手机还要上多终端

艺术要闻

Spencer Laron Wilson:当代美国风景画家

家居要闻

灵动实用 生活艺术场

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版