mybatis的Configuration詳解
上一篇介紹了mybatis中SqlSessionFactory的創(chuàng)建過(guò)程,今天來(lái)學(xué)習(xí)它默認(rèn)實(shí)現(xiàn)中的唯一屬性Configuration
回顧
還是最開始的mybatis源碼環(huán)境中的測(cè)試代碼如下圖:
利用mybatis查出數(shù)據(jù)只用三步:創(chuàng)建SqlSessionFactory、通過(guò)SqlSessionFactory創(chuàng)建SqlSession、SqlSession執(zhí)行selectOne方法。
上一篇文章梳理了SqlSessionFactory創(chuàng)建過(guò)程的源碼,發(fā)現(xiàn)它返回的是它的默認(rèn)實(shí)現(xiàn)類DefaultSqlSessionFactory,而默認(rèn)實(shí)現(xiàn)類有有唯一的一個(gè)屬性configuration,所以SqlSessionFactory根本的依賴還是Configuration類。
Configuration基礎(chǔ)信息說(shuō)明
Configuration類中有很多的屬性,下面是基礎(chǔ)屬性的源碼以及部分說(shuō)明如下圖:
上面主要是一些settings屬性,settings屬性是MyBatis 的基礎(chǔ)性設(shè)置,它們會(huì)改變 MyBatis 的運(yùn)行時(shí)行為。更加完整的說(shuō)明在官方文檔上:https://mybatis.org/mybatis-3/zh/configuration.html。去掉zh可以查看英文版本。
這里面有一個(gè)熟悉protected Properties variables = new Properties();這個(gè)屬性對(duì)應(yīng)是我們?cè)趍ybatis配置文件中有時(shí)會(huì)配置的properties節(jié)點(diǎn)的內(nèi)容,有時(shí)候我們會(huì)配置url、driver、username、password等信息。然后在其他節(jié)點(diǎn)使用${}來(lái)使用。
擴(kuò)展屬性和無(wú)參構(gòu)造
上面介紹了決定mybatis一些基礎(chǔ)行為的屬性,在Configuration還存有一些mybatis可用來(lái)擴(kuò)展的和運(yùn)行中需要信息,下圖中是這些屬性已經(jīng)Configuration的無(wú)參構(gòu)造函數(shù):
上一節(jié)是mybatis中的環(huán)境配置信息,而上圖是一些mybatis運(yùn)行中要用到的信息,比如:resultMap集合、sql語(yǔ)句集合、插件列表、緩存、類型別名、類型處理器等。
其中很多屬性使用的是Configuration中的了一個(gè)內(nèi)部靜態(tài)類StrictMap,它繼承自HashMap,對(duì)HashMap的裝飾在于增加了put時(shí)防重復(fù)的處理,get時(shí)取不到值時(shí)候的異常處理,這樣在使用時(shí)就不需要關(guān)心各種異常,簡(jiǎn)化應(yīng)用層邏輯。
Configuration的無(wú)參構(gòu)造函數(shù)主要往typeAliasRegistry中put了一些數(shù)據(jù),typeAliasRegistry是類型注冊(cè)器,通過(guò)這段代碼知道為什么可以在配置文件中配置“”這類信息了,因?yàn)橥ㄟ^(guò)type的值能夠找到對(duì)應(yīng)的類。
再看parse方法
在上一篇文章SqlSessionFactory創(chuàng)建過(guò)程中講到了Configuration是通過(guò)無(wú)參構(gòu)造函數(shù)創(chuàng)建了一個(gè)Configuration對(duì)象,然后在最后調(diào)用了parse方法。無(wú)參構(gòu)造函數(shù)上一節(jié)已經(jīng)進(jìn)行了說(shuō)明,最后再來(lái)看上一篇文章最后的parse方法調(diào)用的parseConfiguration方法如下圖:
這次在看parseConfiguration方法中的內(nèi)容就更加清楚在干嘛了。
總結(jié)
今天只梳理了Configuration中包含的屬性以及默認(rèn)構(gòu)造函數(shù),分析完成后最終還是指向了上一篇文章的parseConfiguration方法,那么從下一篇文章開始就來(lái)仔細(xì)分析一下parseConfiguration對(duì)Configuration具體做了哪些設(shè)置以及流程。
到此這篇關(guān)于mybatis的Configuration詳解的文章就介紹到這了,更多相關(guān)mybatis Configuration內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 如何在ASP.NET Core 的任意類中注入Configuration
- C# 添加對(duì)System.Configuration.dll文件的引用操作
- matplotlib運(yùn)行時(shí)配置(Runtime Configuration,rc)參數(shù)rcParams解析
- .Net Core3.0 配置Configuration的實(shí)現(xiàn)
- 詳解@ConfigurationProperties實(shí)現(xiàn)原理與實(shí)戰(zhàn)
- @ConfigurationProperties綁定配置信息至Array、List、Map、Bean的實(shí)現(xiàn)
- 詳解配置類為什么要添加@Configuration注解
- Spring @Configuration注解及配置方法
- Springboot @Configuration @bean注解作用解析
- SpringBoot @ConfigurationProperties使用詳解
- 繼承WebMvcConfigurationSupport后自動(dòng)配置不生效及如何配置攔截器
- 解析SpringBoot @EnableAutoConfiguration的使用
- Spring中基于Java的配置@Configuration和@Bean用法詳解
- @Configuration與@Component作為配置類的區(qū)別詳解
- .NET Core 3.0之創(chuàng)建基于Consul的Configuration擴(kuò)展組件
- SpringBoot 中 AutoConfiguration的使用方法
- MyBatis異常-Property ''configLocation'' not specified, using default MyBatis Configuration
- Spring源碼解析之Configuration
相關(guān)文章
Java實(shí)現(xiàn)獲取內(nèi)網(wǎng)的所有IP地址
這篇文章主要介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)獲取內(nèi)網(wǎng)的所有IP地址,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的參考價(jià)值,快跟隨小編一起學(xué)習(xí)一下吧2022-06-06Java使用集合實(shí)現(xiàn)斗地主分牌完整代碼
在斗地主游戲中,通常是將一副牌平均分成3份,每份17張牌,并留3張底牌,我們可以使用集合來(lái)實(shí)現(xiàn)這一功能,這篇文章主要給大家介紹了關(guān)于Java使用集合實(shí)現(xiàn)斗地主分牌的相關(guān)資料,需要的朋友可以參考下2024-05-05Java實(shí)現(xiàn)批量下載(打包成zip)的實(shí)現(xiàn)
這篇文章主要介紹了Java實(shí)現(xiàn)批量下載(打包成zip)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11分析那些不講武德的SDK(構(gòu)造使用規(guī)范)
這篇文章主要為大家介紹了盤點(diǎn)分析那些不講武德的SDK(構(gòu)造規(guī)范)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Java實(shí)現(xiàn)時(shí)間日期格式轉(zhuǎn)換示例
本篇文章主要介紹了ava實(shí)現(xiàn)時(shí)間日期格式轉(zhuǎn)換示例,實(shí)現(xiàn)了各種時(shí)間輸出的類型,有興趣的可以了解一下。2017-01-01詳解Java如何在CompletableFuture中實(shí)現(xiàn)日志記錄
這篇文章主要為大家詳細(xì)介紹了一種slf4j自帶的MDC類,來(lái)記錄完整的請(qǐng)求日志,和在CompletableFuture異步線程中如何保留鏈路id,需要的可以參考一下2023-04-04