一: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>
四: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"/>