開源地址:
- github: https://github.com/sagframe/sagacity-sqltoy
- gitee: https://gitee.com/sagacity/sagacity-sqltoy
- idea 插件 (可直接在 idea 中檢索安裝): https://github.com/threefish/sqltoy-idea-plugins
- sqltoy 腳手架項目:https://gitee.com/momoljw/sss-rbac-admin
- sqltoy lambda 項目: https://gitee.com/gzghde/sqltoy-plus
更新內容
1、優化updateSaveFetch增強不同數據類型處理(感謝@rabbit的反饋)
/**
* @TODO 適用于庫存臺賬、客戶資金賬等高并發強事務場景,一次數據庫交互實現:
* <p>
* <li>1、鎖查詢;</li>
* <li>2、記錄存在則修改;</li>
* <li>3、記錄不存在則執行insert;</li>
* <li>4、返回修改或插入的記錄信息</li>
* </p>
* @param <T>
* @param entity 盡量不要使用identity、sequence主鍵
* @param updateRowHandler
* @param uniqueProps 唯一性字段,用于做唯一性檢索,不設置則按照主鍵進行查詢
* @return
*/
public <T extends Serializable> T updateSaveFetch(final T entity, final UpdateRowHandler updateRowHandler,final String... uniqueProps);
sqltoy-orm是JPA和超強查詢的融合體
JPA部分
- 類似JPA的對象化CRUD、對象級聯加載和新增、更新
- 強化update操作,提供彈性字段修改能力,不同于hibernate先load后修改,而是一次數據庫交互完成修改,確保了高并發場景下數據的準確性
- 改進了級聯修改,提供了先刪除或者先置無效,再覆蓋的操作選項
- 增加了updateFetch、updateSaveFetch功能,強化針對強事務高并發場景的處理,類似庫存臺賬、資金臺賬,實現一次數據庫交互,完成鎖查詢、不存在則插入、存在則修改,并返回修改后的結果
- 增加了樹結構封裝,便于統一不同數據庫樹型結構數據的遞歸查詢
- 支持分庫分表、支持多種主鍵策略(額外支持基于redis的產生特定規則的業務主鍵)、加密存儲、數據版本校驗
- 提供了公共屬性賦值(創建人、修改人、創建時間、修改時間、租戶)、擴展類型處理等
- 提供了多租戶統一過濾和賦值、提供了數據權限參數帶入和越權校驗
查詢部分
- 極為直觀的sql編寫方式,便于從客戶端<-->代碼 雙向快速遷移,便于后期變更維護
- 支持緩存翻譯、反向緩存匹配key代替like模糊查詢
- 提供了跨數據庫支持能力:不同數據庫的函數自動轉換適配,多方言sql根據實際環境自動匹配、多數據庫同步測試,大幅提升了產品化能力
- 提供了取top記錄、隨機記錄等特殊場景的查詢功能
- 提供了最強大的分頁查詢機制:1)自動優化count語句;2)提供基于緩存的分頁優化,避免每次都執行count查詢;3)提供了獨具特色的快速分頁;4)提供了并行分頁
- 提供了分庫分表能力
- 提供了在管理類項目中極為價值的:分組匯總計算、行列轉換(行轉列、列轉行)、同比環比、樹形排序、樹形匯總 相關算法自然集成
- 提供了基于查詢的層次化數據結構封裝
- 提供了大量輔助功能:數據脫敏、格式化、條件參數預處理等
支持多種數據庫
- 常規的mysql、oracle、db2、postgresql、 sqlserver、dm、kingbase、sqlite、h2、 oceanBase、polardb、guassdb、tidb
- 支持分布式olap數據庫: clickhouse、StarRocks、greenplum、impala(kudu)
- 支持elasticsearch、mongodb
- 所有基于sql和jdbc 各類數據庫查詢
sqltoy 特點介紹:
- sqltoy 的核心構建思想
- sqltoy 的對比 mybatis (plus) 的核心點:查詢語句編寫、可閱讀性、可維護性
- 對象化 crud 是基礎,但 sqltoy 有針對性的改進:update、updateSaveFetch、updateFetch 等
- sqltoy 的緩存翻譯,大幅減少表關聯簡化 sql,讓你的查詢性能成幾何級提升
- 極致的分頁,同樣幫助你實現查詢的性能大幅提升
- 快速分頁:@fast () 實現先取單頁數據然后再關聯查詢,極大提升速度
- 分頁優化器:page-optimize 讓分頁查詢由兩次變成 1.3~1.5 次 (用緩存實現相同查詢條件的總記錄數量在一定周期內無需重復查詢
- sqltoy 的分頁取總記錄的過程不是簡單的 select count (1) from (原始 sql);而是智能判斷是否變成:select count (1) from 'from 后語句 ', 并自動剔除最外層的 order by
- sqltoy 支持并行查詢:parallel="true",同時查詢總記錄數和單頁數據,大幅提升性能
- 便利的跨數據庫統計計算:數據旋轉
- 便利的跨數據庫統計計算:無限極分組統計 (含匯總求平均)
- 便利的跨數據庫統計計算:同比環比
5、樹形表排序匯總
6、擴展集成