Skip to content

Bean Searcher

Bean Searcher 是一个轻量级数据库条件检索引擎,专为减少后端列表查询的模板代码而生。它让开发者可以用一行代码完成一个完整的列表检索接口,极大提高开发效率。

  • 不依赖具体的 Web 框架(可在任意 Java Web 框架中使用)

  • 不依赖具体的 ORM 框架(可与任意 ORM 配合使用,也可单独使用)

框架介绍

架构设计图

与 Hibernate MyBatis 的区别

首先,Bean Searcher 并不是一个完全的 ORM 框架,它存在的目的不是为了替换它们,而是为了弥补它们在 列表检索领域 的不足。

下表列举它们之间的具体区别:

区别点Bean SearcherHibernateMyBatis
ORM只读 ORM全自动 ORM半自动 ORM
实体类可多表映射支持不支持不支持
字段运算符动态静态静态
CRUDOnly RCRUDCRUD

从上表可以看出,Bean Searcher 只能做数据库查询,不支持增删改。但它的多表映射机制动态字段运算符,让复杂列表检索的代码量可以缩减到原来的十分之一,甚至百分之一。

更关键的是,它没有第三方依赖,在项目中可以和任意 ORM 配合使用。

哪些项目可以使用

  • Java 项目(当然 Kotlin、Groovy 也是可以的);

  • 使用了 关系数据库的项目(如:MySQL、Oracle 等);

  • 可与任意框架集成:Spring Boot、Grails、Jfinal 等等。

什么场景下需要用

任何框架都有其使用场景,当然 Bean Searcher 也不例外,它的诞生并不是为了替换 MyBatis / Hibernate 等传统 ORM,因此,理解哪些场景适合使用它非常重要。

  • 推荐非事务性动态 检索场景中使用,例如:

    管理后台的 [订单管理]、[用户管理] 等页面 的检索场景,该检索是 非事务性 的,不会向数据库中插入数据,且检索条件是 动态 的,用户检索方式不同,执行的 SQL 也不同(如按 订单号 检索 与 按 状态 检索 需要不同的 SQL),此时推荐使用 Bean Searcher 来执行检索;

  • 不建议事务性静态 查询场景中使用,例如:

    用户注册接口中需要先查询账号是否已存在的场景,该接口是 事务性 的,它需要向数据库中插入数据,且此时的查询条件是 静态 的,无论哪个账号,都执行一样的 SQL(都按 账号名 查询),此时不建议使用 Bean Searcher 来执行。

支持哪些数据库

只要支持正常的 SQL 语法,都是支持的,另外 Bean Searcher 内置了五个方言实现:

  • 分页语法和 MySQL 一样的数据库,默认支持
  • 分页语法和 PostgreSQL 一样的数据库,选用 PostgreSQL 方言 即可
  • 分页语法和 Oracle 一样的数据库,选用 Oracle 方言 即可
  • 分页语法和 SqlServer (v2012+) 一样的数据库,选用 SqlServer 方言 即可
  • 分页语法和 达梦 一样的数据库,选用 DaMeng 方言 即可

如果分页语法是独创的,自定义一个方言即可,只需实现两个方法,参考:高级 > SQL 方言 章节。

DEMO 快速体验

三步快速体验

第一步:克隆

bash
git clone https://gitee.com/troyzhxu/bean-searcher.git
bash
git clone https://github.com/troyzhxu/bean-searcher.git

第二步:运行

bash
# 此 demo 基于 JDK 21+
cd bean-searcher/bean-searcher-demos/bs-demo-sb4
./gradlew bootRun
bash
# 此 demo 基于 JDK 17+
cd bean-searcher/bean-searcher-demos/bs-demo-sb3
./gradlew bootRun
bash
# 此 demo 基于 JDK 8+
cd bean-searcher/bean-searcher-demos/bs-demo-sb2
mvn spring-boot:run
bash
# 此 demo 基于 JDK 8+
cd bean-searcher/bean-searcher-demos/bs-demo-solon
# IDEA 中打开运行
bash
# 此 demo 基于 JDK 8+
cd bean-searcher/bean-searcher-demos/bs-demo-grails
grails run-app

第三步:效果

访问 http://localhost:8080/ 即可查看运行效果。

此例的更多信息,可参阅:DEMO 详细介绍

更多 DEMO

基于 Apache 许可发布