背景:自定义的组件已经加载了DefaultSqlSessionFactory,并且对其进行了包装,在application.yaml中配置的有些选项无法起作用,无论是通过xml配置再加载,还是单个配置项再加载都不起作用。
mybatis:
basePackage: com.cvte.mapper # 多个逗号隔开
xmlLocation: classpath:mapper/**/*.xml
#选填,若需要就写上 否则 注释掉
typeAliasesPackage: com.cvte.demotest.entity
# config-location: classpath:mybatis-config/mybatis-global-config.xml 不起作用
# mapUnderscoreCamelCase: true 不起作用
由于项目已经加载了DefaultSqlSessionFactory,因此,只需要通过上下文获取该对象,再对其的Configuration对象进行修改即可。
具体为:通过@Configuration自动加载进行,需要注意该组件要在加载DefaultSlSessionFactory所在组件起作用之后再加载,因此需要在类上面添加@AutoConfigureAfter注解。
/**
* 修改DefaultSqlSessionFactory的mapUnderscoreToCamelCase
* @param sqlSessionFactory
*/
@Autowired
public GlobalMvcConfiguration(SqlSessionFactory sqlSessionFactory) {
DefaultSqlSessionFactory defaultSqlSessionFactory = null;
if(sqlSessionFactory instanceof DefaultSqlSessionFactory) {
defaultSqlSessionFactory = (DefaultSqlSessionFactory) sqlSessionFactory;
defaultSqlSessionFactory.getConfiguration().setMapUnderscoreToCamelCase(true);
System.out.println(1111);
}else {
defaultSqlSessionFactory = new DefaultSqlSessionFactory(new org.apache.ibatis.session.Configuration());
System.out.println(2222);
}
}