十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章給大家分享的是有關(guān)MyBatis中XML映射配置文件的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
My Batis 支持SQL查詢,是一些高級(jí)映射在持久層的完美展示。他更多的使用簡(jiǎn)單的XML或注解用于配置和原始映射,摒除了大量的JDBC代碼、手工設(shè)置參數(shù)和結(jié)果集封裝,提高了開發(fā)效率。
MyBatis的XML配置文件包含了影響MyBatis行為甚深的設(shè)置和屬性信息。XML文檔的高層級(jí)結(jié)構(gòu)如下:
configuration配置
environment環(huán)境變量
transactionManager事務(wù)管理器
dataSource數(shù)據(jù)源
properties屬性
settings設(shè)置
typeAliases類型命名
typeHandlers類型處理器
objectFactory對(duì)象工廠
plugins插件
environments環(huán)境
映射器
下面就對(duì)各個(gè)屬性配置做出詳細(xì)介紹
properties
這些是外部化的,可替代的屬性,這些屬性也可以配置在典型的Java屬性配置文件中,或者通過properties元素的子元素來傳遞。
例如:
[html] view plain copy[html] view plain copy [html] view plain copy [html] view plain copy [html] view plain copy [html] view plain copy [html] view plain copy
這個(gè)例子中的username和password將會(huì)由properties元素中設(shè)置的值來替換。driver和url屬性將會(huì)從包含進(jìn)來的jdbc_mysql.properties文件中的值來替換。
Settings
這些是極其重要的調(diào)整,它們會(huì)修改MyBatis在運(yùn)行時(shí)的行為方式。下面這個(gè)表格描述了設(shè)置信息,它們的含義和默認(rèn)值。
設(shè)置參數(shù) 描述
cacheEnabled 這個(gè)配置使全局的映射器啟用或禁用緩存。
lazyLoadingEnabled 全局啟用或禁用延遲加載。當(dāng)禁用時(shí),所有關(guān)聯(lián)對(duì)象都會(huì)即時(shí)加載。
aggressiveLazyLoading 當(dāng)啟用時(shí),有延遲加載屬性的對(duì)象在被調(diào)用時(shí)將會(huì)完全加載任意屬性。否則,每種屬性將會(huì)按需要加載。
multipleResultSetsEnabled 允許或不允許多種結(jié)果集從一個(gè)單獨(dú)的語句中返回(需要適合的驅(qū)動(dòng))。
useColumnLabel 使用列標(biāo)簽代替列名。不同的驅(qū)動(dòng)在這方便表現(xiàn)不同。參考驅(qū)動(dòng)文檔或充分測(cè)試兩種方法來決定所使用的驅(qū)動(dòng)。
useGeneratedKeys 允許JDBC支持生成的鍵。需要適合的驅(qū)動(dòng)。如果設(shè)置為true則這個(gè)設(shè)置強(qiáng)制生成的鍵被使用,盡管一些驅(qū)動(dòng)拒絕兼容但仍然有效(比如Derby)。
autoMappingBehavior 指定MyBatis如何自動(dòng)映射列到字段/屬性。PARTIAL只會(huì)自動(dòng)映射簡(jiǎn)單,沒有嵌套的結(jié)果。FULL會(huì)自動(dòng)映射任意復(fù)雜的結(jié)果(嵌套的或其他情況)。
defaultExecutorType 配置默認(rèn)的執(zhí)行器。SIMPLE執(zhí)行器沒有什么特別之處。REUSE執(zhí)行器重用預(yù)處理語句。BATCH執(zhí)行器重用語句和批量更新
defaultStatementTimeout 設(shè)置超時(shí)時(shí)間,它決定驅(qū)動(dòng)等待一個(gè)數(shù)據(jù)庫(kù)響應(yīng)的時(shí)間。
一個(gè)設(shè)置信息元素的示例,完全的配置如下所示:
typeAliases
類型別名是為Java類型命名一個(gè)短的名字。它只和XML配置有關(guān),只用來減少類完全限定名的多余部分。例如:
[html] view plain copy[html] view plain copy [html] view plain copy [html] view plain copy [html] view plain copy [html] view plain copy [html] view plain copy [html] view plain copy
使用這個(gè)配置,“Blog”可以任意用來替代“domain.blog.Blog”所使用的地方。
typeHandlers
無論是MyBatis在預(yù)處理語句中設(shè)置一個(gè)參數(shù),還是從結(jié)果集中取出一個(gè)值時(shí),類型處理器被用來將獲取的值以合適的方式轉(zhuǎn)換成Java類型。下面這個(gè)列表描述了默認(rèn)的類型處理器。 依次是 類型處理器 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ǔ)(而不是索引)。
objectFactory
MyBatis每次創(chuàng)建結(jié)果對(duì)象新的實(shí)例時(shí),它使用一個(gè)ObjectFactory實(shí)例來完成。如果參數(shù)映射存在,默認(rèn)的ObjectFactory不比使用默認(rèn)構(gòu)造方法或帶參數(shù)的構(gòu)造方法實(shí)例化目標(biāo)類做的工作多。
plugins
MyBatis允許你在某一點(diǎn)攔截已映射語句執(zhí)行的調(diào)用。默認(rèn)情況下,MyBatis允許使用插件來攔截方法調(diào)用:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) ParameterHandler (getParameterObject, setParameters) ResultSetHandler (handleResultSets, handleOutputParameters) StatementHandler
(prepare, parameterize, batch, update, query)
這些類中方法的詳情可以通過查看每個(gè)方法的簽名來發(fā)現(xiàn),而且它們的源代碼在MyBatis的發(fā)行包中有。你應(yīng)該理解你覆蓋方法的行為,假設(shè)你所做的要比監(jiān)視調(diào)用要多。如果你嘗試修改或覆蓋一個(gè)給定的方法,你可能會(huì)打破MyBatis的核心。這是低層次的類和方法,要謹(jǐn)慎使用插件。
使用插件是它們提供的非常簡(jiǎn)單的力量。簡(jiǎn)單實(shí)現(xiàn)攔截器接口,要確定你想攔截的指定簽名。
java代碼:
[javascript] view plain copy @Intercepts({@Signature(type= Executor.class,method = "update", [javascript] view plain copy args = {MappedStatement.class,Object.class})}) [javascript] view plain copy public class ExamplePlugin implements Interceptor { [javascript] view plain copy public Object intercept(Invocation invocation) throws Throwable [javascript] view plain copy { [javascript] view plain copy return invocation.proceed(); [javascript] view plain copy } [javascript] view plain copy public Object plugin(Object target) { [javascript] view plain copy return Plugin.wrap(target, this); [javascript] view plain copy } [javascript] view plain copy public void setProperties(Properties properties) { [javascript] view plain copy } [html] view plain copy MapperConfig.xml [html] view plain copy[html] view plain copy [html] view plain copy[html] view plain copy [html] view plain copy[html] view plain copy
上面的插件將會(huì)攔截在Executor實(shí)例中所有的“update”方法調(diào)用,它也是負(fù)責(zé)低層次映射語句執(zhí)行的內(nèi)部對(duì)象。
environments
[html] view plain copydataSsource
dataSource元素使用基本的JDBC數(shù)據(jù)源接口來配置JDBC連接對(duì)象的資源。見上
transactionManager
在MyBatis中有兩種事務(wù)管理器類型(也就是type=”[JDBC|MANAGED]”):
1.JDBC – 這個(gè)配置直接簡(jiǎn)單使用了JDBC的提交和回滾設(shè)置。它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)范圍。
2.MANAGED – 這個(gè)配置幾乎沒做什么。它從來不提交或回滾一個(gè)連接。而它會(huì)讓容器來管理事務(wù)的整個(gè)生命周期(比如Spring或JEE應(yīng)用服務(wù)器的上下文)。默認(rèn)情況下它會(huì)關(guān)閉連接。然而一些容器并不希望這樣,因此如果你需要從連接中停止它,將closeConnection屬性設(shè)置為false。例如:
[html] view plain copy
這兩種事務(wù)管理器都不需要任何屬性。然而它們都是類型別名,要替換使用它們,你需要放置將你自己的類的完全限定名或類型別名,它們引用了你對(duì)TransacFactory接口的實(shí)現(xiàn)類。
public interface TransactionFactory {
void setProperties(Properties props);
Transaction newTransaction(Connection conn, boolean autoCommit);
}
任何在XML中配置的屬性在實(shí)例化之后將會(huì)被傳遞給setProperties()方法。你的實(shí)現(xiàn)類需要?jiǎng)?chuàng)建一個(gè)事務(wù)接口的實(shí)現(xiàn),這個(gè)接口也很簡(jiǎn)單:
[html] view plain copy public interface Transaction { Connection getConnection(); void commit() throws SQLException; void rollback() throws SQLException; void close() throws SQLException; }
使用這兩個(gè)接口,你可以完全自定義MyBatis對(duì)事務(wù)的處理。
mappers
既然MyBatis的行為已經(jīng)由上述元素配置完了,我們現(xiàn)在就要定義SQL映射語句了。但是,首先我們需要告訴MyBatis到哪里去找到這些語句。Java在這方面沒有提供一個(gè)很好的方法,所以最佳的方式是告訴MyBatis到哪里去找映射文件。你可以使用相對(duì)于類路徑的資源引用,或者字符表示,或url引用的完全限定名(包括file:///URLs)。例如:
[html] view plain copy // Using classpath relative resources(選)// Using url fully qualified paths
感謝各位的閱讀!關(guān)于“MyBatis中XML映射配置文件的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!