mybatis 自動加sql_hibatis--mybatis,自動生成SQL, 通用Mapper, 通用Dao
阿新 • • 發佈:2021-01-30
技術標籤:mybatis 自動加sql
——從Mybatis到Hibernate、Spring data JPA,再到QueryDSL,用過了這些框架後,對各種框架的毛病已不勝其煩。在看到Mybatis Plus這樣的框架後,突發奇想,不如自己使用mybatis 定製一個數據庫持久層框架,實現SQL語句的自動生成。
一個Mybatis增強工具包。新增了5種SQL語句自動生成註解:ExecuteInsert, ExecuteSelect, ExecuteCount, ExecuteUpdate, ExecuteDelete。 實現了增刪改查語句自動生成。
特點
- 自動按需關聯表。自動收集實體類中宣告的關聯表、以及方法簽名中的引數註解宣告的關聯表,根據查詢引數引用到的關聯表、及查詢結果檢視中 用到的關聯表,自動對用到的表進行Join。支援左連線,內連線,右連線。
- 查詢結果支援檢視,類似於Jackson Json中的JsonView,可在ExecuteSelect註解中宣告查詢結果的檢視。生成的語句會根據查詢結果檢視中的欄位引用 的表,自動進行Join。如果檢視中包含1對1、1對多的關聯屬性,自動通過二次查詢設定屬性值。
- 支援攔截器對Mapper中方法的引數進行修改,以及新增額外的過濾條件和插入值(或更新值)。
- 支援預設過濾條件、預設插入值(或更新值)、預設排序。具體參考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