1、前言
这个东西卡了我一天,终于弄好了,写个博客庆祝一下,顺便让帮助别人。
我司有个需求,记录特定功能执行的sql,并存入数据库,这时我就想到了mybatis的拦截器。
2、参考文献:
https://blog.youkuaiyun.com/minghao0508/article/details/124420953
https://www.jb51.net/article/236467.htm
https://blog.youkuaiyun.com/tif_very/article/details/115034221
https://pythonjishu.com/mgghxgbqafqmtmt/
3、获得完整SQL、 存入数据库
问题在于存入数据库,Mybatis的插件先于spring容器的完全初始化,虽然加了@Component会被扫描加入容器管理,但是此时Mybatis的拦截器Dblnterceptor注入的对象EncryptManager是还未初始化到容器的。所以通过这种方式拿到的bean为空。
简单来说就是@Autowired 不管用,得用别的方法,这个方法就是创建SpringBeanUtils工具类getBean,文献3有代码。
package com.ty.crm.util;
import com.spire.pdf.packages.spreG;
import com.ty.crm.DO.Sys_Operation_LogDo;
import com.ty.crm.mapper.OperationLogMapper;
import com.ty.crm.shior.token.manager.TokenManager;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
@Intercepts(
{
@Signature(type = Executor.class,