為什麼說sqltoy-orm遠比mybatis強大

開源項目地址:https://github.com/chenrenfei/sagacity-sqltoy

文檔地址:https://chenrenfei.github.io/sqltoy/

1、sqltoy-orm 在對象操作領域類似於hibernate和jpa模式,提供load/loadAll、save/saveAll、update、delete等常規的對象操作。這個方向上大家差異性不大,並不需要寫sql。但update sqltoy則更具優勢,提供了update(entity,String[] forceUpdateProps) 類型的操作,可以實現一次數據庫交互完成部分字段變更,對項目實際場景的把握非常到位。

2、sqltoy-orm 提供了updateFetch功能,可以實現一次數據庫交互完成修改並返回修改結果,尤其適用於高併發場景鎖記錄操作,比如:庫存臺賬、資金臺賬、訂單臺賬,如客戶下單並扣除客戶資金的場景(往常需要先lockLoad,然後再更新數據再調用update)。

3、sqltoy-orm在sql編寫上,風格極為簡化直觀,尤其動態查詢條件場景下,更加符合開發習慣、更加符合後期閱讀和變更,同樣的功能實現,看一下mybatis和sqltoy的編寫方式

  • mybatis的寫法(看不明白意思,不利於運維和變更,而且學習成本很高,太多複雜的xml模式):
<code> select *
 from sqltoy_device_order_info t 
 
    
	and t.ORDER_ID=#{orderId}
    
 
	and t.ORGAN_ID in
	  
            #{order_id}  
 	  
  
    
	and t.STAFF_ID in
	  
            #{staff_id}  
 	  
    
    
	and t.TRANS_DATE>=#{beginDate}
    
    
	and t.TRANS_DATE
/<code>
  • sqltoy的寫法,簡潔直觀,dbeaver上調試完直接黏貼進來,很容易學習,基本上只有一個概念:#[]

等於if(null),且支持嵌套。當然少數情況下會結合類似於來對參數做轉null的邏輯歸一處理。

<code>select 	*
from sqltoy_device_order_info t 
where #[t.ORDER_ID=:orderId]
      #[and t.ORGAN_ID in (:authedOrganIds)]
      #[and t.STAFF_ID in (:staffIds)]
      #[and t.TRANS_DATE>=:beginDate]
      #[and t.TRANS_DATE/<code>

4、sqltoy-orm 提供了極為暢快淋漓的緩存翻譯,可以大幅減少表關聯,同時大幅提升查詢的性能。

比如:穿查詢訂單表,要體現下單員姓名、部門、訂單狀態名稱、客戶名稱、商品名稱,你的sql怎麼寫?又長又臭性能還低是必然的!

而sqltoy則利用緩存翻譯幾乎可以變成單表查詢:

為什麼說sqltoy-orm遠比mybatis強大

5、sqltoy提供了極為通透的分頁優化,幾乎可以肯定了解sqltoy的分頁優化策略完全可以不care其他的分頁了,因為其他的分頁只考慮了最初級的模式。分頁共分4個等級:

  1. 實現基於數據庫方言的分頁
  2. 考慮count語句的優化,避免select 和from之間的計算、避免有order by等影響性能的不必要的性能浪費。
  3. 實現快速分頁,即在多表關聯場景下,針對條件區域先實現分頁,然後再跟其他表進行關聯或計算。
  4. 利用緩存模式,直接避免每次都取count記錄。
為什麼說sqltoy-orm遠比mybatis強大


6、sqltoy是根本上杜絕sql注入的,因為sqltoy對查詢條件不是拼接,而是全部轉為預編譯傳參模式。

為什麼說sqltoy-orm遠比mybatis強大

7、sqltoy 提供了非常符合開發者的算法集成,如無限級的分組彙總求平均、行轉列、列轉行、同比環比計算,而這些往往都是普通開發者的弱點(靠sql寫不出或者換了數據庫又不通用)

具體參見:https://chenrenfei.github.io/sqltoy/#/

為什麼說sqltoy-orm遠比mybatis強大


為什麼說sqltoy-orm遠比mybatis強大

8、sqltoy提供了常規的直接調用:如取隨機記錄、取top記錄、唯一性校驗(isUnique)、取總記錄數等

為什麼說sqltoy-orm遠比mybatis強大

9、sqltoy提供了對樹形結構表的跨數據庫解決方案wrapTreeTableRoute,將表結構中統一構建節點路徑、節點等級、是否葉子節點。


為什麼說sqltoy-orm遠比mybatis強大

10、sqltoy提供了分庫分表功能,而且執行過程是並行計算的。

為什麼說sqltoy-orm遠比mybatis強大


11、sqltoy提供了統一字段賦值,解決創建時間、創建人、修改時間、修改人等信息的統一賦值。


為什麼說sqltoy-orm遠比mybatis強大

12、sqltoy提供了跨數據庫函數自動替換功能,比如concat、ws_concat、decode、date_format、if、instr、nvl、sysdate 、length、to-char、to-number、trim 等函數的自動轉換適配。有助於軟件產品在一種數據庫下開發,不同數據庫下執行。

13、其他的還有很多特性,如sql變更自動加載便於開發調試;超時sql打印等,就不一一介紹了。


sqltoy-orm已經在多家銀行和企業應用,有興趣我們可以一起來發展完善一個屬於中國人的ORM框架!


分享到:


相關文章: