一、配置文件結構
MyBatis的核心配置文件配置了MyBatis的一些全局信息,包含數據庫連接信息和MyBatis運行時所需的各種特性,以及設置和影響MyBatis行為的一些屬性。
該配置文件的元素節點是有先后順序的,如下
configuration 配置
properties 可以配置在Java屬性配置文件中
settings 修改MyBatis在運行時的行為方式
typeAliases 為Java類型命名一個別名(簡稱)
typeHandlers 類型處理器
objectFactory 對象工廠
plugins 插件
environments 環境
transactionManager 事務管理器
dataSource 數據源
mappers映射器
其中,configuration元素是整個XML配置文件的根結點
二、properties元素
properties元素描述的都是外部化、可替代的屬性。
1、可通過外部指定的方式,即配置在典型的Java屬性配置文件中,如database.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/smbms
user=root
password=123
<properties resource="database.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${user}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
2、直接配置為xml,並使用這些屬性對配置項實現動態配置
<properties> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/> <property name="user" value="root"/> <property name="password" value="123"/> </properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
若同時用了這兩種方式,哪種方式優先呢?<property>子節點設置的值會先被讀取,resource中的同名屬性將會覆蓋property子節點的值。所以resource屬性值的優先級高於property子節點配置的值。
三、settings元素
setting元素的作用是設置一些非常重要的選項,用於設置和改變MyBatis運行中的行為,常用屬性及值如下
- cacheEnabled 對在此配置文件下的所有cache進行全局性開/關設置 可選值為true、false 默認值為true
- lazyLoadingEnabled 全局性設置懶加載。如果設為false,則所有相關聯的設置都會被初始化加載 可選值為true、false 默認值為true
- autoMappingBehavior MyBatis對於resultMap自動映射的匹配級別 可選值為NONE、PARTIAL、FULL 默認值為PARTIAL
四、typeAliases元素
typeAliases元素的作用是配置類型別名,通過與mybatis的sql映射文件相關聯,減少輸入多余的完整類名,以簡化操作。
<?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> <typeAliases> <typeAlias type="edu.cn.pojo.User" alias="user"/> <typeAlias type="edu.cn.pojo.Provider" alias="provider"/> </typeAliases> </configuration>
這種寫法的弊端在於,如果一個項目中有多個pojo,需要一一進行配置。有更加簡化的寫法,就是通過package的name屬性直接指定包名,mybatis會自動掃描指定包下的javabean,並設置一個別名,默認名稱為javabean的非限定類名。
<?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> <typeAliases> <package name="edu.cn.pojo"/> </typeAliases> </configuration>
此時mapper中的寫法如下,edu.cn.pojo.User的非限定類名為User
<select id="getUserList" resultType="User"> select * from smbms_user </select>
另外,mybatis已經為許多常見的java基礎數據類型內建了相應的類型別名,一般都與其映射類型一致,並且都是大小寫不敏感的,比如映射的類型int、Boolean、String、Integer等,它們的別名就是int、Boolean、String、Integer。
五、environments元素
Mybatis可以配置多套運行環境,如開發環境、測試環境、生產環境,我們可以選擇不同的配置,從而將SQL映射到不同的數據庫環境上。不管幾套運行環境,都必須明確選擇出當前唯一的一個運行環境,這是因為每個數據庫都對應一個SqlSessionFactory實例,需要指明哪個運行環境將被創建,並把運行環境中設置的參數傳遞給SqlSessionFactoryBuilder。
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
1、通過default屬性來指定默認的運行環境,與某個id一致。id的命名要確保唯一
2、transactionManager事務管理器,設置器類型為JDBC(MyBatis有兩種事務管理類型,及JDBC和MANAGED),直接使用JDBC的提交和回滾功能,依賴於從數據源獲得連接來管理事務的生命周期
3、dataSource元素,使用標准的JDBC數據源接口來配置JDBC連接對象的資源。MyBatis提供了三種數據源類型(UNPOOLED、POOLED、JNDI),這里使用POOLED數據源類型。該類型利用“池”的概念將JDBC連接對象組織起來,減少了創建新的連接實例時所必需的初始化和認證時間,是MyBatis實現的簡單的數據庫連接池類型,它使數據庫連接可被復用,不必在每次請求時都去創建一個物理連接。
六、mappers元素
mappers映射器用來定於SQL的映射語句,我們只需要告訴MyBatis去哪里找到這些SQL語句,即去哪里找相應的SQL映射文件,可以使用類資源路徑或者URL等,如下
<mappers> <mapper resource="cn/smbms/dao/user/UserMapper.xml"/> <mapper resource="cn/smbms/dao/provider/ProviderMapper.xml"/> </mappers>
<mappers> <mapper resource="/Users/yanguobin/UserMapper.xml"/> <mapper resource="/Users/yanguobin/ProviderMapper.xml"/> </mappers>