@org.springframework.context.annotation.Configuration
@MapperScan(basePackages = {"xxx.xxx.xxx"})
public class MybatisPlusConfig {
    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        ConfigurationCustomizer time = new ConfigurationCustomizer() {
            @Override
            public void customize(Configuration configuration) {
                MyMetaDataInterceptor myPlugin = new MyMetaDataInterceptor();
                Properties properties = new Properties();
                //这里设置慢查询阈值为1毫秒,便于测试
                properties.setProperty("xxxtest", "xxx");
                myPlugin.setProperties(properties);
                configuration.addInterceptor(myPlugin);
            }
        };
        return time;
    }
}
  @Intercepts({
        @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})
})
public class MyMetaDataInterceptor implements Interceptor {
    private static Logger log = LoggerFactory.getLogger(MyMetaDataInterceptor.class);
    private String xxxtest;
    //方法拦截
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        log.info("测试配置文件的值:"+xxxtest);
        //通过StatementHandler获取执行的sql
        StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
        Connection con = (Connection) invocation.getArgs()[0];
        MetaObject metaObject = MetaObject.forObject(statementHandler, SystemMetaObject.DEFAULT_OBJECT_FACTORY, SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY, new DefaultReflectorFactory());
        //String value= (String) metaObject.getValue("delegate.mappedStatement.id");
        //log.info("方法名为:"+value);
        BoundSql boundSql = statementHandler.getBoundSql();
        String sql = boundSql.getSql();
        PreparedStatement prepareStatement = con.prepareStatement(sql);
        //ParameterHandler paraHander = (ParameterHandler) metaObject.getValue("delegate.parameterHandler");
        //paraHander.setParameters(prepareStatement);
        ResultSetMetaData rsmd = prepareStatement.getMetaData();
        for (int i = 0; i < rsmd.getColumnCount(); i++) {
            String cloName=rsmd.getColumnLabel(i + 1);
            log.info(cloName);
        }
        Object proceed = invocation.proceed();
        return proceed;
    }
    //获取到拦截的对象,底层也是通过代理实现的,实际上是拿到一个目标代理对象
    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }
    @Override
    public void setProperties(Properties properties) {
        this.xxxtest = properties.getProperty("xxxtest");
    }
}