免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
深入淺出MyBatis

Configuration是干嘛的

Configuration就像是Mybatis的總管,Mybatis的所有配置信息都存放在這里,此外,它還提供了設(shè)置這些配置信息的方法。Configuration可以從配置文件里獲取屬性值,也可以通過程序直接設(shè)置。Configuration里可供配置的屬性有:

1.       properties屬性

1)       配置示例

  1. <properties resource="org/mybatis/example/config.properties">   
  2. <property name="username" value="dev_user"/>   
  3. <property name="password" value="F2Fa3!33TYyg"/>   
  4. </properties>  

2)       用途

properties里配置的屬性將被存放在Configuration的variables變量里,供Mybatis使用。此外在配置文件中,也可以使用這些屬性,用來對(duì)配置項(xiàng)實(shí)現(xiàn)動(dòng)態(tài)配置。比如:

  1. <dataSource type="POOLED">   
  2. <property name="driver" value="${driver}"/>   
  3. <property name="url" value="${url}"/>   
  4. <property name="username" value="${username}"/>   
  5. <property name="password" value="${password}"/>   
  6. </dataSource>  

3)       注意事項(xiàng)

resource里也可指定屬性值,并且resource里屬性值的優(yōu)先級(jí)高于property子節(jié)點(diǎn)里配置的值,也就是說resource的同名屬性將會(huì)覆蓋于property子節(jié)點(diǎn)里的值。

2.        settings設(shè)置

1)       配置示例

  1. <settings>   
  2. <setting name="cacheEnabled" value="true"/>   
  3. <setting name="lazyLoadingEnabled" value="true"/>   
  4. <setting name="multipleResultSetsEnabled" value="true"/>   
  5. <setting name="useColumnLabel" value="true"/>   
  6. <setting name="useGeneratedKeys" value="false"/>   
  7. <setting name="enhancementEnabled" value="false"/>   
  8. <setting name="defaultExecutorType" value="SIMPLE"/>   
  9. <setting name="defaultStatementTimeout" value="25000"/>   
  10. </settings>  

2)       用途

setting節(jié)點(diǎn)里配置的值會(huì)直接改寫Configuration對(duì)應(yīng)的變量值,這些變量描述的是Mybatis的全局運(yùn)行方式,如果對(duì)這些屬性的含義不熟悉的話建議不要配置,使用默認(rèn)值即可。下面這個(gè)表格描述了各個(gè)配置項(xiàng)的含義和默認(rèn)值:

設(shè)置參數(shù)

描述

有效值

默認(rèn)值

cacheEnabled

這個(gè)配置使全局的映射器啟用或禁用緩存。

true | false

true

lazyLoadingEnabled

全局啟用或禁用延遲加載。當(dāng)禁用時(shí),所有關(guān)聯(lián)對(duì)象都會(huì)即時(shí)加載。

true | false

true

aggressiveLazyLoading

當(dāng)啟用時(shí),有延遲加載屬性的對(duì)象在被調(diào)用時(shí)將會(huì)完全加載任意屬性。否則,每種屬性將會(huì)按需要加載。

true | false

true

multipleResultSetsEnabled

允許或不允許多種結(jié)果集從一個(gè)單獨(dú)的語句中返回(需要適合的驅(qū)動(dòng))。

true | false

true

useColumnLabel

使用列標(biāo)簽代替列名。不同的驅(qū)動(dòng)在這方便表現(xiàn)不同。參考驅(qū)動(dòng)文檔或充分測(cè)試兩種方法來決定所使用的驅(qū)動(dòng)。

true | false

true

useGeneratedKeys

允許JDBC支持生成的鍵。需要適合的驅(qū)動(dòng)。如果設(shè)置為true則這個(gè)設(shè)置強(qiáng)制生成的鍵被使用,盡管一些驅(qū)動(dòng)拒絕兼容但仍然有效(比如Derby)。

true | false

false

autoMappingBehavior

指定MyBatis如何自動(dòng)映射列到字段/屬性。PARTIAL只會(huì)自動(dòng)映射簡(jiǎn)單,沒有嵌套的結(jié)果。FULL會(huì)自動(dòng)映射任意復(fù)雜的結(jié)果(嵌套的或其他情況)。

NONE,

PARTIAL,

FULL

PARTIAL

 

3)       注意事項(xiàng)

謹(jǐn)慎修改這些配置值。

3.       typeAliases類型命名

1)       配置示例

  1. <typeAliases>   
  2. <typeAlias alias="Author" type="domain.blog.Author"/>   
  3. <typeAlias alias="Blog" type="domain.blog.Blog"/>   
  4. <typeAlias alias="Comment" type="domain.blog.Comment"/>   
  5. <typeAlias alias="Post" type="domain.blog.Post"/>   
  6. <typeAlias alias="Section" type="domain.blog.Section"/>   
  7. <typeAlias alias="Tag" type="domain.blog.Tag"/>   
  8. </typeAliases>  

2)       用途

別名是為Java類型命名一個(gè)短的名字。它只用在XML配置文件里,用來減少類完全限定名的多余部分。例如在配置文件里需要使用domain.blog.Author的地方可以簡(jiǎn)單的使用Author替換。

3)       注意事項(xiàng)

Mybatis里有一些默認(rèn)的別名,不要覆蓋這些別名:

別名

映射的類型

_byte

byte

_long

long

_short

short

_int

int

_integer

int

_double

double

_float

float

_boolean

boolean

string

String

byte

Byte

long

Long

short

Short

int

Integer

integer

Integer

double

Double

float

Float

boolean

Boolean

date

Date

decimal

BigDecimal

bigdecimal

BigDecimal

object

Object

map

Map

hashmap

HashMap

list

List

arraylist

ArrayList

collection

Collection

iterator

Iterator

 

4.       typeHandlers類型處理器

1)       配置示例

  1. <typeHandlers>   
  2. <typeHandler javaType="String" jdbcType="VARCHAR" handler="org.mybatis.example.ExampleTypeHandler"/>   
  3. </typeHandlers>  

2)       用途

無論是MyBatis在預(yù)處理語句中設(shè)置一個(gè)參數(shù),還是從結(jié)果集中取出一個(gè)值時(shí),類型處理器被用來將獲取的值以合適的方式轉(zhuǎn)換成Java類型。

3)       注意事項(xiàng)

Mybatis已經(jīng)有了若干個(gè)類型處理器了,編寫自己的類型處理器時(shí)勿重新發(fā)明輪子。

類型處理器

Java類型?

JDBC類型?

BooleanTypeHandler

Boolean,boolean

任何兼容的布爾值

ByteTypeHandler

Byte,byte

任何兼容的數(shù)字或字節(jié)類型

ShortTypeHandler

Short,short

任何兼容的數(shù)字或短整型

IntegerTypeHandler

Integer,int

任何兼容的數(shù)字和整型

LongTypeHandler

Long,long

任何兼容的數(shù)字或長(zhǎng)整型

FloatTypeHandler

Float,float

任何兼容的數(shù)字或單精度浮點(diǎn)型

DoubleTypeHandler

Double,double

任何兼容的數(shù)字或雙精度浮點(diǎn)型

BigDecimalTypeHandler

BigDecimal

任何兼容的數(shù)字或十進(jìn)制小數(shù)類型

StringTypeHandler

String

CHAR和VARCHAR類型?

ClobTypeHandler

String

CLOB和LONGVARCHAR類型?

NStringTypeHandler

String

NVARCHAR和NCHAR類型?

NClobTypeHandler

String

NCLOB類型?

ByteArrayTypeHandler

byte[]

任何兼容的字節(jié)流類型

BlobTypeHandler

byte[]

BLOB和LONGVARBINARY類型

DateTypeHandler

Date(java.util)?

TIMESTAMP類型?

DateOnlyTypeHandler

Date(java.util)?

DATE類型?

TimeOnlyTypeHandler

Date(java.util)?

TIME類型?

SqlTimestampTypeHandler

Timestamp(java.sql)

TIMESTAMP類型?

SqlDateTypeHandler

Date(java.sql)?

DATE類型?

SqlTimeTypeHandler

Time(java.sql)?

TIME類型?

ObjectTypeHandler

Any

其他或未指定類型

EnumTypeHandler

Enumeration類型

VARCHAR-任何兼容的字符串類型,作為代碼存儲(chǔ)(而不是索引)

 

5.       objectFactory對(duì)象工廠

略(不常用)

6.       plugins插件

1)       配置示例

  1. <plugins>   
  2. <plugin interceptor="org.mybatis.example.ExamplePlugin">   
  3. <property name="someProperty" value="100"/>   
  4. </plugin>   
  5. </plugins>  

2)       用途

插件可以改變某些類的執(zhí)行, MyBatis允許被插件來攔截的類有:

  1. Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)   
  2. ParameterHandler (getParameterObject, setParameters)   
  3. ResultSetHandler (handleResultSets, handleOutputParameters)   
  4. StatementHandler (prepare, parameterize, batch, update, query)  

3)       注意事項(xiàng)

插件可以改變MyBatis底層的行為,因此功能非常強(qiáng)大。但在對(duì)MyBatis深入理解前不要急著編寫自己的插件,因?yàn)槿舨寮帉懖划?dāng),將導(dǎo)致整個(gè)MyBatis都不能正常工作。本系列的后面會(huì)有專門的章節(jié)介紹插件機(jī)制以及兩個(gè)有用的插件,歡迎持續(xù)關(guān)注。

7.       environments環(huán)境

environments里可以配置多個(gè)environment,每個(gè)environment對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)環(huán)境。一個(gè)完整的定義如下:

  1. <environments default="development">   
  2. <environment id="development">   
  3. <transactionManager type="JDBC">   
  4. </transactionManager>   
  5. <dataSource type="POOLED">   
  6. <property name="driver" value="${driver}"/>   
  7. <property name="url" value="${url}"/>   
  8. <property name="username" value="${username}"/>   
  9. <property name="password" value="${password}"/>   
  10. </dataSource>   
  11. </environment>   
  12. </environments>  

environments里的default屬性表示默認(rèn)的數(shù)據(jù)庫(kù)環(huán)境,與某個(gè)environment的id相對(duì)應(yīng)。

1)       environment環(huán)境變量

environment通過id屬性與其他數(shù)據(jù)庫(kù)環(huán)境區(qū)別。它有兩個(gè)子節(jié)點(diǎn):

a)       transactionManager事務(wù)管理器

MyBatis中有兩種事務(wù)管理器類型(也就是type=”[JDBC|MANAGED]”):

l JDBC這個(gè)配置直接簡(jiǎn)單使用了JDBC的提交和回滾設(shè)置。它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)范圍。

l MANAGED這個(gè)配置幾乎沒做什么。它從來不提交或回滾一個(gè)連接。而它會(huì)讓容器來管理事務(wù)的整個(gè)生命周期(比如SpringJEE應(yīng)用服務(wù)器的上下文)

b)       dataSource數(shù)據(jù)源

MyBatis中有三種數(shù)據(jù)源類型(也就是type=”[UNPOOLED | POOLED| JNDI]”):

l UNPOOLED –這個(gè)數(shù)據(jù)源的實(shí)現(xiàn)是每次被請(qǐng)求時(shí)簡(jiǎn)單打開和關(guān)閉連接,需要配置的屬性:

driver – 這是JDBC驅(qū)動(dòng)的Java類的完全限定名

url – 這是數(shù)據(jù)庫(kù)的JDBC URL地址。

username – 登錄數(shù)據(jù)庫(kù)的用戶名。

password – 登錄數(shù)據(jù)庫(kù)的密碼。

defaultTransactionIsolationLevel – 默認(rèn)的連接事務(wù)隔離級(jí)別。

l POOLED –mybatis實(shí)現(xiàn)的簡(jiǎn)單的數(shù)據(jù)庫(kù)連接池類型,它使得數(shù)據(jù)庫(kù)連接可被復(fù)用,不必在每次請(qǐng)求時(shí)都去創(chuàng)建一個(gè)物理的連接。

l JNDI 通過jndi從tomcat之類的容器里獲取數(shù)據(jù)源。

8.       mapper映射器

1)       配置示例

  1. <mappers>   
  2. <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>   
  3. <mapper resource="org/mybatis/builder/BlogMapper.xml"/>   
  4. <mapper resource="org/mybatis/builder/PostMapper.xml"/>   
  5. </mappers>  

2)       用途

Mappers用于告訴Mybatis去哪里尋找sql映射文件。sql映射文件是Mybatis最靈活的地方。sql映射文件在后續(xù)的章節(jié)里會(huì)進(jìn)一步詳細(xì)描述,歡迎持續(xù)關(guān)注。

如何構(gòu)建configuration

前面介紹了Configuration的各個(gè)屬性以及在文件里配置他們的方法。這一節(jié)介紹如何從文件里解析這些配置項(xiàng)以及簡(jiǎn)化配置的方法。Configuration在SqlSessionFactoryBuilder創(chuàng)建SqlSessionFactory時(shí)創(chuàng)建,通過XMLConfigBuilder的parse方法創(chuàng)建。下面一個(gè)個(gè)的介紹:

1.       properties屬性

通過XMLConfigBuilder的propertiesElement方法解析,解析后的結(jié)果存放在Configuration的variables變量里。解析順序,先解析子節(jié)點(diǎn)里的屬性值,再解析resource屬性指定的配置文件里的值。后者會(huì)覆蓋前者的值。

2.        settings設(shè)置

通過XMLConfigBuildersettingsElement方法解析,解析前校驗(yàn)屬性是否是可配置的,只要有一個(gè)不可配置,整個(gè)mybatis就會(huì)異常退出,所以配置這些屬性務(wù)必小心。

3.       typeAliases類型命名

通過XMLConfigBuildertypeAliasesElement方法解析,在該方法內(nèi)部調(diào)用TypeAliasRegistryregisterAlias方法完成注冊(cè),并將注冊(cè)的別名存入本地緩存中。XMLConfigBuilder調(diào)用的registerAlias方法并沒有什么特別的地方,但TypeAliasRegistry卻提供了批量注冊(cè)別名的方法,該方法只需要一個(gè)包名參數(shù)。該方法會(huì)在指定的包路徑下掃描可注冊(cè)的類(接口和內(nèi)部類除外),并以類的簡(jiǎn)單名為key完整名為value注冊(cè)別名。這個(gè)方法極大的簡(jiǎn)化了配置,后續(xù)章節(jié)將要介紹的springmybatis的整合模塊里就使用了這個(gè)方法使得配置量大大減少。

4.       typeHandlers類型處理器

通過XMLConfigBuildertypeHandlerElement方法解析,在該方法內(nèi)部調(diào)用TypeHandlerRegistryregister方法完成注冊(cè),并將注冊(cè)的類型處理器存入本地緩存中。同typeAliases一樣,TypeHandlerRegistry也提供了批量注冊(cè)的方法,該方法同樣只需要一個(gè)包名參數(shù)。該方法會(huì)在指定的包路徑下掃描可注冊(cè)的類(接口、抽象類和內(nèi)部類除外),不過只注冊(cè)那些配置了MappedTypes注解的類。這個(gè)方法極大的簡(jiǎn)化了配置,后續(xù)章節(jié)將要介紹的springmybatis的整合模塊里就使用了這個(gè)方法使得配置量大大減少。

5.       objectFactory對(duì)象工廠

略(不常用)

6.       plugins插件

通過XMLConfigBuilder的pluginElement方法解析,在該方法內(nèi)部實(shí)例化插件對(duì)象后存入Configuration的interceptorChain變量里。

7.       environments環(huán)境

通過XMLConfigBuilderenvironmentsElement方法解析,在該方法內(nèi),先判斷默認(rèn)是否指定了環(huán)境ID,沒有的話就使用默認(rèn)的環(huán)境ID嗎,然后在各個(gè)環(huán)境里取ID對(duì)應(yīng)的項(xiàng)。也就是說一個(gè)Configuration只會(huì)保存一個(gè)數(shù)據(jù)庫(kù)環(huán)境,如果要配置多數(shù)據(jù)庫(kù)環(huán)境的話需要?jiǎng)?chuàng)建多個(gè)Configuration對(duì)象。在改方法內(nèi)先解析事務(wù)工廠、再解析數(shù)據(jù)源、然后再解析數(shù)據(jù)庫(kù)環(huán)境,在解析數(shù)據(jù)庫(kù)環(huán)境的過程中會(huì)訪問一次數(shù)據(jù)庫(kù),以取得數(shù)據(jù)庫(kù)類型信息。

8.        mapper映射器

通過XMLConfigBuilder的mapperElement方法解析,在該方法內(nèi)部通過調(diào)用XMLMapperBuilder的parse方法完成。mapper的解析是mybatis的核心功能,涉及的流程較復(fù)雜,在下一章將專門分析,敬請(qǐng)期待。

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
mybatis入門基礎(chǔ)(三)
Mybatis初始化過程簡(jiǎn)單總結(jié)
(四)Mybatis從入門到入土——?jiǎng)e名、配置文件以及引入mapper
Mybatis源碼分析(四):屬性接口之configLocation
MyBatis xml配置文件詳解
第12章 MyBatis入門
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服