Mybatis單表CRUD與多表關聯的無SQL實現方案_1: 無SQL實現單表CRUD

diboot 2.0版本框架的封裝過程當中,咱們遇到的問題和最終的解決方案也許能夠給此時的你提供些幫助和思路,因而就有了這些系列文章。此係列主題爲「Mybatis單表CRUD與多表關聯的無SQL實現方案」,目的是給出一套簡單靈活易用的通用方案,能夠作到1.利用通用Mapper框架實現單表CRUD無SQL,2.封裝基於註解的多表關聯自動綁定的無SQL實現方案。

1、Mybatis的CRUD通用解決方案

爲何須要通用Mapper?

Mybatis中針對一個單表的CRUD操做通常要在其對應Mapper中寫SQL,表的字段名會屢次出現,當字段變動,增減時都須要同步修改其Mapper,繁瑣且易出錯。針對於單表的CRUD是比較簡單的,能夠在Entity中將字段與數據庫表的列進行綁定,而後藉助一個通用Mapper實現通用的CRUD,這樣針對單表CRUD的操做將再也不須要寫SQL。mysql

通用Mapper框架的選擇

Mybatis-plus v3.x版本除了提供通用Mapper以外,還具有了方便易用的基於Lambda的條件構造器以及邏輯刪除樂觀鎖等解決方案。git

另外也有其餘輕量級的通用Mapper實現,好比Mapper 4.x,也是一個通用Mapper框架的選擇。github

用上了通用Mapper,感受越像JPA了?

若是隻是單表的CRUD,通用mapper方案確實跟JPA相似,不過JPA在Java代碼裏寫SQL和對於複雜查詢的處理不便,都帶來了開發維護的麻煩。依然選用Mybatis方案,既藉助通用Mapper實現了相似JPA的單表處理便利性,又保留了Mybatis自定義SQL的靈活性優點。sql

多表關聯如何處理?

對於多表關聯的處理,通用Mapper並無給出較好的解決方案,你能夠經過自定義SQL關聯查詢綁定,每一個都要去寫SQL,這樣很繁瑣。另一個方案就是相似JPA的經過註解綁定表關聯關係,而後實現查詢結果的綁定。這個方案能夠將關聯查詢拆解成多個單表查詢,而後根據綁定關係組裝最終結果,後續咱們經過自定義封裝實現這個方案,按需定製你的關聯綁定方案。數據庫

至於爲什麼要將關聯查詢拆解成單表查詢,能夠到<高性能MySQL>一書中瞭解分解關聯查詢的好處緩存

歸納來說,優勢 以下:app

  • 讓緩存的效率更高,緩存的利用率會越高,效率固然就會越好。關聯查詢若是某個表發生變化,就沒法使用緩存了。
  • 將查詢分解後,執行單個查詢能夠減小鎖的競爭。
  • 在應用層作關聯,能夠更容易的對數據庫進行拆分,更容易作到高性能和高擴展性。
  • 查詢自己效率也會提高。
  • 能夠減小冗餘記錄的查詢。
  • 更進一步,這樣作至關於在應用中實現了哈希關聯,而不是使用mysql的嵌套循環關聯。某些場景哈希關聯的效率要高不少。

Diboot - 簡單高效的輕代碼開發框架框架

相關文章
相關標籤/搜索