下面對SqlMapConfig.xml中的配置進行詳細剖析。
mybatis的全局配置文件SqlMapConfig.xml,配置內容以下:
properties(屬性)
settings(全局配置參數)
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)
environments(環境集合屬性對象)
environment(環境子屬性對象)
transactionManager(事務管理)
dataSource(數據源)
mappers(映射器)
1.properties定義
來看看咱們以前的配置文件:java
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 和spring整合後 environments配置將廢除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理--> <transactionManager type="JDBC" /> <!-- 數據庫鏈接池--> <dataSource type="POOLED"> <property name="driver" value="org.gjt.mm.mysql.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> </environments> <!-- 加載映射文件 --> <mappers> <mapper resource="sqlmap/User.xml"/> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration>
咱們只有environments和mappers標籤中配置了東西,並且將來整合Spring的時候environments中的東西還有可能去掉,那麼咱們都在這裏面配什麼重要的東西呢?
咱們先把數據庫鏈接池的配置轉移出去,單獨創建一個文件
將數據庫鏈接參數單獨配置在db.properties中,只須要在SqlMapConfig.xml中加載db.properties的屬性值。
在SqlMapConfig.xml中就不須要對數據庫鏈接參數硬編碼。
將數據庫鏈接參數只配置在db.properties中,緣由:方便對參數進行統一管理,其它xml能夠引用該db.properties:mysql
jdbc.driver=org.gjt.mm.mysql.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8 jdbc.username=root jdbc.password=1234
而後在SqlMapConfig.xml的environment中加載屬性文件,並將相應屬性加入到參數:spring
<!-- 加載屬性文件 --> <properties resource="db.properties"></properties> <!-- 和spring整合後 environments配置將廢除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理--> <transactionManager type="JDBC" /> <!-- 數據庫鏈接池--> <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>
你們該有疑問了,在db.properties依舊仍是硬編碼呀?爲何還要把它折騰一遍寫在db.properties中呢?緣由是方便對運行的參數進 行統一管理,其它的XML也能夠引用這個配置文件,並且未來使用其餘數據庫,能夠創建幾個不一樣的properties屬性文件,想引用那個就引用哪一個。
還有一個緣由,就是SqlMapConfig.xml文件配置的東西很是多,在集羣環境下,有許多SqlMapConfig.xml文件,若是不把數據庫 鏈接池移出來,一個一個的SqlMapConfig.xml文件更改數據庫鏈接池參數的時候很麻煩,若是配置了db.properties,只須要改它自 己就能夠了。
在<properties>標籤中能夠在裏面配置屬性:sql
<properties resource="db.properties"> <property name="" value=""/> </properties>
properties特性:
注意:
MyBatis 將按照下面的順序來加載屬性:
a.在 properties 元素體內定義的屬性首先被讀取。
b.而後會讀取properties 元素中resource或 url 加載的屬性,它會覆蓋已讀取的同名屬性。
c.最後讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性。
建議:
不要在properties元素體內添加任何屬性值,只將屬性值定義在properties文件中。
在properties文件中定義屬性名要有必定的特殊性,如:XXXXX.XXXXX.XXXX
2.settings全局參數配置
mybatis框架在運行時能夠調整一些運行參數。
好比:開啓二級緩存、開啓延遲加載。。
全局參數將會影響mybatis的運行行爲。
詳細參見「學習資料/mybatis-settings.xlsx」文件
3.typeAliases(別名)重點
3.1需求
在mapper.xml中,定義不少的statement,statement須要parameterType指定輸入參數的類型、須要resultType指定輸出結果的映射類型。
若是在指定類型時輸入類型全路徑,不方便進行開發,能夠針對parameterType或resultType指定的類型定義一些別名,在mapper.xml中經過別名定義,方便開發。
3.2mybatis默認支持別名(不用單獨配置,直接寫默認別名就行)
別名 映射的類型
_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
例子:數據庫
<select id="findUserByUsername" parameterType="java.lang.String" resultType="cn.edu.hpu.mybatis.PO.User"> select * from user where username like '%${value}%' </select>
改成
緩存
<select id="findUserByUsername" parameterType="string" resultType="cn.edu.hpu.mybatis.PO.User"> select * from user where username like '%${value}%' </select>
3.3自定義別名
3.3.1單個別名定義
在SqlMapConfig.xml中配置:mybatis
<!-- 別名定義 -->
app
<typeAliases> <!-- 針對單個別名定義 type:類型的路徑 alias:別名--> <typeAlias type="cn.edu.hpu.mybatis.PO.User" alias="user"/> </typeAliases>
在mapper.xml中使用別名框架
<select id="findUserByUsername" parameterType="java.lang.String" resultType="user"> select * from user where username like '%${value}%' </select>
測試成功,可使用
3.3.2批量別名定義
在某些包下類比較多,使用上面的寫法太冗餘,使用批量定義,定義一整個包中的類的別名:學習
<!-- 別名定義 --> <typeAliases> <!-- 批量定義別名 指定包名,mybatis自動掃描包中的PO類,自動定義別名,別名就是類名(首字母大寫或小寫) --> <package name="cn.edu.hpu.mybatis.PO"/> </typeAliases>
在mapper.xml中使用別名
<select id="findUserByUsername" parameterType="java.lang.String" resultType="user"> select * from user where username like '%${value}%' </select>
或
<select id="findUserByUsername" parameterType="java.lang.String" resultType="User"> select * from user where username like '%${value}%' </select>
均可以,測試無誤
在日常開發中,批量別名定義最經常使用。
4.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-任何兼容的字符串類型,做爲代碼存儲(而不是索引)。
5.mappers(映射配置)
5.1經過resource加載單個映射文件
<mappers> <mapper resource="sqlmap/User.xml"/> <mapper resource="mapper/UserMapper.xml"/> </mappers>
5.2經過mapper接口加載單個mapper
<!-- 加載映射文件 --> <mappers> <!-- 經過mapper接口加載映射文件 遵循一些規則:須要將mapper接口的類名和mapper.xml映射文件名稱保持一致,且在一個目錄中。 上面規範的前提是,使用的是mapper代理方法--> <mapper class="cn.edu.hpu.mybatis.mapper.UserMapper"/> </mappers>
按照上邊的規範,將mapper.java和mapper.xml放在一個目錄 ,且同名。
5.3批量加載mapper(推薦使用)
<!-- 加載映射文件 -->
<mappers> <!-- 批量加載mapper 指定mapper接口的報名,mybatis自動掃描包下全部mapper接口進行加載。 遵循一些規則:須要將mapper接口的類名和mapper.xml映射文件名稱保持一致,且在一個目錄中。 上面規範的前提是,使用的是mapper代理方法 --> <package name="cn.edu.hpu.mybatis.mapper"/> </mappers>
比較經常使用的就是批量加載mapper。