springboot+mybatis+oracle 下劃線欄位對應的駝峰欄位沒有值問題。
阿新 • • 發佈:2018-12-12
剛搭建了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); } }
搞定。