SqlMapConfig.xml是MyBatis的全局配置文件,在前面的文章中我們可以看出,在SqlMapConfig.xml主要是配置了數據源、事務和映射文件,其實在SqlMapConfig.xml中還可以配置很多信息,如:
1、properties(屬性)
2、settings(全局配置參數)
3、typeAliases(類型別名)
4、typeHandlers(類型處理器)
5、objectFactory(對象工廠)
6、plugins(插件)
7、environments(環境集合屬性對象)
7.1、environment(環境子屬性對象)
7.2、transactionManager(事務管理)
7.3、dataSource(數據源)
8、mappers(映射器)
數據庫連接參數單獨配置在db.properties中,只需要在SqlMapConfig.xml中加載db.properties的屬性值,在SqlMapConfig.xml中就不需要對數據庫連接參數硬編碼,將數據庫連接參數只配置在db.properties中,原因:方便對參數進行統一管理,其它xml可以引用該db.properties。這樣如果有多處修改數據源信息的話,只需要修改db.properties配置文件即可。
在classpath下定義db.properties文件如下:
1 jdbc.driver=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/shop 3 jdbc.username=root 4 jdbc.password=
SqlMapConfig.xml引用如下:
1 <properties resource="db.properties"/> 2 <environments default="development"> 3 <environment id="development"> 4 <transactionManager type="JDBC"/> 5 <dataSource type="POOLED"> 6 <property name="driver" value="${jdbc.driver}"/> 7 <property name="url" value="${jdbc.url}"/> 8 <property name="username" value="${jdbc.username}"/> 9 <property name="password" value="${jdbc.password}"/> 10 </dataSource> 11 </environment> 12 </environments>
properties特性:
MyBatis 將按照下面的順序來加載屬性:
1、在 properties 元素體內定義的屬性首先被讀取。
2、然後會讀取properties 元素中resource或 url 加載的屬性,它會覆蓋已讀取的同名屬性。
3、最後讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性。
因此,通過parameterType傳遞的屬性具有最高優先級,resource或 url 加載的屬性次之,最低優先級的是 properties 元素體內定義的屬性。
一般不要在properties元素體內添加任何屬性值,只將屬性值定義在properties文件中。在properties文件中定義屬性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX。
mybatis框架在運行時可以調整一些運行參數。比如:開啟二級緩存、開啟延遲加載。全局參數將會影響mybatis的運行行為。具體需要可以查看MyBatis的文檔。
在mapper.xml中,定義很多的statement,statement需要parameterType指定輸入參數的類型、需要resultType指定輸出結果的映射類型。如果在指定類型時輸入類型全路徑,不方便進行開發,可以針對parameterType或resultType指定的類型定義一些別名,在mapper.xml中通過別名定義,方便開發。
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
2、自定義別名:
1 <typeAliases> 2 <!-- 單個別名 --> 3 <typeAlias type="com.luchao.mybatis.first.po.User" alias="user"/> 4 </typeAliases>
3、批量別名:
1 <typeAliases> 2 <!-- 批量別名定義,掃描整個包下的類,別名為類名(首字母大寫或小寫都可以) --> 3 <package name="com.luchao.mybatis.first.po"/> 4 </typeAliases>
類型處理器用於java類型和jdbc類型映射,如下:
1 <select id="findUserById" parameterType="int" resultType="user"> 2 select * from user where id = #{id} 3 </select>
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-任何兼容的字符串類型,作為代碼存儲(而不是索引)。
Mapper配置的幾種方法:
1、<mapper resource=" " />
使用相對於類路徑的資源,如:<mapper resource="sqlmap/User.xml" />
2、<mapper url=" " />
使用完全限定路徑,如:<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />
3、 <mapper class=" " />
單個別名定義,使用mapper接口類路徑,如:<mapper class="com.luchao.mybatis.first.mapper.UserMapper"/>
注意:此種方法要求mapper接口名稱和mapper映射文件名稱相同,且放在同一個目錄中。
通過mapper接口加載單個 映射文件遵循一些規范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄中
上邊規范的前提是:使用的是mapper代理方法
4、<package name=""/>
注冊指定包下的所有mapper接口,如:<package name="cn.itcast.mybatis.mapper"/>
注意:此種方法要求mapper接口名稱和mapper映射文件名稱相同,且放在同一個目錄中。
批量加載mapper,指定mapper接口的包名,mybatis自動掃描包下邊所有mapper接口進行加載,遵循一些規范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄 中
上邊規范的前提是:使用的是mapper代理方法