<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>

          qdbp-jdbc數(shù)據(jù)庫 ORM 框架

          聯(lián)合創(chuàng)作 · 2023-09-30 23:53

          qdbp-jdbc 簡稱為 qdbc,是一個數(shù)據(jù)庫 ORM 框架,底層基于 Spring 的 JdbcTemplate ,完善之后希望可以成為 MyBatis 的替代品。

          為什么會有這個項目?因為現(xiàn)有的框架用得不夠爽:(更多討論見《ORM框架的痛點討論》)

          • Hibernate 太重量級,學(xué)習(xí)成本高,用得不好容易出現(xiàn)性能問題;
          • Spring 的 JdbcTemplate 太基礎(chǔ),只做了預(yù)編譯參數(shù)和結(jié)果映射;
          • MyBatis 要生成一大堆 xml 文件,難以維護,尤其表結(jié)構(gòu)變更時,重新生成的 xml 就需要跟以前的比對,很是麻煩;
          • 即使有 MyBatisGenerator 之類的工具來輔助生成代碼,但由于代碼是提前生成的,結(jié)構(gòu)變更時依然麻煩;
          • 還有一個問題,所有的框架輸出預(yù)編譯參數(shù)的 SQL 日志都是用問號代替參數(shù), 如果參數(shù)很多,根據(jù)日志到數(shù)據(jù)庫中重現(xiàn)問題的時候簡直痛苦。

          特點和獨創(chuàng)內(nèi)容

          • 特點:對于單表增刪改查,以及涉及的大于/小于/不等于/like/in 等條件,不需要寫 sql 或 xml《基本用法簡介
          • 特點:多表關(guān)聯(lián)基礎(chǔ)查詢,以及涉及的大于/小于/不等于/like/in 等條件,不需要寫 sql 或 xml《表關(guān)聯(lián)查詢
          • 特點:集成全局業(yè)務(wù)處理接口
            提供公共字段(創(chuàng)建人/創(chuàng)建時間/修改人/修改時間/租戶隔離等)的賦值接口。
            集成邏輯刪除解決方案。《邏輯刪除數(shù)據(jù)狀態(tài)填充策略
            集成數(shù)據(jù)權(quán)限解決方案。《關(guān)于數(shù)據(jù)權(quán)限的解決思路
          • 特點:集成兼容多種數(shù)據(jù)庫的常用操作
            兼容多種數(shù)據(jù)庫的批量新增 crudDao.inserts()、批量修改 crudDao.updates() 方法
            兼容多種數(shù)據(jù)庫的遞歸查找子節(jié)點的方法 crudDao.listChildren()
          • 獨創(chuàng):SqlBuffer,一行內(nèi)實現(xiàn) SQL 文本與變量的統(tǒng)一:《關(guān)于代碼中SQL書寫方式的思考
          • 獨創(chuàng):日志中打印的 SQL,復(fù)制到數(shù)據(jù)庫就能執(zhí)行:《SQL日志問題排查的痛點
          • 獨創(chuàng):批量日志采樣,批量操作日志只能在開啟或關(guān)閉之間二選一?《關(guān)于批量日志的思考
          • 獨創(chuàng):SQL 模板中不僅可以判斷數(shù)據(jù)庫類型,還可以判斷數(shù)據(jù)庫版本:《多數(shù)據(jù)庫方言支持

          SQL模板優(yōu)化

          復(fù)雜的查詢或統(tǒng)計,還是要寫 sql 或 xml:

          • 一是因為太復(fù)雜無法封裝,強行封裝就會變成 hibernate,學(xué)習(xí)成本驟升,得不償失;
          • 二是獨立 SQL 方便 DBA 審查,而恰恰只有這部分復(fù)雜語句才是需要審查的。

          這方面也存在一些優(yōu)化點:

          • MyBatis 中大量的單表增刪改查語句也要用到 SQL 模板,對 DBA 審查來說只是一種干擾,并不會過多關(guān)注;
          • 多種數(shù)據(jù)庫就需要多套模板,但實際情況往往是多套模板大體相同,只有少量差異;
          • SQL 模板首先應(yīng)該是 SQL,然后其中有一些 XML 的判斷條件和循環(huán)語句,而不應(yīng)該是 XML 格式。

          詳見《SQL模板說明》。

          版本說明

          JDK 支持 jdk1.7+
          數(shù)據(jù)庫:MySQL、Oracle、DB2,做了較完整的測試。詳見《多數(shù)據(jù)庫方言支持》的【數(shù)據(jù)庫類型測試】

          POM依賴

          https://mvnrepository.com/artifact/com.gitee.qdbp/qdbp-jdbc-spring

              <dependency>
                  <groupId>com.gitee.qdbp</groupId>
                  <artifactId>qdbp-jdbc-spring</artifactId>
                  <version>3.2.6</version>
              </dependency>

          如果不是 spring-web 項目,可以單獨使用 qdbp-jdbc-core
          https://mvnrepository.com/artifact/com.gitee.qdbp/qdbp-jdbc-core

              <dependency>
                  <groupId>com.gitee.qdbp</groupId>
                  <artifactId>qdbp-jdbc-core</artifactId>
                  <version>3.2.6</version>
              </dependency>

           

          瀏覽 19
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <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>
                  天天淫色 | 无码区免费看一级毛片A片 | 狠狠干妹子 | 天天艹天天操 | 五月天啪啪啪 |