properties
setting
typeAliases
typeHandler
objectFactory
environment
歡迎訪問本人博客:http://wangnan.tech
Mybatis配置XML文件的層次結(jié)構(gòu)
這些層次是不能夠顛倒順序的,如果顛倒順序错蝴,mybatis解析xml文件時(shí)會(huì)出現(xiàn)異常
properties元素
properties元素提供三種配置方式
- property子元素
- property配置文件
- 程序參數(shù)傳遞
property子元素
如圖:
這樣我們就可以在上下文中使用以及配置好的屬性了
如圖:
<dataSource type="POOLED">
<property name="driver" value="${dirver}"
<property name="url" value="${url}"
<property name="username" value="${username}"
<property name="password" value="${password}"
</dataSource>
properties
使用配置文件,方便我們在多個(gè)配置文件中重復(fù)使用它們颓芭,也方便日后維護(hù)和隨時(shí)修改
如圖:
我們properties文件放在源包下顷锰,只要這樣引入這個(gè)配置文件即可
<properties resource="jdbc.properties"/>
程序參數(shù)傳遞
適用場景舉例:生產(chǎn)數(shù)據(jù)庫用戶名和密碼對于開發(fā)者保密,運(yùn)維人員要求文件中的數(shù)據(jù)庫用戶和密碼進(jìn)行加密畜伐,需要在代碼中進(jìn)行解碼傳入配置馍惹,這個(gè)時(shí)候需要通過編碼的范式滿足我們遇到的場景
如圖:
InputStream cfgStream = null;
decode為解密方法
優(yōu)先級
mybtis支持這三種方式同時(shí)出現(xiàn)躺率,可以重復(fù)配置同一屬性
mybtis按照下面的順序加載:
- 在properties元素體內(nèi)的指定屬性首先被讀取
- 根據(jù)properties預(yù)算內(nèi)宿的resource屬性讀取類路徑下屬性文件玛界,或者根據(jù)url屬性指定的路徑讀取屬性文件,并覆蓋已讀取的同名屬性
- 讀取作為方法參數(shù)傳遞的屬性悼吱,并覆蓋已讀取的同名屬性
總結(jié):優(yōu)先級 代碼>配置文件>properties屬性
setting
- setting在mybatis中是最復(fù)雜的配置慎框,也是最重要的配置
- 即使不配置setting,mybatis也可以正常工作
- 了解setting配置內(nèi)容后添,十分必要
如圖:
typeAliases
- 別名是一個(gè)指代的名稱笨枯,因?yàn)轭惖娜^長,我們希望用簡短的方式去指代它
- 這個(gè)名稱可以在mybatis上下文中使用
- 別名不區(qū)分大小寫
- 一個(gè)別名實(shí)例是在解析配置文件時(shí)生成的遇西,然后長期保持在configuration對象中馅精,供隨時(shí)使用
類型:
- 系統(tǒng)定義的別名
- 自定義別名
系統(tǒng)定義的別名
注:支持?jǐn)?shù)組類型的只要加“[]”即可,比如Date數(shù)組可以用date[]代替
自定義別名
方式:
- 配置文件
- 代碼
配置文件:
這樣mybtis的上下文中使用role來替代其全路徑
注解+自動(dòng)掃描
使用注解@Alias粱檀,Mybatis會(huì)自動(dòng)掃描包洲敢,將掃描到的類裝載到上下文中以便將來使用
注意:配置了包掃描路徑,沒有注解的類茄蚯,mybatis也會(huì)裝載压彭,只是說它將把別名設(shè)置為類名第一個(gè)字母小寫
typeHandler
- Mybatis在預(yù)處理語句(PrepareStatement)中設(shè)置一個(gè)參數(shù)時(shí),或者從結(jié)果集(ResultSet)中取出一個(gè)值時(shí)渗常,都會(huì)用注冊了的typeHandler進(jìn)行處理
- 由于數(shù)據(jù)庫廠商不同壮不,參數(shù)不同,typeHandler允許根據(jù)項(xiàng)目的需要自定義設(shè)置java傳遞到數(shù)據(jù)庫的參數(shù)中皱碘,或者從數(shù)據(jù)庫讀出的數(shù)據(jù)询一,進(jìn)行特殊處理
- 在使用枚舉的時(shí)候我們常常使用typeHandler進(jìn)行轉(zhuǎn)換
類型:
- 系統(tǒng)定義
- 用戶自定義
typeHandler常用的配置為java類型(javaType)、JDBC類型(jdbcType),typeHandler的作用就是將javaType和jdbcType互相轉(zhuǎn)化
由于篇幅考慮癌椿,typehandler不詳細(xì)說明
ObjectFactory
當(dāng)mybatis在構(gòu)建一個(gè)結(jié)果返回的時(shí)候健蕊,都會(huì)使用ObjectFactory去構(gòu)建POJP,在mybatis中可以定制自己的ObjectFactory如失,一般來說我們使用默認(rèn)的ObjectFactory即可绊诲,默認(rèn)的ObjectFactory是由org.apache.ibatis.reflection.DefaultObjectFactory來提供服務(wù)的
如果要定制特定的工廠則需要進(jìn)行配置
environment
配置環(huán)境可以注冊多個(gè)數(shù)據(jù)源
每個(gè)數(shù)據(jù)源分為兩大部分:
- 數(shù)據(jù)庫源的配置
- 數(shù)據(jù)庫事務(wù)的配置
如圖:
說明:
- environments中的屬性default,標(biāo)明在缺省的情況下我們將啟用哪個(gè)數(shù)據(jù)源配置
- 屬性id這只這個(gè)數(shù)據(jù)源的標(biāo)志褪贵,以便在mybatis上下文中使用它
transactionManager配置的是數(shù)據(jù)庫事務(wù)掂之,type屬性有三種配置方式:
- JDBC 采用JDBC方式管理事務(wù)抗俄,在獨(dú)立編碼中常常使用
- MANAGED,采用容器方式管理事務(wù),在JNDI數(shù)據(jù)源中常用
- 自定義世舰,由使用者自定義动雹,適用于特殊應(yīng)用
- property元素則是可以配置數(shù)據(jù)源的各類屬性,我們配置了autoCommit=false則是要求數(shù)據(jù)源不自動(dòng)提交
- dataSource標(biāo)簽跟压,是配置數(shù)據(jù)源連接的信息胰蝠,type屬性是提供我們隊(duì)數(shù)據(jù)庫連接方式的配置
type:
- UNPOOLED,非連接池?cái)?shù)據(jù)庫
- POOLED,連接池?cái)?shù)據(jù)庫
- JNDI,JNDI數(shù)據(jù)源
- 自定義數(shù)據(jù)源
引入映射器方法
映射器是Mybatis最復(fù)雜、最核心的組件
引入引射器的方法
- 用文件路徑引入
- 用包名引入
- 用類注冊引入
- 用xml引入
如圖:
(注:內(nèi)容整理自《深入淺出MyBatis技術(shù)原理與實(shí)戰(zhàn)》)