1. 程式人生 > >SpringBoot使用自定義Mybatis攔截器

SpringBoot使用自定義Mybatis攔截器

註解 添加 attr 自動 自定義攔截器 enc 攔截 number ring

開發過程中經常回需要對要執行的sql加以自定義處理,比如分頁,計數等。通過 MyBatis 提供的強大機制,使用插件是非常簡單的,只需實現 Interceptor 接口,並指定想要攔截的方法簽名即可。

@Intercepts({@Signature(type = Executor.class,method = "query",args = {MappedStatement.class,Object.class, RowBounds.class,ResultHandler.class})})
public class MyPageInterceptor implements Interceptor {
    private static final Logger logger= LoggerFactory.getLogger(MyPageInterceptor.class);
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        logger.warn(invocation.toString());
        return invocation.proceed();
    }
    @Override
    public Object plugin(Object o) {
        return Plugin.wrap(o,this);
    }
    @Override
    public void setProperties(Properties properties) {
        logger.warn(properties.toString());
    }
}

我的配置

mybatis:
  type-aliases-package: me.zingon.pagehelper.model
  mapper-locations: classpath:mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true
    default-fetch-size: 100
    default-statement-timeout: 30

在springboot中要給mybatis加上這個攔截器,有三種方法,前兩種方法在啟動項目時不會自動調用自定義攔截器的setProperties方法。

第一種

直接給自定義攔截器添加一個 @Component註解,當調用sql時結果如下,可以看到攔截器生效了,但是啟動時候並沒有自動調用setProperties方法。
技術分享圖片

第二種

在配置類裏添加攔截器,這種方法結果同上,也不會自動調用setProperties方法。


@Configuration
public class MybatisConfig {
    @Bean
    ConfigurationCustomizer mybatisConfigurationCustomizer() {
        return new ConfigurationCustomizer() {
            @Override
            public void customize(org.apache.ibatis.session.Configuration configuration) {
                configuration.addInterceptor(new MyPageInterceptor());
            }
        };
    }
}

第三種

這種方法就是跟以前的配置方法類似,在yml配置文件中指定mybatis的xml配置文件,註意config-location屬性和configuration屬性不能同時指定

mybatis:
  config-location: classpath:mybatis.xml
  type-aliases-package: me.zingon.pagehelper.model
  mapper-locations: classpath:mapper/*.xml

mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <package name="me.zingon.pacargle.model"/>
    </typeAliases>
    <plugins>
        <plugin interceptor="me.zingon.pagehelper.interceptor.MyPageInterceptor"> 
            <property name="dialect" value="oracle"/>
        </plugin>
    </plugins>
</configuration>

可以看到,在啟動項目的時候setProperties被自動調用了
技術分享圖片

總結

前兩種方法可以在初始化自定義攔截器的時候通過 @Value 註解直接初始化需要的參數。

SpringBoot使用自定義Mybatis攔截器