1. 程式人生 > 其它 >mybatis 自動加sql_hibatis--mybatis,自動生成SQL, 通用Mapper, 通用Dao

mybatis 自動加sql_hibatis--mybatis,自動生成SQL, 通用Mapper, 通用Dao

技術標籤:mybatis 自動加sql

——從Mybatis到Hibernate、Spring data JPA,再到QueryDSL,用過了這些框架後,對各種框架的毛病已不勝其煩。在看到Mybatis Plus這樣的框架後,突發奇想,不如自己使用mybatis 定製一個數據庫持久層框架,實現SQL語句的自動生成。

一個Mybatis增強工具包。新增了5種SQL語句自動生成註解:ExecuteInsert, ExecuteSelect, ExecuteCount, ExecuteUpdate, ExecuteDelete。 實現了增刪改查語句自動生成。

a14059f0e49845db3ce6f1ff46460baa.png

特點

  1. 自動按需關聯表。自動收集實體類中宣告的關聯表、以及方法簽名中的引數註解宣告的關聯表,根據查詢引數引用到的關聯表、及查詢結果檢視中 用到的關聯表,自動對用到的表進行Join。支援左連線,內連線,右連線。
  2. 查詢結果支援檢視,類似於Jackson Json中的JsonView,可在ExecuteSelect註解中宣告查詢結果的檢視。生成的語句會根據查詢結果檢視中的欄位引用 的表,自動進行Join。如果檢視中包含1對1、1對多的關聯屬性,自動通過二次查詢設定屬性值。
  3. 支援攔截器對Mapper中方法的引數進行修改,以及新增額外的過濾條件和插入值(或更新值)。
  4. 支援預設過濾條件、預設插入值(或更新值)、預設排序。具體參考ExecuteInsert等語句自動生成註解。

實現思路

MybatisGenerator在監聽到ContextRefreshedEvent事件後,在所有已注入的擴充套件了BaseMapper或EmptyMapper的Mapper中查詢使用ExecuteInsert等 註解標註的方法,生成動態SqlSource,註冊MappedStatement。

快速開始

插入

ExecuteInsert方法嚴格限定只能宣告1個引數,可以是單個例項,也可以是集合型別(List或陣列)。引數型別可以是實體型別、Map型別及任意的java bean型別。生成插入語句時 根據實體類欄位名查詢引數中的同名欄位進行插入。

插入實體類例項:

@ExecuteInsertint insert(Entity entity);

插入陣列:

@ExecuteInsertint insertArray(T[] array);

插入列表(使用預設插入值):

@ExecuteInsert(columnValue = {@ColumnValue(field = "updateTime