MyBatis學習--SqlMapConfig.xml設定檔,sqlmapconfig.xml配置
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.Driver2 jdbc.url=jdbc:mysql://localhost:3306/shop3 jdbc.username=root4 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代理方法