list mybatis 接收 类型_基于mybatis拦截器实现的一款简易影子表自动切换插件
生活随笔
收集整理的這篇文章主要介紹了
list mybatis 接收 类型_基于mybatis拦截器实现的一款简易影子表自动切换插件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
近期因工作需要,小編基于mybatis攔截器開發了一款簡易影子表自動切換插件,可以根據配置實現動態修改表名,即將對原source table表的操作自動切換到對target table表的操作。該插件既可以支持對簡單的單表操作,也可以支持復雜的多表聯合操作。源碼地址:https://github.com/Jimbean0615/mybatis-plugins/blob/main/mybatis-plugin-spring-boot-starter/src/main/java/com/jimbean/mybatis/plugin/interceptor/GrayShadowInterceptor.java下面來說說如何實現mybatis以自定義插件?
1. MyBatis核心部件
從MyBatis代碼實現的角度來看,MyBatis的主要的核心部件有以下幾個:
| name | description |
|---|---|
| SqlSession | 作為MyBatis工作的主要頂層API,表示和數據庫交互的會話,完成必要數據庫增刪改查功能 |
| Executor | MyBatis執行器,是MyBatis 調度的核心,負責SQL語句的生成和查詢緩存的維護 |
| StatementHandler | 封裝了JDBC Statement操作,負責對JDBC statement 的操作,如設置參數、將Statement結果集轉換成List集合 |
| ParameterHandler | 負責對用戶傳遞的參數轉換成JDBC Statement 所需要的參數 |
| ResultSetHandler | 負責將JDBC返回的ResultSet結果集對象轉換成List類型的集合 |
| TypeHandler | 負責java數據類型和jdbc數據類型之間的映射和轉換 |
| MappedStatement | MappedStatement維護了一條節點的封裝 |
| SqlSource | 負責根據用戶傳遞的parameterObject,動態地生成SQL語句,將信息封裝到BoundSql對象中,并返回 |
| BoundSql | 表示動態生成的SQL語句以及相應的參數信息 |
| Configuration | MyBatis所有的配置信息都維持在Configuration對象之中 |
2. MyBatis核心部件的層次結構關系
3. 如何擴展?
基于MyBatis Interceptor插件機制- 攔截器(Interceptor)在 MyBatis 中被當做插件(plugin)對待,官方文檔提供了Executor(攔截執行器的方法),ParameterHandler(攔截參數的處理),ResultSetHandler(攔截結果集的處理),StatementHandler(攔截Sql語法構建的處理)共4種,并且提示“這些類中方法的細節可以通過查看每個方法的簽名來發現,或者直接查看MyBatis發行包中的源代碼
- 攔截器的使用場景主要是更新數據庫的通用字段,分庫分表,加解密等的處理
- 我們使用Interceptor機制對執行的Sql進行攔截并追加邏輯,示例代碼如下:
/** * @author zhangjb * @ClassName: MyInterceptor * @Description: 測試mybatis攔截器 * * 攔截方法 {@link org.apache.ibatis.executor.statement.StatementHandler#prepare(Connection, Integer)} */@Slf4j@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})public class MyInterceptor implements Interceptor { ..... @Override public Object intercept(Invocation invocation) throws Throwable { try { // do something } catch (Throwable throwable) { log.warn("MyInterceptor: {}", Throwables.getStackTraceAsString(throwable)); } return invocation.proceed(); }??? ......}4. 兼容性
另外還需要注意的是mybatis-spring、mybatis、spring這三個包的兼容性,官方給出的兼容方案如下:總結
以上是生活随笔為你收集整理的list mybatis 接收 类型_基于mybatis拦截器实现的一款简易影子表自动切换插件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: laravel carbon 格式化日期
- 下一篇: hbase 数据插入指定rowkey_「