刚搭建了springboot+mybatis+oracle项目,然后反向工程了实体,demo查询了一下,log能打出SQL,而且能正常返回实体内容。
当时就是 哇! 居然这么顺。。。。。么? 并没有,刚开始对接接口的时候,就是部分字段没有值,我擦的,我用日志打印的SQL执行了一下,尼玛没毛病啊。然后跟一下实体吧,我擦为毛部分字段有值,部分是NULL,然后就是薅头发阶段。
然后观察了几个字段,驼峰的都没有值,其他值都正常获取。也就是说问题出在mybatis配置上了,下划线字段跟驼峰映射不支持。之前还特意看了一眼 baseResultMap 列名对应property,没毛病啊,反向工程也不会出这个错的。然后就百度看看驼峰那的相关配置。
上代码:
application.properties (yml 自己调整格式)
#驼峰
mybatis.configuration.map-underscore-to-camel-case=true
DataSourceConfig:
配置方法:globalConfiguration();
然后在 SqlSessionFactory 加载上面的配置信息。
package com.demo.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration
//指定扫描的mapper接口所在的包
@MapperScan(basePackages = "com.demo.mapper", sqlSessionFactoryRef = "DBDataSqlSessionFactory")
public class DataSourceConfig {
@Bean(name = "DBDataSource")
@ConfigurationProperties(prefix="spring.datasource") //告诉自动加载配置的属性
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="mybatis.configuration")
/**
* 增加此部分 获取配置文件中的mybatis配置信息
*/
public org.apache.ibatis.session.Configuration globalConfiguration(){
return new org.apache.ibatis.session.Configuration();
}
@Bean(name = "DBDataSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("DBDataSource") DataSource dataSource,org.apache.ibatis.session.Configuration config)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
/**加载application 驼峰配置*/
bean.setConfiguration(config);
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/*.xml"));
return bean.getObject();
}
@Bean(name = "DBDataTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("DBDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "DBDataSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(
@Qualifier("DBDataSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
搞定。