Jeesuite系列包含基础库、配置中心、统一认证平台、网关、快速开发平台五大部分(计划陆续开源)。提供灵活可靠的一站式解决方案、开箱即用。
其中,Jeesuite基础库提供了数据库、缓存、消息中间件、分布式定时任务、云存储等基础模块。每个组件都可以独立使用,十分方便.下面我们来看看mybatis拦截器在Jeesuite框架中的使用.
SpringBoot并没有为mybatis提供自动启动类,但是mybatis自己提供了
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> 在这里mybatis-spring-boot-autoconfigure-1.3.0.jar!\META-INF\spring.factories # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration 在JeesuiteMybatisConfiguration配置类中实现了InitializingBean @Configuration @EnableConfigurationProperties(MybatisPluginProperties.class) @ConditionalOnClass(MutiRouteDataSource.class) @AutoConfigureAfter(MybatisAutoConfiguration.class) public class JeesuiteMybatisConfiguration implements InitializingBean {}
所以springboot启动的时候会实例化MybatisAutoConfiguration类.
JeesuiteMybatisConfiguration还实现了afterPropertiesSet()方法.如下
if(org.apache.commons.lang3.StringUtils.isNotBlank(properties.getInterceptorHandlerClass())){
String[] customHanlderClass = StringUtils.tokenizeToStringArray(properties.getInterceptorHandlerClass(), ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
hanlders.addAll(Arrays.asList(customHanlderClass));
}
if (properties.isCacheEnabled()) {
hanlders.add(CacheHandler.NAME);
}
if (properties.isRwRouteEnabled()) {
hanlders.add(RwRouteHandler.NAME);
}
if (properties.isDbShardEnabled()) {
hanlders.add(DatabaseRouteHandler.NAME);
}
if (properties.isPaginationEnabled()) {
hanlders.add(PaginationHandler.NAME);
}
这里添加了默认的拦截器处理类.当然还可以自定义拦截器类,写在配置文件中
jeesuite.mybatis.interceptorHandlerClass=com.xxxxxx.xxxxxxx.XXXXXHandler
当然这个handler实现了InterceptorHandler接口,设置了
interceptorOrder优先级排序
当拦截器不为空时,调用setInterceptorHandlers方法初始化拦截器类,并且将拦截器加入sqlSessionFactory的配置类中,至此拦截器配置完成.
JeesuiteMybatisInterceptor interceptor = new JeesuiteMybatisInterceptor(); interceptor.setMapperLocations(mapperLocations); interceptor.setInterceptorHandlers(org.apache.commons.lang3.StringUtils.join(hanlders.toArray(), ",")); sqlSessionFactory.getConfiguration().addInterceptor(interceptor);
其中JeesuiteMybatisInterceptor是实现了
implements Interceptor,InitializingBean,DisposableBean,ApplicationContextAware
调用时将所有拦截器添加到了
List<InterceptorHandler> interceptorHandlers = new ArrayList<>();
并且按照优先级interceptorOrder参数排序.
mybatis拦截器起作用的关键就是:给sqlSessionFactory添加拦截器
@Configuration
public class AutoSetConfiguration {
@Autowired
private SqlSessionFactory sqlSessionFactory;
public AutoSetConfiguration() {
}
@PostConstruct
public void init() {
// 给sqlSessionFactory添加拦截器
this.sqlSessionFactory.getConfiguration().addInterceptor(new XXXXInterceptor());
}
}