最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot之mybatis整合配置源碼過程分析

 更新時(shí)間:2025年11月03日 08:47:10   作者:0和1搭建網(wǎng)絡(luò)世界  
文章介紹了如何在MyBatis中進(jìn)行源碼分析,特別是關(guān)于如何配置駝峰命名映射關(guān)系,文章詳細(xì)解釋了三種配置方法,包括使用`mybatis.config-location`、直接在`yml`文件中配置以及通過實(shí)現(xiàn)`ConfigurationCustomizer`接口進(jìn)行自定義配置

源碼分析

1.添加依賴

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>

2.源碼

查看mybatis的配置MybatisAutoConfiguration源碼,部分源碼如下:

@Bean
  @ConditionalOnMissingBean
  public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
    //給創(chuàng)建的工廠設(shè)置數(shù)據(jù)源
    factory.setDataSource(dataSource);
    factory.setVfs(SpringBootVFS.class);
    //判斷properties對(duì)象的屬性ConfigLocation值是否存在
    //查看properties是MybatisProperties類的對(duì)象
    /**
    //根據(jù)上面的代碼,以及下面的代碼片段,可以看出來configLocation是設(shè)置MyBatis全局配置文件的路徑
    //從下面代碼可以看出yml中設(shè)置的key值為:mybatis.config-location
	@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)
	public class MybatisProperties {
	  public static final String MYBATIS_PREFIX = "mybatis";
	  
	  //Location of MyBatis xml config file.
	  private String configLocation;
	}
    */
    //此處標(biāo)記A
    if (StringUtils.hasText(this.properties.getConfigLocation())) {
      factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
    }
    
    //也是從MybatisProperties類的對(duì)象properties中獲取configuration配置的值
    //如果yml中沒有配置mybatis.configuration值,則下面configuration獲取為null
    //此處標(biāo)記B
    Configuration configuration = this.properties.getConfiguration();
    //如果yml中沒有配置configuration的值,并且configLocation也未配置時(shí),創(chuàng)建一個(gè)空的configuration對(duì)象
    if (configuration == null && !StringUtils.hasText(this.properties.getConfigLocation())) {
      configuration = new Configuration();
    }
    //由于上一步創(chuàng)建了一個(gè)空的configuration對(duì)象,則configuration != null
    //configurationCustomizers這個(gè)List<ConfigurationCustomizer>是否不為空
    //滿足上面條件,則執(zhí)行下面方法
    /**
	public interface ConfigurationCustomizer {

   	//Customize the given a {@link Configuration} object.
   	//@param configuration the configuration object to customize
  	void customize(Configuration configuration);
  	
	}
	*/
	//此處標(biāo)記C
    if (configuration != null && !CollectionUtils.isEmpty(this.configurationCustomizers)) {
      for (ConfigurationCustomizer customizer : this.configurationCustomizers) {
        customizer.customize(configuration);
      }
    }
    //給工廠設(shè)置配置信息
    factory.setConfiguration(configuration);
   ....................
  }

3.實(shí)例

配置駝峰命名映射關(guān)系的方法

先找到控制駝峰命名的屬性:

由下面代碼可以看出:

控制駝峰命名的屬性是在MybatisProperties類下的configuration對(duì)象中的mapUnderscoreToCamelCase屬性

@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)
public class MybatisProperties {

  public static final String MYBATIS_PREFIX = "mybatis";

  /**
   * A Configuration object for customize default settings. If {@link #configLocation}
   * is specified, this property is not used.
   */
  @NestedConfigurationProperty
  private Configuration configuration;
  .........
}
public class Configuration {

  protected Environment environment;

  protected boolean safeRowBoundsEnabled;
  protected boolean safeResultHandlerEnabled = true;
  //控制是否開啟駝峰命名
  protected boolean mapUnderscoreToCamelCase;
  ..........
}

方法一:

從上面MybatisAutoConfiguration源碼片段分析:

標(biāo)記A處如果在yml中設(shè)置了mybatis.config-location值,直接從mybatis的全局配置文件中取

mybatis:
  config-location: classpath:mybatis-config.xml

以及根據(jù)上面找到的控制駝峰命名的屬性位置,則可在mybatis全局配置文件進(jìn)行如下賦值

<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"></setting>
    </settings>
</configuration>

方法二:

標(biāo)記A處未設(shè)置mybatis.config-location值,

標(biāo)記B處直接從MybatisProperties類下的configuration對(duì)象獲取配置信息,這也就是直接通過yml配置

mybatis:
  configuration:
    mapUnderscoreToCamelCase: true

方法三:

上面兩種方法較為常見,最后一種方法:

當(dāng)沒有設(shè)置mybatis.config-location,也沒有在yml中配置mybatis.configuration時(shí),我們可以看出,

標(biāo)記B處,會(huì)走進(jìn)if方法,創(chuàng)建一個(gè)空的configuration對(duì)象

而在標(biāo)記C處,只要保證集合List不為空,也是能實(shí)現(xiàn)configuration的設(shè)值

從源碼看出,ConfigurationCustomizer為一個(gè)接口,其customize方法的入?yún)⑹莄onfiguration

那我們可以自己實(shí)現(xiàn)其方法,對(duì)configuration進(jìn)行賦值

@Component
public class MyConfigurationCustomizer implements ConfigurationCustomizer {
    @Override
    public void customize(Configuration configuration) {
        configuration.setMapUnderscoreToCamelCase(true);
    }
}

注意:實(shí)現(xiàn)其方法后,要將實(shí)現(xiàn)類注入到IOC容器中,這樣spring才會(huì)將這些對(duì)象放入到List

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java 實(shí)現(xiàn)微信服務(wù)器下載圖片到自己服務(wù)器

    java 實(shí)現(xiàn)微信服務(wù)器下載圖片到自己服務(wù)器

    這篇文章主要介紹了 java 實(shí)現(xiàn)微信服務(wù)器下載圖片到自己服務(wù)器的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java字符串的大寫字母右移實(shí)現(xiàn)方法

    java字符串的大寫字母右移實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava字符串的大寫字母右移實(shí)現(xiàn)方法。小編覺得聽不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java編程之如何通過JSP實(shí)現(xiàn)頭像自定義上傳

    Java編程之如何通過JSP實(shí)現(xiàn)頭像自定義上傳

    之前做這個(gè)頭像上傳功能還是花了好多時(shí)間的,今天我將我的代碼分享給大家,下面這篇文章主要給大家介紹了關(guān)于Java編程之如何通過JSP實(shí)現(xiàn)頭像自定義上傳的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Java try catch finally異常處理組合詳解

    Java try catch finally異常處理組合詳解

    這篇文章主要介紹了Java try catch finally異常處理組合詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java 字符串截取及常見場景與方法詳解

    Java 字符串截取及常見場景與方法詳解

    在 Java 開發(fā)中,截取字符串是一個(gè)非常常見的操作,無論是獲取文件名還是提取某些特定內(nèi)容,本文詳細(xì)介紹了截取字符串最后一位及其他常見截取操作的多種方法,幫助開發(fā)者快速上手,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Java時(shí)間處理第三方包Joda?Time使用詳解

    Java時(shí)間處理第三方包Joda?Time使用詳解

    這篇文章主要為大家介紹了Java時(shí)間處理第三方包Joda?Time使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • spring cloud alibaba Nacos 注冊(cè)中心搭建過程詳解

    spring cloud alibaba Nacos 注冊(cè)中心搭建過程詳解

    這篇文章主要介紹了spring cloud alibaba Nacos 注冊(cè)中心搭建過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java中List.contains(Object?object)方法使用

    Java中List.contains(Object?object)方法使用

    本文主要介紹了Java中List.contains(Object?object)方法,使用List.contains(Object?object)方法判斷ArrayList是否包含一個(gè)元素對(duì)象,感興趣的可以了解一下
    2022-04-04
  • selenium高效應(yīng)對(duì)Web頁面元素刷新的實(shí)例講解

    selenium高效應(yīng)對(duì)Web頁面元素刷新的實(shí)例講解

    今天小編就為大家分享一篇selenium高效應(yīng)對(duì)Web頁面元素刷新的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題

    Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題

    這篇文章主要介紹了Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評(píng)論

新余市| 咸丰县| 邢台市| 海晏县| 仙游县| 日土县| 庆元县| 高清| 新疆| 沈阳市| 开阳县| 忻州市| 河源市| 定日县| 哈巴河县| 米林县| 芷江| 松原市| 巢湖市| 民权县| 万盛区| 定安县| 石渠县| 乐业县| 灵山县| 黄梅县| 大余县| 沅陵县| 安义县| 石台县| 大石桥市| 南召县| 寿光市| 周口市| 宝应县| 庆安县| 酉阳| 谷城县| 吴桥县| 和田县| 沙洋县|