<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          比 MyBatis 效率快 100 倍的條件檢索引擎,天生支持聯(lián)表!

          共 6047字,需瀏覽 13分鐘

           ·

          2022-05-09 23:23

          上一篇:2T架構(gòu)師學(xué)習(xí)資料干貨分享

          1

          開源項(xiàng)目簡(jiǎn)介



          比 MyBatis 效率快 100 倍的條件檢索引擎,天生支持聯(lián)表,使一行代碼實(shí)現(xiàn)復(fù)雜列表檢索成為可能!


           

          2

          開源協(xié)議


          使用Apache-2.0開源協(xié)議

           

          3

          界面展示



          你的產(chǎn)品給你畫了以上一張圖,還附帶了一些要求:


          • 檢索結(jié)果分頁(yè)展示

          • 可以按任意字段排序

          • 按檢索條件統(tǒng)計(jì)某些字段值


          這時(shí)候,后臺(tái)接口該怎么寫???使用 Mybatis 或 Hibernate 寫 100 行代碼是不是還打不住?而使用 Bean Searcher,只需 一行代碼 便可實(shí)現(xiàn)上述要求!!!



          4

          功能概述


          特性



          快速開發(fā)


          使用 Bean Searcher 可以極大節(jié)省后端的復(fù)雜列表檢索接口的開發(fā)時(shí)間

          集成簡(jiǎn)單


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

          擴(kuò)展性強(qiáng)


          面向接口設(shè)計(jì),用戶可自定義擴(kuò)展 Bean Searcher 中的任何組件


          支持 注解缺省


          約定優(yōu)于配置,可省略注解,可復(fù)用原有域類,同時(shí)支持自定義注解

          支持 多數(shù)據(jù)源


          分庫(kù)分表?在這里特別簡(jiǎn)單,告別分庫(kù)分表帶來(lái)的代碼熵值增高問(wèn)題

          支持 Select 指定字段


          同一個(gè)實(shí)體類,可指定只 Select 其中的某些字段,或排除某些字段

          支持 參數(shù)過(guò)濾器


          支持添加多個(gè)參數(shù)過(guò)濾器,可自定義參數(shù)過(guò)濾規(guī)則

          支持 字段轉(zhuǎn)換器


          支持添加多個(gè)字段轉(zhuǎn)換器,可自定義數(shù)據(jù)庫(kù)字段到實(shí)體類字段的轉(zhuǎn)換規(guī)則


          支持 SQL 攔截器


          支持添加多個(gè) SQL 攔截器,可自定義 SQL 生成規(guī)則



          5

          技術(shù)選型


          • 框架目的:只一行代碼實(shí)現(xiàn):多表聯(lián)查分頁(yè)搜索任意字段組合過(guò)濾任意字段排序多字段統(tǒng)計(jì)
          • 架構(gòu)圖:



          為什么用


          這絕不是一個(gè)重復(fù)的輪子


          雖然 增刪改 是 hibernate 和 mybatis、data-jdbc 等等 ORM 的強(qiáng)項(xiàng),但查詢,特別是有 多條件、聯(lián)表、分頁(yè)、排序 的復(fù)雜的列表查詢,卻一直是它們的弱項(xiàng)。


          傳統(tǒng)的 ORM 很難用較少的代碼實(shí)現(xiàn)一個(gè)復(fù)雜的列表檢索,但 Bean Searcher 卻在這方面下足了功夫,這些復(fù)雜的查詢,幾乎只用一行代碼便可以解決。


          • 例如,這樣的一個(gè)典型的需求:


          后端需要寫一個(gè)檢索接口,而如果用傳統(tǒng)的 ORM 來(lái)寫,代碼之復(fù)雜是可以想象的。

          而 Bean Searcher 卻可以:


          只一行代碼實(shí)現(xiàn)以上功能


          首先,你有一個(gè)實(shí)體類:


          @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...
          }


          然后你就可以用一行代碼實(shí)現(xiàn)這個(gè)用戶檢索接口:


          @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()), new String[]{ "age" });
              }
            
          }


          這一行代碼實(shí)現(xiàn)了以下功能:


          • 多表聯(lián)查

          • 分頁(yè)搜索

          • 組合過(guò)濾

          • 任意字段排序

          • 字段統(tǒng)計(jì)


          例如,該接口支持如下請(qǐng)求:


          參數(shù)構(gòu)建器


          Map<String, Object> params = MapUtils.builder()
                  .selectExclude(User::getJoinDate) // 排除 joinDate 字段
                  .field(User::getStatus, 1// 過(guò)濾:status = 1
                  .field(User::getName, "Jack").ic() // 過(guò)濾:name = 'Jack' (case ignored)
                  .field(User::getAge, 2030).op(Opetator.Between) // 過(guò)濾:age between 20 and 30
                  .orderBy(User::getAge, "asc"// 排序:年齡,從小到大
                  .page(015// 分頁(yè):第 0 頁(yè), 每頁(yè) 15 條
                  .build();
          List<User> users = beanSearcher.searchList(User.class, params);


          快速開發(fā)


          使用 Bean Searcher 可以極大地節(jié)省后端的復(fù)雜列表檢索接口的開發(fā)時(shí)間!


          • 普通的復(fù)雜列表查詢只需一行代碼

          • 單表檢索可復(fù)用原有 Domain,無(wú)需定義 SearchBean


          集成簡(jiǎn)單


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


          Spring Boot 項(xiàng)目,添加依賴即集成完畢:


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


          接著便可在 Controller 或 Service 里注入檢索器:


          /**
           * 注入 Map 檢索器,它檢索出來(lái)的數(shù)據(jù)以 Map 對(duì)象呈現(xiàn)
           */

          @Autowired
          private MapSearcher mapSearcher;

          /**
           * 注入 Bean 檢索器,它檢索出來(lái)的數(shù)據(jù)以 泛型 對(duì)象呈現(xiàn)
           */

          @Autowired
          private BeanSearcher beanSearcher;


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


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


          然后可以使用 SearcherBuilder 構(gòu)建一個(gè)檢索器:


          DataSource dataSource = ... // 拿到應(yīng)用的數(shù)據(jù)源

          // DefaultSqlExecutor 也支持多數(shù)據(jù)源
          SqlExecutor sqlExecutor = new DefaultSqlExecutor(dataSource);

          // 構(gòu)建 Map 檢索器
          MapSearcher mapSearcher = SearcherBuilder.mapSearcher()
                  .sqlExecutor(sqlExecutor)
                  .build();

          // 構(gòu)建 Bean 檢索器
          BeanSearcher beanSearcher = SearcherBuilder.beanSearcher()
                  .sqlExecutor(sqlExecutor)
                  .build();


          擴(kuò)展性強(qiáng)


          面向接口設(shè)計(jì),用戶可自定義擴(kuò)展 Bean Searcher 中的任何組件!


          比如你可以:

          • 自定義 FieldOp 來(lái)支持更多的字段運(yùn)算符

          • 自定義 FieldConvertor 來(lái)支持任意的 特殊字段類型

          • 自定義 DbMapping 來(lái)實(shí)現(xiàn)自定義注解,或讓 Bean Searcher 識(shí)別其它 ORM 的注解

          • 自定義 ParamResolver 來(lái)支持其它形式的檢索參數(shù)

          • 自定義 Dialect 來(lái)支持更多的數(shù)據(jù)庫(kù)

          • 等等..


          6

          源碼地址


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

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


          感謝您的閱讀,也歡迎您發(fā)表關(guān)于這篇文章的任何建議,關(guān)注我,技術(shù)不迷茫!小編到你上高速。 
              · END ·
          最后,關(guān)注公眾號(hào)互聯(lián)網(wǎng)架構(gòu)師,在后臺(tái)回復(fù):2T,可以獲取我整理的 Java 系列面試題和答案,非常齊全


          正文結(jié)束


          推薦閱讀 ↓↓↓

          1.救救大齡碼農(nóng)!45歲程序員在國(guó)務(wù)院網(wǎng)站求助總理!央媒網(wǎng)評(píng)來(lái)了...

          2.如何才能成為優(yōu)秀的架構(gòu)師?

          3.從零開始搭建創(chuàng)業(yè)公司后臺(tái)技術(shù)棧

          4.程序員一般可以從什么平臺(tái)接私活?

          5.37歲程序員被裁,120天沒(méi)找到工作,無(wú)奈去小公司,結(jié)果懵了...

          6.IntelliJ IDEA 2019.3 首個(gè)最新訪問(wèn)版本發(fā)布,新特性搶先看

          7.這封“領(lǐng)導(dǎo)痛批95后下屬”的郵件,句句扎心!

          8.15張圖看懂瞎忙和高效的區(qū)別!

          瀏覽 52
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人澡人人舔 | 69成人中文 | 深爱激情片 | 免费日女人网站 | 女人操逼网 |