
<p><blockquote id="356QMUTV">Java精选面试题 (微信小程序): 5000+ 道面试题和选择题, 真实面经 , 简历模版 ,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!</blockquote>开源项目简介</p><p id="356QMUOD">对于java程序员来说,myBatis、Hibernate等都是常见的 ORM框架,对于一些简单的 CRUD,事务支持非常不错。但是有时候用起来可能比较繁琐,比如接下来我们要聊的话题,比 MyBatis 效率快 100 倍的条件检索引擎,天生支持联表,使一行代码实现复杂列表检索成为可能,绝无夸张之语!</p><p>开源协议</p><p id="356QMUOE">使用Apache-2.0开源协议</p><p>界面展示</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1105%2F37970cdej00smgdsu000id200hl00abg00hl00ab.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="356QMUOH">你的产品给你画了以上一张图,还附带了一些要求:</p><p><ul><li id="356QMUSB"></p><p id="356QMUOJ">检索结果分页展示</p><p></li><li id="356QMUSC"></p><p id="356QMUOK">可以按任意字段排序</p><p></li><li id="356QMUSD"></p><p id="356QMUOL">按检索条件统计某些字段值</p><p></li></ul></p><p id="356QMUON">这时候,后台接口该怎么写???使用 Mybatis 或 Hibernate 写 100 行代码是不是还打不住?而使用 Bean Searcher,只需 一行代码 便可实现上述要求!!!</p><p>功能概述<strong>特性</strong></p><p><ul><li id="356QMUSE"></p><p id="356QMUOP">支持 实体多表映射</p><p></li><li id="356QMUSF"></p><p id="356QMUOQ">支持 动态字段运算符</p><p></li><li id="356QMUSG"></p><p id="356QMUOR">支持 分组聚合 查询</p><p></li><li id="356QMUSH"></p><p id="356QMUOS">支持 Select | Where | From 子查询</p><p></li><li id="356QMUSI"></p><p id="356QMUOT">支持 实体类嵌入参数</p><p></li><li id="356QMUSJ"></p><p id="356QMUOU">支持 字段转换器</p><p></li><li id="356QMUSK"></p><p id="356QMUOV">支持 Sql 拦截器</p><p></li><li id="356QMUSL"></p><p id="356QMUP0">支持 数据库 Dialect 扩展</p><p></li><li id="356QMUSM"></p><p id="356QMUP1">支持 多数据源 与 动态数据源</p><p></li><li id="356QMUSN"></p><p id="356QMUP2">支持 注解缺省 与 自定义</p><p></li><li id="356QMUSO"></p><p id="356QMUP3">支持 字段运算符 扩展</p><p></li><li id="356QMUSP"></p><p id="356QMUP4">等等</p><p></li></ul><strong>快速开发</strong>使用 Bean Searcher 可以极大节省后端的复杂列表检索接口的开发时间<strong>集成简单</strong></p><p id="356QMUP5">可以和任意 Java Web 框架集成,如:SpringBoot、Grails、Jfinal 等</p><p><strong>扩展性强</strong></p><p id="356QMUP6">面向接口设计,用户可自定义扩展 Bean Searcher 中的任何组件</p><p><strong>支持 注解缺省</strong></p><p id="356QMUP7">约定优于配置,可省略注解,可复用原有域类,同时支持自定义注解</p><p><strong>支持 多数据源</strong></p><p id="356QMUP8">分库分表?在这里特别简单,告别分库分表带来的代码熵值增高问题</p><p><strong>支持 Select 指定字段</strong></p><p id="356QMUP9">同一个实体类,可指定只 Select 其中的某些字段,或排除某些字段</p><p><strong>支持 参数过滤器</strong></p><p id="356QMUPA">支持添加多个参数过滤器,可自定义参数过滤规则</p><p><strong>支持 字段转换器</strong></p><p id="356QMUPB">支持添加多个字段转换器,可自定义数据库字段到实体类字段的转换规则</p><p><strong>支持 SQL 拦截器</strong></p><p id="356QMUPC">支持添加多个 SQL 拦截器,可自定义 SQL 生成规则</p><p>技术选型<br/><ul><li id="356QMUSQ"></p><p id="356QMUPD">框架目的:只一行代码实现:多表联查分页搜索任意字段组合过滤任意字段排序多字段统计</p><p></li><li id="356QMUSR"></p><p id="356QMUPE">架构图:</p><p></li></ul></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1105%2F8f4cefa9j00smgdsv002pd200u000d2g00it0086.jpg&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="356QMUPH"><strong>为什么用?</strong></p><p><strong>这绝不是一个重复的轮子</strong></p><p id="356QMUPJ">虽然 增删改 是 hibernate 和 mybatis、data-jdbc 等等 ORM 的强项,但查询,特别是有 多条件、联表、分页、排序 的复杂的列表查询,却一直是它们的弱项。</p><p id="356QMUPL">传统的 ORM 很难用较少的代码实现一个复杂的列表检索,但 Bean Searcher 却在这方面下足了功夫,这些复杂的查询,几乎只用一行代码便可以解决。</p><p><ul><li id="356QMUSS"></p><p id="356QMUPN">例如,这样的一个典型的需求:</p><p></li></ul><br/></p><p id="356QMUPP">后端需要写一个检索接口,而如果用传统的ORM来写,代码之复杂是可以想象的。</p><p id="356QMUPQ">而 Bean Searcher 却可以:</p><p><strong>只一行代码实现以上功能</strong></p><p id="356QMUPR">首先,你有一个实体类:</p><pre></pre><br/></p><p id="356QMUPV">然后你就可以用一行代码实现这个用户检索接口:</p><pre></pre><br/></p><p id="356QMUQ2">这一行代码实现了以下功能:</p><p><ul><li id="356QMUST"></p><p id="356QMUQ4">多表联查</p><p></li><li id="356QMUSU"></p><p id="356QMUQ5">分页搜索</p><p></li><li id="356QMUSV"></p><p id="356QMUQ6">组合过滤</p><p></li><li id="356QMUT0"></p><p id="356QMUQ7">任意字段排序</p><p></li><li id="356QMUT1"></p><p id="356QMUQ8">字段统计</p><p></li><li id="356QMUT2"></p><p id="356QMUQ9">面试宝典: https://www.yoodb.com/</p><p></li></ul></p><p id="356QMUQB">例如,该接口支持如下请求:</p><p><ul><li id="356QMUT3"></p><p id="356QMUQD">GET: /user/index</p><p></li><li id="356QMUT4"></p><p id="356QMUQE">无参请求(默认分页):</p><p></li><li id="356QMUT5"></p><p id="356QMUQF">{ "dataList": [ { "id": 1, "username": "Jack", "status": 1, "level": 1, "age": 25, "gender": "Male", "joinDate": "2021-10-01" }, ... // 默认返回 15 条数据 ], "totalCount": 100, "summaries": [ 2500 // age 字段统计 ] }</p><p></li><li id="356QMUT6"></p><p id="356QMUQG">GET: /user/index? page=1 & size=10</p><p></li><li id="356QMUT7"></p><p id="356QMUQH">指定分页参数</p><p></li><li id="356QMUT8"></p><p id="356QMUQI">GET: /user/index? status=1</p><p></li><li id="356QMUT9"></p><p id="356QMUQJ">返回 status = 1 的用户</p><p></li><li id="356QMUTA"></p><p id="356QMUQK">GET: /user/index? name=Jac & name-op=sw</p><p></li><li id="356QMUTB"></p><p id="356QMUQL">返回 name 已 Jac 开头的用户</p><p></li><li id="356QMUTC"></p><p id="356QMUQM">GET: /user/index? name=Jack & name-ic=true</p><p></li><li id="356QMUTD"></p><p id="356QMUQN">返回 name = Jack(忽略大小写)的用户</p><p></li><li id="356QMUTE"></p><p id="356QMUQO">GET: /user/index? sort=age & order=desc</p><p></li><li id="356QMUTF"></p><p id="356QMUQP">按字段 age 降序查询</p><p></li><li id="356QMUTG"></p><p id="356QMU">GET: /user/index? onlySelect=username,age</p><p></li><li id="356QMUTH"></p><p id="356QMUQR">只检索 username 与 age 两个字段:</p><p></li><li id="356QMUTI"></p><p id="356QMUQS">{ "dataList": [ { "username": "Jack", "age": 25 }, ... ], "totalCount": 100, "summaries": [ 2500 ] }</p><p></li><li id="356QMUTJ"></p><p id="356QMUQT">GET: /user/index? selectExclude=joinDate</p><p></li><li id="356QMUTK"></p><p id="356QMUQU">检索时排除 joinDate 字段</p><p></li></ul><strong>参数构建器</strong></p><pre></pre><br/></p><p id="356QMUR1"><strong>快速开发</strong></p><p id="356QMUR3">使用 Bean Searcher 可以极大地节省后端的复杂列表检索接口的开发时间!</p><p><ul><li id="356QMUTL"></p><p id="356QMUR5">普通的复杂列表查询只需一行代码</p><p></li><li id="356QMUTM"></p><p id="356QMUR6">单表检索可复用原有 Domain,无需定义 SearchBean</p><p></li></ul><br/><strong>集成简单</strong></p><p id="356QMUR8">可以和任意 Java Web 框架集成,如:SpringBoot、Spring MVC、Grails、Jfinal 等等。更多开源项目:https://www.yoodb.com/projects/springboot-user-manger.html</p><p>Spring Boot 项目,添加依赖即集成完毕:</p><pre></pre><br/></p><p id="356QMURC">接着便可在 Controller 或 Service 里注入检索器:</p><pre></pre><br/></p><p>其它框架,使用如下依赖:</p><pre></pre><br/></p><p id="356QMURG">然后可以使用 SearcherBuilder 构建一个检索器:</p><pre></pre><br/></p><p><strong>扩展性强</strong></p><p id="356QMURJ">面向接口设计,用户可自定义扩展 Bean Searcher 中的任何组件!</p><p id="356QMURL">比如你可以:</p><p><ul><li id="356QMUTN"></p><p id="356QMURM">自定义 FieldOp 来支持更多的字段运算符</p><p></li><li id="356QMUTO"></p><p id="356QMURN">自定义 FieldConvertor 来支持任意的 特殊字段类型</p><p></li><li id="356QMUTP"></p><p id="356QMURO">自定义 DbMapping 来实现自定义注解,或让 Bean Searcher 识别其它 ORM 的注解</p><p></li><li id="356QMUTQ"></p><p id="356QMURP">自定义 ParamResolver 来支持其它形式的检索参数</p><p></li><li id="356QMUTR"></p><p id="356QMURQ">自定义 Dialect 来支持更多的数据库</p><p></li><li id="356QMUTS"></p><p id="356QMURR">等等..</p><p></li></ul>源码地址<ul><li id="356QMUTT"></p><p id="356QMURS">Gitee:https://gitee.com/ejlchina-zhxu/bean-searcher</p><p></li><li id="356QMUTU"></p><p id="356QMURT">GitHub:https://github.com/ejlchina/bean-searcher</p><p></li></ul></p><p id="356QMUS0">公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!</p><p id="356QMUS1">最近有很多人问,有没有<strong>技术或摸鱼</strong>交流群!加入方式很简单,公众号<strong>Java精选</strong>,回复“<strong>加群</strong>”,即可入群!在线摸鱼:https://www.yoodb.com/<br/></p><p id="356QMUS2"><strong>Java精选面试题</strong>(微信小程序):<strong>3000+</strong>道面试题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计等,在线随时刷题!</p><p id="356QMUS4">特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,<strong>「大咖笔记」</strong>,专注挖掘好东西,非常值得大家关注。<strong>点击下方公众号卡片关注</strong>。</p><p id="356QMUS8">文章有帮助的话,点在看,转发吧!</p>
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/179549.html