1、问题描述
SpringBoot使用MyBatis做数据库查询,当resultType="java.util.Map"时,查询结果数据库字段名并没有进行驼峰转换。检查MyBatis配置文件,驼峰转换时开启的。为什么不生效呢?
2、解决办法
经过一番百度,原来是因为MyBatis配置仅作用于javabean的field的,对于map并不会做转换。那么我们可以通过自定义MyBatis的MapWrapper来实现map类型的驼峰转换
1、增加pom依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.1-jre</version>
</dependency>
2、自定义MapWrapper
public class MspMapWrapper extends MapWrapper{
public MspMapWrapper(MetaObject metaObject, Map<String, Object> map) {
super(metaObject, map);
}
@Override
public String findProperty(String name, boolean useCamelCaseMapping) {
if(useCamelCaseMapping){
//引用的谷歌的 guava库,里面有CaseFormat是转换驼峰的,pom添加对应依赖即可
return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL,name);
}
return name;
}
}
3、替换MyBatis默认的map包装方法
@Configuration
public class MybatisConfig {
@Bean
public ConfigurationCustomizer mybatisConfigurationCustomizer(){
return new ConfigurationCustomizer() {
@Override
public void customize(org.apache.ibatis.session.Configuration configuration) {
configuration.setObjectWrapperFactory(new MapWrapperFactory());
}
};
}
}
转自:https://my.oschina.net/u/2278977/blog/1795969
补充!!!
改完一测试,发现不行,又经过一通乱试,原来我的MyBatis是通过mybatis-config.xml配置文件配置的。去除上面第三部的方法,改用在配置文件中增加配置搞定
<objectWrapperFactory type="com.summer.msp.core.wrapper.MapWrapperFactory"/>