SpringBoot使用自定義Mybatis攔截器
阿新 • • 發佈:2019-03-29
註解 添加 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攔截器