在 diboot 2.0版本框架的封裝過程當中,咱們遇到的問題和最終的解決方案也許能夠給此時的你提供些幫助和思路,因而就有了這些系列文章。此係列主題爲「Mybatis單表CRUD與多表關聯的無SQL實現方案」,目的是給出一套簡單靈活易用的通用方案,能夠作到1.利用通用Mapper框架實現單表CRUD無SQL,2.封裝基於註解的多表關聯自動綁定的無SQL實現方案。
Mybatis中針對一個單表的CRUD操做通常要在其對應Mapper中寫SQL,表的字段名會屢次出現,當字段變動,增減時都須要同步修改其Mapper,繁瑣且易出錯。針對於單表的CRUD是比較簡單的,能夠在Entity中將字段與數據庫表的列進行綁定,而後藉助一個通用Mapper實現通用的CRUD,這樣針對單表CRUD的操做將再也不須要寫SQL。mysql
Mybatis-plus v3.x版本除了提供通用Mapper以外,還具有了方便易用的基於Lambda的條件構造器以及邏輯刪除樂觀鎖等解決方案。git
另外也有其餘輕量級的通用Mapper實現,好比Mapper 4.x,也是一個通用Mapper框架的選擇。github
若是隻是單表的CRUD,通用mapper方案確實跟JPA相似,不過JPA在Java代碼裏寫SQL和對於複雜查詢的處理不便,都帶來了開發維護的麻煩。依然選用Mybatis方案,既藉助通用Mapper實現了相似JPA的單表處理便利性,又保留了Mybatis自定義SQL的靈活性優點。sql
對於多表關聯的處理,通用Mapper並無給出較好的解決方案,你能夠經過自定義SQL關聯查詢綁定,每一個都要去寫SQL,這樣很繁瑣。另一個方案就是相似JPA的經過註解綁定表關聯關係,而後實現查詢結果的綁定。這個方案能夠將關聯查詢拆解成多個單表查詢,而後根據綁定關係組裝最終結果,後續咱們經過自定義封裝實現這個方案,按需定製你的關聯綁定方案。數據庫
至於爲什麼要將關聯查詢拆解成單表查詢,能夠到<高性能MySQL>一書中瞭解分解關聯查詢的好處。緩存
歸納來說,優勢 以下:app