序言
在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>