0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

比MyBatis效率快100倍的条件检索引擎

jf_ro2CN3Fa 来源:芋道源码 2023-04-04 11:41 次阅读


1 开源项目简介

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

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

2 开源协议

使用Apache-2.0开源协议

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

3 界面展示

476356d0-d28f-11ed-bfe3-dac502259ad0.jpg

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

  • 检索结果分页展示
  • 可以按任意字段排序
  • 按检索条件统计某些字段值

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

4 功能概述

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

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

集成简单

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

扩展性强

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

支持 注解缺省

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

支持 多数据源

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

支持 Select 指定字段

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

支持 参数过滤器

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

支持 字段转换器

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

支持 SQL 拦截器

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

5 威廉希尔官方网站 选型

  • 框架目的:只一行代码实现:多表联查分页搜索任意字段组合过滤任意字段排序多字段统计
  • 架构图:
476cd9da-d28f-11ed-bfe3-dac502259ad0.png
为什么用

这绝不是一个重复的轮子

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

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

  • 例如,这样的一个典型的需求:
4779d55e-d28f-11ed-bfe3-dac502259ad0.png

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

而 Bean Searcher 却可以:

只一行代码实现以上功能

首先,你有一个实体类:

@SearchBean(tables="useru,roler",joinCond="u.role_id=r.id",autoMapTo="u")

publicclassUser{
privatelongid;
privateStringusername;
privateintstatus;
privateintage;
privateStringgender;
privateDatejoinDate;
privateintroleId;
@DbField("r.name")
privateStringroleName;
//Gettersandsetters...
}

然后你就可以用一行代码实现这个用户检索接口:

@RestController
@RequestMapping("/user")
publicclassUserController{

@Autowired
privateBeanSearcherbeanSearcher;//注入BeanSearcher的检索器

@GetMapping("/index")
publicSearchResultindex(HttpServletRequestrequest){
//这里只写一行代码
returnbeanSearcher.search(User.class,MapUtils.flat(request.getParameterMap()),newString[]{"age"});
}

}

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

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

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

  • 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 字段
参数构建器
Mapparams=MapUtils.builder()
.selectExclude(User::getJoinDate)//排除joinDate字段
.field(User::getStatus,1)//过滤:status=1
.field(User::getName,"Jack").ic()//过滤:name='Jack'(caseignored)
.field(User::getAge,20,30).op(Opetator.Between)//过滤:agebetween20and30
.orderBy(User::getAge,"asc")//排序:年龄,从小到大
.page(0,15)//分页:第0页,每页15条
.build();
Listusers=beanSearcher.searchList(User.class,params);

快速开发

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

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

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

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

implementation'com.ejlchina3.6.0'

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

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

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

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

implementation'com.ejlchina3.6.0'

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

DataSourcedataSource=...//拿到应用的数据源

//DefaultSqlExecutor也支持多数据源
SqlExecutorsqlExecutor=newDefaultSqlExecutor(dataSource);

//构建Map检索器
MapSearchermapSearcher=SearcherBuilder.mapSearcher()
.sqlExecutor(sqlExecutor)
.build();

//构建Bean检索器
BeanSearcherbeanSearcher=SearcherBuilder.beanSearcher()
.sqlExecutor(sqlExecutor)
.build();
扩展性强

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

比如你可以:

  • 自定义 FieldOp 来支持更多的字段运算符
  • 自定义 FieldConvertor 来支持任意的 特殊字段类型
  • 自定义 DbMapping 来实现自定义注解,或让 Bean Searcher 识别其它 ORM 的注解
  • 自定义 ParamResolver 来支持其它形式的检索参数
  • 自定义 Dialect 来支持更多的数据库
  • 等等..

6 源码地址

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


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 转换器
    +关注

    关注

    27

    文章

    8717

    浏览量

    147371
  • 引擎
    +关注

    关注

    1

    文章

    361

    浏览量

    22586
  • mybatis
    +关注

    关注

    0

    文章

    61

    浏览量

    6716

原文标题:比 MyBatis 效率快 100 倍的条件检索引擎,天生支持联表!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于网格威廉希尔官方网站 的并行搜索引擎

    研究现有网格威廉希尔官方网站 和搜索威廉希尔官方网站 ,分析并行搜索引擎的优点和不足,提出基于网格威廉希尔官方网站 的并行搜索引擎解决方案,其中包含一个3 层结构的应用框架和一个并行搜索引擎的应用方案。
    发表于 03-30 10:09 23次下载

    维、哈、柯全文搜索引擎检索器的关键威廉希尔官方网站

    研究维、哈、柯全文搜索引擎检索器的关键问题,提出有效的解决方法,包括在用户计算机没有安装本地输入法和字库的情况下输入维、哈、柯文检索词并正常显示搜索结果,针对
    发表于 04-11 09:26 14次下载

    问答式信息检索中模式优化及性能评价

    问答式信息检索是新一代搜索引擎,集成自然语言处理和信息检索科学的研究成果,提高信息检索效率。该文介绍问答式信息
    发表于 04-17 09:29 11次下载

    化工搜索引擎索引库的研究和实现

    本文在对Lucene 全文检索索引开发包深入研究的基础上,设计了多索引索引方案,有效地减少了索引时间,提高了
    发表于 12-18 16:27 13次下载

    开放源代码的全文检索引擎 Lucene

    开放源代码的全文检索引擎 Lucene――介绍、系统结构与源码实现分析 第一节 全文检索系统与Lucene简介 一、           &
    发表于 02-10 15:09 5次下载

    主题搜索引擎的研究

    介绍了将开源的全文检索工具包Lucene嵌入到自己的搜索引擎中来满足开发主题搜索引擎的需求。并基于Lucene中文分词的不足设计了一个比较完善的中文分词器,然后将其引入具体应
    发表于 07-05 16:30 11次下载

    网络搜索引擎,网络搜索引擎的工作原理

    网络搜索引擎,网络搜索引擎的工作原理 21 世纪是信息时代,随着信息科学威廉希尔官方网站 的不断发展,网络已成为人们生活中的重要组成部分,网上
    发表于 03-26 15:51 1457次阅读

    垂直搜索引擎是什么_垂直搜索引擎有哪些

    垂直搜索引擎是针对某一个行业的专业搜索引擎,是搜索引擎的细分和延伸,是对网页库中的某类专门的信息进行一次整合,定向分字段抽取出需要的数据进行处理后再以某种形式返回给用户。垂直搜索是相对通用搜
    发表于 01-04 17:19 7933次阅读

    基于Lucene实现全文搜索引擎MYSearch的构建

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎
    的头像 发表于 07-25 08:07 2753次阅读
    基于Lucene实现全文搜<b class='flag-5'>索引擎</b>MYSearch的构建

    阿里云图像识别速度创纪录,AWS2.36谷歌5.28

    阿里云图像识别速度创纪录,AWS2.36谷歌5.28 12月25日,斯坦福大学发布
    发表于 12-27 12:51 239次阅读

    迫于欧盟压力,谷歌放宽对搜索引擎竞争对手的竞标条件

    在欧盟的压力下,谷歌再次修改了相关条款,为想要出现在安卓手机上的搜索引擎竞争对手放宽了竞标条件
    的头像 发表于 10-24 16:02 2696次阅读

    新纳米级设备晶体管运行速度

    EPFL研究人员已经开发出一种当今最快的晶体管运行速度的器件。新设备的运行速度也目前计算机中的晶体管
    的头像 发表于 03-28 14:12 2421次阅读

    新型纳米器材诞生,晶体管运行速度100

    EPFL研究员开发出了一种现今最快的晶体管运行速度器件,并且新设备在运行速度上也当前计算机中的晶体管
    的头像 发表于 04-02 11:55 2340次阅读

    2020上半年国内搜索引擎数据出炉,百度斩获双第一

    日前,“网速管家”发布2020年7月最新的国内搜索引擎占有率,其中,百度作为多数中国网民优先选择的搜索引擎,稳居国内搜索引擎排名第一,PC端市场占81.26%,移动端市场占
    的头像 发表于 08-16 10:10 4956次阅读

    使用Rust语言重写的代码搜索引擎黑鸟系统Blackbird正式启用

    其次,需要完全从头开始构建了一个新的代码搜索引擎。新的引擎需要非常(大约是旧代码搜索速度的两),功能更强大(支持子字符串查询、正则表达式和符号搜索),并且理解代码,将最相关的结果放
    的头像 发表于 05-11 09:52 872次阅读
    使用Rust语言重写的代码搜<b class='flag-5'>索引擎</b>黑鸟系统Blackbird正式启用