Bean Searcher 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Bean Searcher 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Bean Searcher 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Artistic-2.0
操作系统 跨平台
软件类型 开源软件
所属分类 数据库相关
开源组织
地区 国产
投 递 者 zhxutroy
适用人群 未知
收录时间 2021-12-09

软件简介

🔥🔥🔥 比 MyBatis 开发效率高 100 倍的条件检索引擎,天生支持联表,使一行代码实现复杂列表检索成为可能!

✨ 特性

  • 支持 实体多表映射
  • 支持 动态字段运算符
  • 支持 分组聚合 查询
  • 支持 Select | Where | From 子查询
  • 支持 实体类嵌入参数
  • 支持 字段转换器
  • 支持 Sql 拦截器
  • 支持 数据库 Dialect 扩展
  • 支持 多数据源 与 动态数据源
  • 支持 注解缺省 与 自定义
  • 等等

⁉️为什么用

这绝不是一个重复的轮子

虽然 增删改 是 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<User> index(HttpServletRequest request) {
        // 这里只写一行代码
        return beanSearcher.search(User.class, MapUtils.flat(request.getParameterMap()));
    }
	
}

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

  • 多表联查
  • 分页搜索
  • 组合过滤
  • 任意字段排序
  • 字段统计

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

  • 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<String, Object> 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<User> users = beanSearcher.searchList(User.class, params);

🚀 快速开发

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

  • 普通的复杂列表查询只需一行代码
  • 单表检索可复用原有 Domain,无需定义 SearchBean

🌱 集成简单

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

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

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

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

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

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

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

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

然后可以使用 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 中的任何组件!

比如你可以:

  • 自定义 DbMapping 来实现自定义注解,或让 Bean Searcher 识别其它 ORM 的注解
  • 自定义 ParamResolver 来支持 JSON 形式的检索参数
  • 自定义 FieldConvertor 来支持任意的 字段类型
  • 自定义 Dialect 来支持更多的数据库
  • 等等..
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(8) 发布并加入讨论🔥
发表了资讯
2022/10/10 09:38

Bean Searcher 发布 v3.8.2 版本

Bean Searcher 新增:分页深度保护,默认最大允许分页偏移 20000 条 优化:当检索参数过于庞大(阈值可配置)时,不执行查询,直接返回空数据 优化:当逻辑组表达式过于复杂(阈值可配置)或非法时,不执行查询,直接返回空数据 优化:当指定的排序参数非法时,也不执行查询(之前是忽略排序),返回空数据 优化:提升参数构建器性能,并将 Builder.toFieldName 方法标记为过时,新增 FieldFns 工具类 优化:参数构建器新增 as...

0
0
发表了资讯
2022/07/08 13:30

Bean Searcher 发布 v3.7.0 版本

简介 很多系统都有列表检索(如:订单管理,用户管理)这样的需求,而每一个列表页所需展示的数据往往会横跨多张数据库表(比如订单管理页表格里的订单号列来自订单表,用户名列来自用户表),此时我们的后端所建的 域类(或实体类,与数据库表想关联的那个类)与页面所需展示的数据并不能形成一一对应关系。 因此,VO(View Object) 产生了。它介于页面数据与域类之间,页面展示的数据不再需要与后端的域类一一对应,而只需要...

1
4
发表了资讯
2022/05/10 11:13

Bean Searcher 发布 v3.6.1 版本

本次更新内容: ✨ Features Bean Searcher 新增 BoolNumFieldConvertor 字段转换器:支持 Boolean -> Number 方向的转换 优化 SearcherBuilder 新增 addResultFilter(..) 方法 Bean Searcher Boot Starter 新增 bean-searcher.field-convertor.use-bool-num 配置键,可自动配置 BoolNumFieldConvertor,默认为 true 🐛 Bug Fixes 修复 MapUtils.builder(..) 的 page(..) 与 limit(..) 方法不受 max-allowed-size 配...

1
4
发表了资讯
2022/04/22 09:59

Bean Searcher 发布 v3.6.0 版本

更新内容: 1. 支持嵌入参数前缀符转义语义 2. 实体类支持声明默认排序与排序约束 3. 新增 ResultFilter,可对检索结果统一做进一步的自定义处理 4. 新增 PostgreSqlDialect 方言,可用于 PostgreSql 数据库 5. 重构 SqlResult,与 JDBC 解耦,便于使用其它 ORM 重写 SqlExecutor 6. 重构 SqlInterceptor,新增 FetchType 参数 7. 新增 B2MFieldConvertor,可用于 MapSearcher 检索器 8. 新增一些 Spring Boot 配置键 9. 代码优...

0
1
发表了资讯
2022/04/07 10:08

Bean Searcher 发布 v3.5.3 版本

更新内容: ✨ Better Bean Searcher Boot Starter: 升级 spring-boot -> 2.6.6 🐛 Bug Fixes 修复:对于 Boolean 类型的字段,当检索时该字段传入的参数值为 空串 时,BoolValueFilter 会将其转换为 true 的问题:https://github.com/ejlchina/bean-searcher/issues/29 ----------------------------------- 参见: https://github.com/ejlchina/bean-searcher/releases https://gitee.com/ejlchina-zhxu/bean-sear...

0
4
发表了资讯
2022/03/17 11:34

Bean Searcher 发布 v3.5.2 版本

✨ Features Bean Searcher: 参数构建器新增 field(FieldFn<T, ?> fieldFn, Collection<?> values) 与 field(String fieldName, Collection<?> values) 方法,支持字段值集合参数 ✨ Better Bean Searcher Boot Starter: 升级 spring-boot -> 2.6.4 🐛 Bug Fixes 修复当排序字段不在 SELECT 子句中时 ORDER BY 子句仍然会使用该字段的别名的问题 ----------------------------------- 参见: https://github...

0
1
发表了资讯
2022/02/28 14:53

Bean Searcher 发布 v3.5.1 版本

✨ Better 强化对复杂逻辑表达式的简化能力 升级 slf4j-api -> 1.7.36 参见: https://github.com/ejlchina/bean-searcher/releases https://gitee.com/ejlchina-zhxu/bean-searcher/releases 还不了解的同学这里都有介绍哦: 我这样写代码效率提高了100倍:https://juejin.cn/post/7027733039299952676 系统教程:https://searcher.ejlchina.com/...

0
0
发表了资讯
2022/02/24 19:11

Bean Searcher 发布 v3.5.0 版本

✨ Features Bean Searcher 新增 GroupResolver、ExprParser 等组件,实现参数分组与逻辑关系的表达、运算、智能化简与解析的能力 参见:#I4J229:如何实现 更加复杂 的 or 条件分组查询 DefaultParamResolver 新增 gexprName、groupSeparator 属性,用于指定组参数名的形式 MapBuilder(参数构建器)新增 group(String group) 方法,用于构建字段参数组 MapBuilder 新增 groupExpr(String expr) 方法,用于指定参数组间...

3
1
发表了资讯
2022/02/22 14:56

Bean Searcher 发布 v3.4.3 版本

🐛 Bug Fixes 修复 StartWith 运算符不后模糊匹配的问题(该 BUG 在 v3.4.2 中滋生) 参见: https://github.com/ejlchina/bean-searcher/releases https://gitee.com/ejlchina-zhxu/bean-searcher/releases 还不了解的同学这里都有介绍哦: 我这样写代码效率提高了100倍:https://juejin.cn/post/7027733039299952676 系统教程:https://searcher.ejlchina.com/...

0
0
发表了资讯
2022/02/21 10:29

Bean Searcher 发布 v3.4.2 版本

✨ Better 带嵌入参数的字段也能参与过滤条件 带嵌入参数的字段也能参与字段统计 参见: https://github.com/ejlchina/bean-searcher/releases https://gitee.com/ejlchina-zhxu/bean-searcher/releases 还不了解的同学这里都有介绍哦: 我这样写代码效率提高了100倍:https://juejin.cn/post/7027733039299952676 系统教程:https://searcher.ejlchina.com/...

0
1
发表了资讯
2022/02/17 13:26

Bean Searcher 发布 v3.4.1 版本

✨ Better Bean Searcher 优化 SQL 生成逻辑:当 @SearchBean 注解的 joinCond 属性只有一个拼接参数 且 该参数值为空时,则使其不参与 where 子句 🐛 Bug Fixes 修复 DateFieldConvertor 无法将 java.sql.Date 转换为 LocalDate / LocalDateTime 的问题 修复 DateFieldConvertor 转换 LocalDate / LocalDateTime 时会产生时区偏差的问题 修复 DateFormatFieldConvertor 无法格式化 java.sql.Date / java.sql.Time ...

0
0
发表了资讯
2022/02/16 10:29

Bean Searcher 发布 v3.3.3 版本

大家支持一个 Star 吧 https://github.com/ejlchina/bean-searcher/releases https://gitee.com/ejlchina-zhxu/bean-searcher/releases 还不了解的同学这里都有介绍哦: 我这样写代码效率提高了100倍:https://juejin.cn/post/7027733039299952676 系统教程:https://searcher.ejlchina.com/ Github: https://github.com/ejlchina/bean-searcher Gitee: https://gitee.com/ejlchina-zhxu/bean-searcher...

0
2
发表了资讯
2022/02/15 13:34

Bean Searcher 发布 v3.2.4 版本

大家支持一个 Star 吧 https://github.com/ejlchina/bean-searcher/releases https://gitee.com/ejlchina-zhxu/bean-searcher/releases 还不了解的同学这里都有介绍哦: 我这样写代码效率提高了100倍:https://juejin.cn/post/7027733039299952676 系统教程:https://searcher.ejlchina.com/ Github: https://github.com/ejlchina/bean-searcher Gitee: https://gitee.com/ejlchina-zhxu/bean-searcher...

0
4
发表了资讯
2022/02/11 17:21

Bean Searcher 发布 v3.1.4 版本

大家支持一个 Star 吧 https://github.com/ejlchina/bean-searcher/releases https://gitee.com/ejlchina-zhxu/bean-searcher/releases 还不了解的同学这里都有介绍哦: 我这样写代码效率提高了100倍:https://juejin.cn/post/7027733039299952676 系统教程:https://searcher.ejlchina.com/ Github: https://github.com/ejlchina/bean-searcher Gitee: https://gitee.com/ejlchina-zhxu/bean-searcher...

1
4
发表了资讯
2022/02/09 15:24

Bean Searcher 发布 v3.4.0 版本

大家支持一个 Star 吧 https://github.com/ejlchina/bean-searcher/releases https://gitee.com/ejlchina-zhxu/bean-searcher/releases

7
4
发表了资讯
2022/01/22 11:39

Bean Searcher 发布 v3.3.1 版本

✨ Features Bean Searcher MapBuilder 新增 op(Class<? extends FieldOp> op) 方法 优化 DateValueCorrector, 可配置支持的运算符 Bean Searcher Boot Starter 新增 bean-searcher.sql.use-date-value-corrector 配置项,默认为 true,表示是否使用日期值纠正器 ✨ Better Bean Searcher 优化字段运算符的匹配逻辑:使用严格模式 优化 Operator 常量,使其可以直接作为 @DbField.onlyOn 的值(兼容以前版本,便...

0
3
发表了资讯
2022/01/21 10:00

Bean Searcher 发布 v3.2.2 版本

🌻 Better Bean Searcher 优化 DateValueCorrector,使其支持 LocalDateTime 类型字段 Bean Searcher Boot Starter 优化自动配置机制,使其不依赖于 DataSourceAutoConfiguration,只要提供了 DataSource 就能自动配置 Change LICENSE to Apache-2.0 https://github.com/ejlchina/bean-searcher https://gitee.com/ejlchina-zhxu/bean-searcher https://searcher.ejlchina.com 没点 Star 的小伙伴上一颗 Star 哦 ^_^...

0
1
发表了资讯
2022/01/20 19:39

Bean Searcher 发布 v3.3.0 版本

✨ Features Bean Searcher 新增 FieldOp 接口,用户可用之扩展自己的字段运算符 新增 FieldOpPool 类,用户可用之定制一套全新的字段运算符 内置新增 NotIn / ni 与 NotBetween / nb 运算符 内置运算符 MultiValue / mv 重命名为 InList / il (原运算符仍可使用) DefaultDbMapping 新增 redundantSuffixes 属性,可配置 在实体类自动映射表名时 统一去除类名中的冗余后缀(比如 VO、DTO 等) Bean Searcher Boot Start...

0
1
发表了资讯
2021/12/18 11:06

Bean Searcher 发布 v3.2.1 版本

🌻 Better 无 @DbIgnore 注解也自动忽略实体类中的 static 与 transient 属性 实体类支持子类重写父类中已存在的属性 🐛 Bug Fixes 修复非字符串字段使用 Empty/NotEmpty 运算符时会报错的问题:#I4N1MG:当字段为 Datetime 类型时,使用 字段-op=ey 发生错误 还没 Star 的小伙伴快来点个 Star 吧 https://github.com/ejlchina/bean-searcher https://gitee.com/ejlchina-zhxu/bean-searcher...

0
0
发表了资讯
2021/12/14 21:51

Bean Searcher 发布 v3.1.3 版本

Bean Searcher 发布 v3.1.3 版本,具体更新内容如下: Bean Searcher 无 @DbIgnore 也自动忽略实体类中的静态字段 Bean Searcher Boot Starter 使用 Searcher 类型注入检索器时,默认注入 MapSearcher,不再报错 提高兼容性,SpringBoot 最低版本支持到 v1.4+

4
2
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
8 评论
47 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部