您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關MyBatis中XML映射配置文件的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
<span style="font-size:14px;"> My Batis 支持SQL查詢,是一些高級映射在持久層的完美展示。他更多的使用簡單的XML或注解用于配置和原始映射,<span style="color: rgb(54, 54, 54); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 24px; ">摒除了大量的JDBC代碼、手工設置參數和結果集封裝,提高了開發效率。</span></span>
MyBatis的XML配置文件包含了影響MyBatis行為甚深的設置和屬性信息。XML文檔的高層級結構如下:
configuration配置
environment環境變量
transactionManager事務管理器
dataSource數據源
properties屬性
settings設置
typeAliases類型命名
typeHandlers類型處理器
objectFactory對象工廠
plugins插件
environments環境
映射器
下面就對各個屬性配置做出詳細介紹
properties
這些是外部化的,可替代的屬性,這些屬性也可以配置在典型的Java屬性配置文件中,或者通過properties元素的子元素來傳遞。
例如:
[html] view plain copy <properties resource="jdbc_mysql.properties" /> [html] view plain copy <dataSource type="POOLED"> [html] view plain copy <property name="driver" value="${driver}"/> [html] view plain copy <property name="url" value="${url}"/> [html] view plain copy <property name="username" value="${username}"/> [html] view plain copy <property name="password" value="${password}"/> [html] view plain copy </dataSource>
這個例子中的username和password將會由properties元素中設置的值來替換。driver和url屬性將會從包含進來的jdbc_mysql.properties文件中的值來替換。
Settings
這些是極其重要的調整,它們會修改MyBatis在運行時的行為方式。下面這個表格描述了設置信息,它們的含義和默認值。
設置參數 描述
cacheEnabled 這個配置使全局的映射器啟用或禁用緩存。
lazyLoadingEnabled 全局啟用或禁用延遲加載。當禁用時,所有關聯對象都會即時加載。
aggressiveLazyLoading 當啟用時,有延遲加載屬性的對象在被調用時將會完全加載任意屬性。否則,每種屬性將會按需要加載。
multipleResultSetsEnabled 允許或不允許多種結果集從一個單獨的語句中返回(需要適合的驅動)。
useColumnLabel 使用列標簽代替列名。不同的驅動在這方便表現不同。參考驅動文檔或充分測試兩種方法來決定所使用的驅動。
useGeneratedKeys 允許JDBC支持生成的鍵。需要適合的驅動。如果設置為true則這個設置強制生成的鍵被使用,盡管一些驅動拒絕兼容但仍然有效(比如Derby)。
autoMappingBehavior 指定MyBatis如何自動映射列到字段/屬性。PARTIAL只會自動映射簡單,沒有嵌套的結果。FULL會自動映射任意復雜的結果(嵌套的或其他情況)。
defaultExecutorType 配置默認的執行器。SIMPLE執行器沒有什么特別之處。REUSE執行器重用預處理語句。BATCH執行器重用語句和批量更新
defaultStatementTimeout 設置超時時間,它決定驅動等待一個數據庫響應的時間。
一個設置信息元素的示例,完全的配置如下所示:
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="enhancementEnabled" value="false"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25000"/> </settings>
typeAliases
類型別名是為Java類型命名一個短的名字。它只和XML配置有關,只用來減少類完全限定名的多余部分。例如:
[html] view plain copy <typeAliases> [html] view plain copy <typeAlias alias="Author" type="domain.blog.Author"/> [html] view plain copy <typeAlias alias="Blog" type="domain.blog.Blog"/> [html] view plain copy <typeAlias alias="Comment" type="domain.blog.Comment"/> [html] view plain copy <typeAlias alias="Post" type="domain.blog.Post"/> [html] view plain copy <typeAlias alias="Section" type="domain.blog.Section"/> [html] view plain copy <typeAlias alias="Tag" type="domain.blog.Tag"/> [html] view plain copy </typeAliases>
使用這個配置,“Blog”可以任意用來替代“domain.blog.Blog”所使用的地方。
typeHandlers
無論是MyBatis在預處理語句中設置一個參數,還是從結果集中取出一個值時,類型處理器被用來將獲取的值以合適的方式轉換成Java類型。下面這個列表描述了默認的類型處理器。 依次是 類型處理器 Java類型 JDBC類型
BooleanTypeHandler Boolean,boolean 任何兼容的布爾值
ByteTypeHandler Byte,byte 任何兼容的數字或字節類型
ShortTypeHandler Short,short 任何兼容的數字或短整型
IntegerTypeHandler Integer,int 任何兼容的數字和整型
LongTypeHandler Long,long 任何兼容的數字或長整型
FloatTypeHandler Float,float 任何兼容的數字或單精度浮點型
DoubleTypeHandler Double,double 任何兼容的數字或雙精度浮點型
BigDecimalTypeHandler BigDecimal 任何兼容的數字或十進制小數類型
StringTypeHandler String CHAR和VARCHAR類型
ClobTypeHandler String CLOB和LONGVARCHAR類型
NStringTypeHandler String NVARCHAR和NCHAR類型
NClobTypeHandler String NCLOB類型
ByteArrayTypeHandler byte[] 任何兼容的字節流類型
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-任何兼容的字符串類型,作為代碼存儲(而不是索引)。
objectFactory
MyBatis每次創建結果對象新的實例時,它使用一個ObjectFactory實例來完成。如果參數映射存在,默認的ObjectFactory不比使用默認構造方法或帶參數的構造方法實例化目標類做的工作多。
plugins
MyBatis允許你在某一點攔截已映射語句執行的調用。默認情況下,MyBatis允許使用插件來攔截方法調用:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) ParameterHandler (getParameterObject, setParameters) ResultSetHandler (handleResultSets, handleOutputParameters) StatementHandler
(prepare, parameterize, batch, update, query)
這些類中方法的詳情可以通過查看每個方法的簽名來發現,而且它們的源代碼在MyBatis的發行包中有。你應該理解你覆蓋方法的行為,假設你所做的要比監視調用要多。如果你嘗試修改或覆蓋一個給定的方法,你可能會打破MyBatis的核心。這是低層次的類和方法,要謹慎使用插件。
使用插件是它們提供的非常簡單的力量。簡單實現攔截器接口,要確定你想攔截的指定簽名。
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 <plugins> [html] view plain copy <plugin interceptor="org.mybatis.example.ExamplePlugin"> [html] view plain copy <property name="someProperty" value="100"/> [html] view plain copy </plugin> [html] view plain copy </plugins> [html] view plain copy
上面的插件將會攔截在Executor實例中所有的“update”方法調用,它也是負責低層次映射語句執行的內部對象。
environments
[html] view plain copy <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}" /> <property name="password" value="${jdbc.password}" /> <property name="poolPingEnabled" value="true"/> <property name="poolPingQuery" value="SELECT * FROM app_setup_setting WHERE name='allow_setup_unknown_app'" /> <property name="poolPingConnectionsNotUsedFor" value="7200000"/> </dataSource> </environment> </environments> dataSsource
dataSource元素使用基本的JDBC數據源接口來配置JDBC連接對象的資源。見上
transactionManager
在MyBatis中有兩種事務管理器類型(也就是type=”[JDBC|MANAGED]”):
1.JDBC – 這個配置直接簡單使用了JDBC的提交和回滾設置。它依賴于從數據源得到的連接來管理事務范圍。
2.MANAGED – 這個配置幾乎沒做什么。它從來不提交或回滾一個連接。而它會讓容器來管理事務的整個生命周期(比如Spring或JEE應用服務器的上下文)。默認情況下它會關閉連接。然而一些容器并不希望這樣,因此如果你需要從連接中停止它,將closeConnection屬性設置為false。例如:
[html] view plain copy <transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
這兩種事務管理器都不需要任何屬性。然而它們都是類型別名,要替換使用它們,你需要放置將你自己的類的完全限定名或類型別名,它們引用了你對TransacFactory接口的實現類。
public interface TransactionFactory {
void setProperties(Properties props);
Transaction newTransaction(Connection conn, boolean autoCommit);
}
任何在XML中配置的屬性在實例化之后將會被傳遞給setProperties()方法。你的實現類需要創建一個事務接口的實現,這個接口也很簡單:
[html] view plain copy public interface Transaction { Connection getConnection(); void commit() throws SQLException; void rollback() throws SQLException; void close() throws SQLException; }
使用這兩個接口,你可以完全自定義MyBatis對事務的處理。
mappers
既然MyBatis的行為已經由上述元素配置完了,我們現在就要定義SQL映射語句了。但是,首先我們需要告訴MyBatis到哪里去找到這些語句。Java在這方面沒有提供一個很好的方法,所以最佳的方式是告訴MyBatis到哪里去找映射文件。你可以使用相對于類路徑的資源引用,或者字符表示,或url引用的完全限定名(包括file:///URLs)。例如:
[html] view plain copy // Using classpath relative resources(首選) <mappers> <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> <mapper resource="org/mybatis/builder/BlogMapper.xml"/> <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers> // Using url fully qualified paths <mappers> <mapper url="file:///var/sqlmaps/AuthorMapper.xml"/> <mapper url="file:///var/sqlmaps/BlogMapper.xml"/> <mapper url="file:///var/sqlmaps/PostMapper.xml"/> </mappers>
感謝各位的閱讀!關于“MyBatis中XML映射配置文件的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。