SqlMapConfig.xml配置文件詳解
配置內容
mybatis的全局配置文件SqlMapConfig.xml,配置內容如下:
1. properties(屬性)
2. settings(全局配置參數)
3. typeAliases(類型別名)
4. typeHandlers(類型處理器)
5. objectFactory(對象工廠)
6. plugins(插件)
7. environments(環境集合屬性對象)
environment(環境子屬性對象)
transactionManager(事務管理)
dataSource(數據源)
8. mappers(映射器)
Properties屬性
SqlMapConfig.xml可以引用java屬性文件中的配置信息如下:
在classpath下定義db.properties文件,
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=mysql
SqlMapConfig.xml引用如下:
<!-- 加載屬性文件 -->
<propertiesresource="db.properties"/>
<environmentsdefault="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<propertyname="driver"value="${jdbc.driver}"/>
<propertyname="url"value="${jdbc.url}"/>
<propertyname="username"value="${jdbc.username}"/>
<propertyname="password"value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
properties特性:
注意: MyBatis 將按照下面的順序來加載屬性:
在 properties素體內定義的屬性首先被讀取。
然後會讀取properties 元素中resource或 url 加載的屬性,它會覆蓋已讀取的同名屬性。
最後讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性。
因此,通過parameterType傳遞的屬性具有最高優先級,resource或 url 加載的屬性次之,最低優先級的是 properties 元素體內定義的屬性。
建議:
不要在properties元素體內添加任何屬性值,只將屬性值定義在properties文件中。
在properties文件中定義屬性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX
Settings全局參數配置
mybatis框架在運行時可以調整一些運行參數。
比如:開啓二級緩存、開啓延遲加載。。
全局參數將會影響mybatis的運行行爲。
Setting(設置) |
Description(描述) |
Valid Values(驗證值組) |
Default(默認值) |
cacheEnabled |
在全局範圍內啓用或禁用緩存配置任何映射器在此配置下。 |
true | false |
TRUE |
lazyLoadingEnabled |
在全局範圍內啓用或禁用延遲加載。禁用時,所有協會將熱加載。 |
true | false |
TRUE |
aggressiveLazy Loading |
啓用時,有延遲加載屬性的對象將被完全加載後調用懶惰的任何屬性。否則,每一個屬性是按需加載。 |
true | false |
TRUE |
multipleResult SetsEnabled |
允許或不允許從一個單獨的語句(需要兼容的驅動程序)要返回多個結果集。 |
true | false |
TRUE |
useColumnLabel |
使用列標籤,而不是列名。在這方面,不同的驅動有不同的行爲。參考驅動文檔或測試兩種方法來決定你的驅動程序的行爲如何。 |
true | false |
TRUE |
useGeneratedKeys |
允許JDBC支持生成的密鑰。兼容的驅動程序是必需的。此設置強制生成的鍵被使用,如果設置爲true,一些驅動會不兼容性,但仍然可以工作。 |
true | false |
FALSE |
autoMapping Behavior |
指定MyBatis的應如何自動映射列到字段/屬性。NONE自動映射。 PARTIAL只會自動映射結果沒有嵌套結果映射定義裏面。 FULL會自動映射的結果映射任何複雜的(包含嵌套或其他)。 |
NONE, PARTIAL, FULL |
PARTIAL |
defaultExecutor Type |
配置默認執行人。SIMPLE執行人確實沒有什麼特別的。 REUSE執行器重用準備好的語句。 BATCH執行器重用語句和批處理更新。 |
SIMPLE REUSE BATCH |
SIMPLE |
defaultStatement Timeout |
設置驅動程序等待一個數據庫響應的秒數。 |
Any positive integer |
Not Set (null) |
safeRowBounds Enabled |
允許使用嵌套的語句RowBounds。 |
true | false |
FALSE |
mapUnderscore ToCamelCase |
從經典的數據庫列名A_COLUMN啓用自動映射到駱駝標識的經典的Java屬性名aColumn。 |
true | false |
FALSE |
localCacheScope |
MyBatis的使用本地緩存,以防止循環引用,並加快反覆嵌套查詢。默認情況下(SESSION)會話期間執行的所有查詢緩存。如果localCacheScope=STATMENT本地會話將被用於語句的執行,只是沒有將數據共享之間的兩個不同的調用相同的SqlSession。 |
SESSION | STATEMENT |
SESSION |
dbcTypeForNull |
指定爲空值時,沒有特定的JDBC類型的參數的JDBC類型。有些驅動需要指定列的JDBC類型,但其他像NULL,VARCHAR或OTHER的工作與通用值。 |
JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER |
OTHER |
lazyLoadTrigger Methods |
指定觸發延遲加載的對象的方法。 |
A method name list separated by commas |
equals,clone,hashCode,toString |
defaultScripting Language |
指定所使用的語言默認爲動態SQL生成。 |
A type alias or fully qualified class name. |
org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver |
callSettersOnNulls |
指定如果setter方法或地圖的put方法時,將調用檢索到的值是null。它是有用的,當你依靠Map.keySet()或null初始化。注意原語(如整型,布爾等)不會被設置爲null。 |
true | false |
FALSE |
logPrefix |
指定的前綴字串,MyBatis將會增加記錄器的名稱。 |
Any String |
Not set |
logImpl |
指定MyBatis的日誌實現使用。如果此設置是不存在的記錄的實施將自動查找。 |
SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING |
Not set |
proxyFactory |
指定代理工具,MyBatis將會使用創建懶加載能力的對象。 |
CGLIB | JAVASSIST |
|
typeAliases(別名)
在mapper.xml中,定義很多的statement,statement需要parameterType指定輸入參數的類型、需要resultType指定輸出結果的映射類型。
如果在指定類型時輸入類型全路徑,不方便進行開發,可以針對parameterType或resultType指定的類型定義一些別名,在mapper.xml中通過別名定義,方便開發。
myBatis默認支持的別名
別名 |
映射的類型 |
_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 |
自定義別名
在SqlMapConfig.xml中配置:
<typeAliases>
<!--單個別名定義 -->
<typeAliasalias="user"type="cn.po.User"/>
<!--批量別名定義,掃描整個包下的類,別名爲類名(首字母大寫或小寫都可以) -->
<packagename="cn.po"/>
<packagename="其它包"/>
</typeAliases>
typeHandlers(類型處理器)
mybatis中通過typeHandlers完成jdbc類型和java類型的轉換。
通常情況下,mybatis提供的類型處理器滿足日常需要,不需要自定義.
mybatis支持類型處理器
類型處理器 |
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 |
任意 |
其他或未指定類型 |
EnumTypeHandler |
Enumeration類型 |
VARCHAR-任何兼容的字符串類型,作爲代碼存儲(而不是索引)。 |
Mappers(映射配置)
通過resource加載單個文件
<mapper resource=”” />使用相對於類路徑的資源
通過url加載單個文件
<mapper url=””/>使用完全限定路徑
<mapper url="file:///D:\my\config\sqlmap\User.xml"/>
通過class加載單個文件
<mapper class=””/>使用mapper接口類路徑
<mapper class="cn.mybatis.mapper"/>
注意:此種方法要求mapper接口名稱和mapper映射文件名稱相同,且放在同一個目錄中。
批量加載mapper(推薦使用)
注意:此種方法要求mapper接口名稱和mapper映射文件名稱相同,且放在同一個目錄中。