天天看點

mybatis支援駝峰自動轉換sql嗎_mybatis怎麼把下劃線字段轉為駝峰變量

一.使用方法

1.xml配置方法,mybatis-config.xml的配置如下

當然前題是先要加載這個配置檔案,如用spring xml是這麼加載

2.springboot的application.properties的配置方法

#開啟駝峰命名轉換

mybatis.configuration.map-underscore-to-camel-case=true

如果是多資料源,要在配置sessionFactory時配置一下,代碼如下:

@Bean

@ConfigurationProperties(prefix="mybatis.configuration")

public org.apache.ibatis.session.Configuration mybatisConfig() {

return new org.apache.ibatis.session.Configuration();

}

@Bean

public SqlSessionFactory sqlSessionFactory(org.apache.ibatis.session.Configuration config) throws Exception {

SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

sqlSessionFactoryBean.setDataSource(dynamicDataSource());

//此處設定為了解決找不到mapper檔案的問題

sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper*.xml"));

sqlSessionFactoryBean.setConfiguration(config);

return sqlSessionFactoryBean.getObject();

}

@Bean

public SqlSessionTemplate sqlSessionTemplate(org.apache.ibatis.session.Configuration config) throws Exception {

return new SqlSessionTemplate(sqlSessionFactory(config));

}

二、源碼分析

先看一下轉化的調用堆棧:

mybatis支援駝峰自動轉換sql嗎_mybatis怎麼把下劃線字段轉為駝峰變量

代碼如下(org.apache.ibatis.reflection.MetaClass):

mybatis支援駝峰自動轉換sql嗎_mybatis怎麼把下劃線字段轉為駝峰變量

上面代碼隻是去掉了下劃線,并沒有首字母小寫變大寫的代碼。再跟進findProperty方法可以找到擷取駝峰結果的代碼如下:

mybatis支援駝峰自動轉換sql嗎_mybatis怎麼把下劃線字段轉為駝峰變量

可以看出通過reflector.findPropertyName方法把去掉下劃線的變量轉成了駝峰的變量。再跟過去看到這樣的代碼:

mybatis支援駝峰自動轉換sql嗎_mybatis怎麼把下劃線字段轉為駝峰變量

那麼caseInsensitivePropertyMap這個集合又是什麼時候初始化的呢?原來是系統啟動時,spring加載上下文的時候:

而它的key其實是實體類的set與get方法後面的字元(org.apache.ibatis.reflection.Reflector.addGetMethods,org.apache.ibatis.reflection.property.PropertyNamer.methodToProperty),而這個方法一般都是标準的駝峰格式。是以當get(大寫字段)名時,可以得到标準的駝峰字段名。

mybatis支援駝峰自動轉換sql嗎_mybatis怎麼把下劃線字段轉為駝峰變量

再把整個流程整理一下:

mybatis支援駝峰自動轉換sql嗎_mybatis怎麼把下劃線字段轉為駝峰變量

是以其實不是轉換下劃線,而是去掉下劃線,再取駝峰的變量。不過最後的效果與轉換的一樣。

評論:

mybatis支援駝峰自動轉換sql嗎_mybatis怎麼把下劃線字段轉為駝峰變量

送出