qdbp-jdbc數(shù)據(jù)庫 ORM 框架
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>
評論
圖片
表情
