原文 http://www.cnblogs.com/selene/p/4607004.html 一:SqlMapConfig.xml配置文件的內容和配置順序如下 二:properties屬性 作用:將數據連接單獨配置在db.properties中,只需要在SqlMapConfig.xml中載入db. ...
原文 http://www.cnblogs.com/selene/p/4607004.html
一:SqlMapConfig.xml配置文件的內容和配置順序如下
- properties(屬性)
- settings(全局配置參數)
- typeAiases(類型別名)
- typeHandlers(類型處理器)
- objectFactory(對象工廠)
- plugins(插件)
- environments(環境集合屬性對象)mappers(映射器)
- environment(環境子屬性對象)
- transactionManager(事物管理)
- datesource(數據源
- mappers(映射器)
二:properties屬性
作用:將數據連接單獨配置在db.properties中,只需要在SqlMapConfig.xml中載入db.properties的屬性值,在SqlMapConfig.xml中就不需要對資料庫連接參數進行硬編碼。資料庫連接參數只配置在db.properties中,方便對參數進行統一管理,其它xml可以引用該db.properties。
db.properties的內容:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
在SqlMapConfig.xml中載入db.properties
<!-- 載入資料庫文件db.properties -->
<properties resource="db.properties">
<!-- properties中還可以配置一些屬性名和屬性值,此處的優先載入 -->
<!-- <property name="driver" value=""/> -->
</properties>
<!-- 和spring整合後 environments配置將廢除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務管理,事務控制由mybatis管理-->
<transactionManager type="JDBC" />
<!-- 資料庫連接池,由mybatis管理-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
properties特性:
註意:
- 在properties元素體內定義的屬性優先讀取。
- 然後讀取properties元素中resource或url載入的屬性,它會覆蓋已讀取的同名屬性。
- 最後讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性
建議:
不要在properties元素體內添加任何屬性值,只將屬性值定義在properties文件中。
在properties文件中定義屬性名要有一定的特殊性,如xxxx.xxxx(jdbc.driver)
三:settings全局參數配置
mybatis框架運行時可以調整一些運行參數。比如,開啟二級緩存,開啟延遲載入等等。全局參數會影響mybatis的運行行為。
mybatis-settings的配置屬性以及描述
setting(設置) | Description(描述) | valid Values(驗證值組) | Default(預設值) |
cacheEnabled | 在全局範圍內啟用或禁用緩存配置 任何映射器在此配置下。 | true | false | TRUE |
lazyLoadingEnabled | 在全局範圍內啟用或禁用延遲載入。禁用時,所有相關聯的將熱載入。 | true | false | TRUE |
aggressiveLazyLoading | 啟用時,有延遲載入屬性的對象將被完全載入後調用懶惰的任何屬性。否則,每一個屬性是按需載入。 | true | false | TRUE |
multipleResultSetsEnabled | 允許或不允許從一個單獨的語句(需要相容的驅動程式)要返回多個結果集。 | true | false | TRUE |
useColumnLabel | 使用列標簽,而不是列名。在這方面,不同的驅動有不同的行為。參考驅動文檔或測試兩種方法來決定你的驅動程式的行為如何。 | true | false | TRUE |
useGeneratedKeys | 允許JDBC支持生成的密鑰。相容的驅動程式是必需的。此設置強制生成的鍵被使用,如果設置為true,一些驅動會不相容性,但仍然可以工作。 | true | false | FALSE |
autoMappingBehavior | 指定MyBatis的應如何自動映射列到欄位/屬性。NONE自動映射。 PARTIAL只會自動映射結果沒有嵌套結果映射定義裡面。 FULL會自動映射的結果映射任何複雜的(包含嵌套或其他)。 |
NONE,PARTIAL,FULL |
PARTIAL |
defaultExecutorType | 配置預設執行人。SIMPLE執行人確實沒有什麼特別的。 REUSE執行器重用準備好的語句。 BATCH執行器重用語句和批處理更新。 |
SIMPLE,REUSE,BATCH |
SIMPLE |
safeRowBoundsEnabled | 允許使用嵌套的語句RowBounds。 | true | false | FALSE |
mapUnderscoreToCamelCase | 從經典的資料庫列名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 |
lazyLoadTriggerMethods | 指定觸發延遲載入的對象的方法。 | A method name list separated by commas | equals,clone,hashCode,toString |
defaultScriptingLanguage | 指定所使用的語言預設為動態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 | 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>
View Code
四:typeAiases(別名)--重點掌握
在 mapper.xml 中,定義很多的 statement , statement 需要 parameterType 指定輸入參數的類型、需要 resultType 指定輸出結果的映射類型。
如果在指定類型時輸入類型全路徑,不方便進行開發,可以針對 parameterType 或 resultType指定的類型定義一些別名,在 mapper.xml 中通過別名定義,方便開發。
4.1.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 |
4.2.自定義別名
4.2.1:單個別名定義(在SqlMapConfig.xml)
<!-- 別名定義:針對單個別名定義 type:類型的路徑; alias:別名 -->
<typeAliases><typeAlias type="com.mybatis.entity.User" alias="user"/></typeAliases>
UserMapper.xml引用別名:
<select id="findUserById" parameterType="int" resultType="user" >
select * from t_user where id=#{id}
</select>
4.2.2:批量定義別名(常用)
<!-- 批量別名的定義:
package:指定包名,mybatis會自動掃描包中的pojo類,自動定義別名,別名就是類名(首字母大寫或小寫都可以)
-->
<typeAliases>
<package name="com.mybatis.entity"/>
<package name="其它包"/>
</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(映射配置)
6.1:通過resource載入單個映射文件
<!-- 載入映射文件 -->
<mappers>
<!--通過resource方法一次載入一個映射文件 -->
<mapper resource="sqlmap/User.xml"/>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
6.2:通過mapper介面載入單個映射文件
<!-- 通過mapper介面載入單個映射配置文件
遵循一定的規範:需要將mapper介面類名和mapper.xml映射文件名稱保持一致,且在一個目錄中;
上邊規範的前提是:使用的是mapper代理方法;
-->
<mapper class="com.mybatis.mapper.UserMapper"/>
按照上邊的規範,將 mapper.java 和 mapper.xml 放在一個目錄 ,且同名。
6.3:批量載入mapper(推薦使用)
<!-- 批量載入映射配置文件,mybatis自動掃描包下麵的mapper介面進行載入
遵循一定的規範:需要將mapper介面類名和mapper.xml映射文件名稱保持一致,且在一個目錄中;
上邊規範的前提是:使用的是mapper代理方法;
-->
<package name="com.mybatis.mapper"/>