MyBatis配置詳解


 

序言

        在Eclipse中,將鼠標放在根節點上后,可以看到配置文件中的主要配置項,如下圖所示:

        

        這些項分別是:properties、settings、typeAliases、typeHandlers、plugins、environments、mappers。

        注意:這些配置項必須按照先后順序進行配置。

一、配置項介紹

        properties:用於配置屬性信息。

        settings:用於配置MyBatis的運行時方式。

        typeAliases:配置類型別名,可以在xml中用別名取代全限定名。

        typeHandlers:配置類型處理器。

        plugins:配置攔截器,用於攔截sql語句的執行。

        environments:配置數據源信息、連接池、事務屬性等。

        mappers:配置SQL映射文件。

二、配置項詳解

(1)properties

        配置properties采用鍵值對的格式進行配置。

      文件內配置properties

<property name="name1" value="value1"/> <property name="name2" value="value2"/> <property name="name3" value="value3"/>     ...... <property name="nameN" value="valueN"/>

      文件外配置properties

<properties resource="config.properties" />

        “config.properties”中的內容如下所示:

name1:value1  name2:value2  name3:value2  ......  nameN:valueN

(2)settings

        該項配置格式如下所示:

<settings>   <setting name="name1" value="value1" />   <setting name="name2" value="value2" />   <setting name="name3" value="value3" />         ......    <setting name="nameN" value="valueN" />  </settings>

        setting可設置的項相關介紹參見下表:

設置參數 描述 有效值 默認值
cacheEnabled 這個配置使全局的映射器啟用或禁用 緩存。 true | false true
lazyLoadingEnabled 全局啟用或禁用延遲加載。當禁用時, 所有關聯對象都會即時加載。                 This value can be superseded for an specific relation by using the fetchType attribute on it. true | false false
aggressiveLazyLoading 當啟用時, 有延遲加載屬性的對象在被               調用時將會完全加載任意屬性。否則,                每種屬性將會按需要加載。 true | false true
multipleResultSetsEnabled 允許或不允許多種結果集從一個單獨                 的語句中返回(需要適合的驅動) true | false true
useColumnLabel 使用列標簽代替列名。                不同的驅動在這                 方便表現不同。                 參考驅動文檔或充分測                 試兩種方法來決定所使用的驅動。 true | false true
useGeneratedKeys 允許 JDBC 支持生成的鍵。                 需要適合的                 驅動。                 如果設置為 true 則這個設置強制                 生成的鍵被使用,                  盡管一些驅動拒絕兼                 容但仍然有效(比如 Derby) true | false False
autoMappingBehavior 指定 MyBatis 如何自動映射列到字段/                 屬性。PARTIAL 只會自動映射簡單,                  沒有嵌套的結果。FULL 會自動映射任                 意復雜的結果(嵌套的或其他情況)                   。 NONE, PARTIAL, FULL PARTIAL
defaultExecutorType 配置默認的執行器。SIMPLE 執行器沒                 有什么特別之處。REUSE 執行器重用                 預處理語句。BATCH 執行器重用語句                 和批量更新 SIMPLE                REUSE                BATCH SIMPLE
defaultStatementTimeout 設置超時時間,                 它決定驅動等待一個數                據庫響應的時間。 Any positive integer Not Set (null)
safeRowBoundsEnabled Allows using RowBounds on nested                statements. true | false False
mapUnderscoreToCamelCase Enables automatic mapping from                classic database column names                A_COLUMN to camel case classic Java                property names aColumn. true | false False
localCacheScope MyBatis uses local cache to prevent circular references and speed up repeated nested queries.                 By default (SESSION) all queries executed during a session are cached. If localCacheScope=STATEMENT local session will be used just for                 statement execution, no data will be shared between two different calls to the same SqlSession. SESSION | STATEMENT SESSION
jdbcTypeForNull Specifies the JDBC type for null values when no specific JDBC type was provided for the parameter.                 Some drivers require specifying the column JDBC type but others work with generic values like NULL, VARCHAR or OTHER. JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER OTHER
lazyLoadTriggerMethods Specifies which Object's methods trigger a lazy load A method name list separated by commas equals,clone,hashCode,toString
defaultScriptingLanguage Specifies the language used by default for dynamic SQL generation. A type alias or fully qualified class name. org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver
callSettersOnNulls 當結果集中含有Null值時是否執行映射對象的setter或者Map對象的put方法。此設置對於原始類型如int,boolean等無效。 true | false false
logPrefix Specifies the prefix string that MyBatis will add to the logger names. Any String Not set
logImpl Specifies which logging implementation MyBatis should use. If this setting is not present logging implementation will be autodiscovered. SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING Not set
proxyFactory Specifies the proxy tool that MyBatis will use for creating lazy loading capable objects. CGLIB | JAVASSIST CGLIB

一個設置信息元素的示例,完全的配置如下所示:

 <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="autoMappingBehavior" value="PARTIAL" />   <setting name="defaultExecutorType" value="SIMPLE" />   <setting name="defaultStatementTimeout" value="25" />   <setting name="safeRowBoundsEnabled" value="false" />   <setting name="mapUnderscoreToCamelCase" value="false" />   <setting name="localCacheScope" value="SESSION" />   <setting name="jdbcTypeForNull" value="OTHER" />   <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />  </settings>

(3)typeAliases

<typeAliases>   <typeAlias alias="Author" type="domain.blog.Author"/>   <typeAlias alias="Blog" type="domain.blog.Blog"/>   <typeAlias alias="Comment" type="domain.blog.Comment"/>   <typeAlias alias="Post" type="domain.blog.Post"/>   <typeAlias alias="Section" type="domain.blog.Section"/>   <typeAlias alias="Tag" type="domain.blog.Tag"/> </typeAliases>

        類型別名必須遵循MyBatis命名規范。

        具體參見:http://mybatis.github.io/mybatis-3/zh/configuration.html#typeAliases

(4)typeHandlers

        無論是 MyBatis 在預處理語句中設置一個參數, 還是從結果集中取出一個值時, 類型處 理器被用來將獲取的值以合適的方式轉換成 Java 類型。下面這個表格描述了默認的類型處 理器。

類型處理器 Java 類型 JDBC 類型
BooleanTypeHandler               java.lang.Boolean, boolean               任何兼容的布爾值
ByteTypeHandler               java.lang.Byte, byte               任何兼容的數字或字節類型
ShortTypeHandler               java.lang.Short, short               任何兼容的數字或短整型
IntegerTypeHandler               java.lang.Integer, int               任何兼容的數字和整型
LongTypeHandler               java.lang.Long, long               任何兼容的數字或長整型
FloatTypeHandler               java.lang.Float, float               任何兼容的數字或單精度浮點型
DoubleTypeHandler               java.lang.Double, double               任何兼容的數字或雙精度浮點型
BigDecimalTypeHandler               java.math.BigDecimal               任何兼容的數字或十進制小數類型
StringTypeHandler               java.lang.String               CHAR 和 VARCHAR 類型
ClobTypeHandler               java.lang.String               CLOB 和 LONGVARCHAR 類型
NStringTypeHandler               java.lang.String               NVARCHAR 和 NCHAR 類型
NClobTypeHandler               java.lang.String               NCLOB 類型
ByteArrayTypeHandler               byte[]               任何兼容的字節流類型
BlobTypeHandler               byte[]               BLOB 和 LONGVARBINARY 類型
DateTypeHandler               java.util.Date               TIMESTAMP 類型
DateOnlyTypeHandler               java.util.Date               DATE 類型
TimeOnlyTypeHandler               java.util.Date               TIME 類型
SqlTimestampTypeHandler               java.sql.Timestamp               TIMESTAMP 類型
SqlDateTypeHandler               java.sql.Date               DATE 類型
SqlTimeTypeHandler               java.sql.Time               TIME 類型
ObjectTypeHandler               Any 其他或未指定類型
EnumTypeHandler               Enumeration Type VARCHAR-任何兼容的字符串類型,                 作為代碼存儲(而不是索引)
EnumOrdinalTypeHandler               Enumeration Type Any compatible NUMERIC or DOUBLE, as the position is stored                (not the code itself).

        你可以重寫類型處理器或創建你自己的類型處理器來處理不支持的或非標准的類型。

(5)plugins

        參見:http://mybatis.github.io/mybatis-3/zh/configuration.html#plugins

(6)environments

        參見:http://mybatis.github.io/mybatis-3/zh/configuration.html#environments

(7)mappers

<mappers>   <mapper resource="model1.xml"/>   <mapper resource="model2.xml"/>   <mapper resource="model3.xml"/>     ......    <mapper resource="modelN.xml"/>  </mappers>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM