- 簡介
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(映射器)
- properties
數據庫連接參數單獨配置在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。
- settings(全局配置參數)
mybatis框架在運行時可以調整一些運行參數。比如:開啟二級緩存、開啟延遲加載。全局參數將會影響mybatis的運行行為。具體需要可以查看MyBatis的文檔。
- typeAliases(類型別名)
在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>
- typeHandlers(類型處理器)
類型處理器用於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-任何兼容的字符串類型,作為代碼存儲(而不是索引)。 |
- mappers(映射器)
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代理方法
