Class OptLogMybatisInterceptor

java.lang.Object
cn.sinozg.applet.common.interceptor.OptLogMybatisInterceptor
All Implemented Interfaces:
org.apache.ibatis.plugin.Interceptor

@Signature(type=org.apache.ibatis.executor.statement.StatementHandler.class,method="batch",args=java.sql.Statement.class) @Signature(type=org.apache.ibatis.executor.statement.StatementHandler.class,method="update",args=java.sql.Statement.class) public class OptLogMybatisInterceptor extends Object implements org.apache.ibatis.plugin.Interceptor
原生mybatis拦截器实现类 batch
Since:
2024-02-27 18:24:18
Author:
xieyubin
  • Field Details

  • Constructor Details

    • OptLogMybatisInterceptor

      public OptLogMybatisInterceptor(OptLogProperties properties)
  • Method Details

    • plugin

      public Object plugin(Object target)
      Specified by:
      plugin in interface org.apache.ibatis.plugin.Interceptor
    • intercept

      public Object intercept(org.apache.ibatis.plugin.Invocation invocation) throws Throwable
      Specified by:
      intercept in interface org.apache.ibatis.plugin.Interceptor
      Throws:
      Throwable
    • interceptionChain

      private void interceptionChain(org.apache.ibatis.plugin.Invocation invocation)
      记录日志
      Parameters:
      invocation - Invocation
    • handleDataLog

      private void handleDataLog(String methodId, org.apache.ibatis.mapping.BoundSql boundSql, OptMapperTable mapperTable, org.apache.ibatis.mapping.SqlCommandType type, com.baomidou.mybatisplus.core.metadata.TableInfo tableInfo, org.apache.ibatis.session.Configuration configuration)
      设置单次sql 的基本信息
      Parameters:
      methodId - 请求id
      boundSql - boundSql
      mapperTable - mapperTable
      type - 类型
      tableInfo - 表配置
      configuration - configuration
    • modeEnum

      private ModeEnum modeEnum(org.apache.ibatis.mapping.SqlCommandType type, List<Map<String,Object>> newValues, Map<String,Map<String,Object>> oldValues)
      判定执行类型
      Parameters:
      type - 类型
      newValues - 新值
      oldValues - 旧值
      Returns:
      类型
    • oldValuesByDb

      private Map<String,Map<String,Object>> oldValuesByDb(org.apache.ibatis.session.Configuration configuration, org.apache.ibatis.mapping.BoundSql boundSql, OptMapperTable mapperTable, com.baomidou.mybatisplus.core.metadata.TableInfo tableInfo, String foreignIdName)
      从数据库根据sql 条件查询原始数据转为 id:需要记录字段map
      Parameters:
      configuration - configuration
      boundSql - boundSql
      mapperTable - mapperTable
      tableInfo - tableInfo
      foreignIdName - foreignIdName
      Returns:
      集合map
    • oneSql

      private Map<String,Map<String,Object>> oneSql(String originalSql, org.apache.ibatis.session.SqlSession sqlSession, String statementSql, org.apache.ibatis.mapping.BoundSql boundSql, OptMapperTable mapperTable, String foreignIdName)
      可能存在批量sql 执行单次sql
      Parameters:
      originalSql - sql语句
      sqlSession - Session
      statementSql - statementSql
      boundSql - boundSql
      mapperTable - 映射
      foreignIdName - 外键
      Returns:
      数据集
    • sqlValue

      private String sqlValue(Object obj)
      sql 值拼接
      Parameters:
      obj - 对象
      Returns:
    • indexOfSqlStart

      private int indexOfSqlStart(String sql)
      获取sql语句开头部分
      Parameters:
      sql - ignore
      Returns:
      ignore
    • isIgnoreMethod

      private boolean isIgnoreMethod(String methodId) throws Exception
      是否忽略
      Parameters:
      methodId - 方法
      Returns:
      是否忽略
      Throws:
      Exception - 异常
    • entityTable

      private org.apache.commons.lang3.tuple.Pair<com.baomidou.mybatisplus.core.metadata.TableInfo,OptMapperTable> entityTable(String sql)
      获取实体对象类型
      Parameters:
      sql - sql
      Returns:
      对象类型
    • sqlParams

      private Object sqlParams(org.apache.ibatis.mapping.BoundSql bound)
      获取参数,参数必须为实体对象
      Parameters:
      bound - bound
      Returns:
      实体
    • newValueMap

      private List<Map<String,Object>> newValueMap(Object object, OptMapperTable mapperTable, List<org.apache.ibatis.mapping.ParameterMapping> mappings)
      获取到参数组成的原始数据 可能没有主键 update 可以是一个 eg:where for_key = ? and stat = ? 可以是批量更新 insert 单个插入或者批量插入
      Parameters:
      object - 参数
      mapperTable - 实体对象配置
      Returns:
      集合
    • valueMap

      private Map<String,Object> valueMap(Object bean, OptMapperTable mapperTable, List<org.apache.ibatis.mapping.ParameterMapping> mappings, String foreignIdName)
    • getProperty

      private Object getProperty(Object bean, String propertyName) throws IllegalAccessException
      获取字段
      Parameters:
      bean - 实体
      propertyName - 属性名称
      Returns:
      Throws:
      IllegalAccessException - 异常
    • getTarget

      private <T> T getTarget(Object target)