Mybatis配置詳解 XML配置文件層次結構 下圖展示了mybatis config.xml的全部配置元素 properties元素 properties是一個配置屬性的元素,讓我們能在配置文件的上下文中使用它,MyBatis提供3種配置方式。 property子元素。 properties配置文 ...
Mybatis配置詳解
XML配置文件層次結構
下圖展示了mybatis-config.xml的全部配置元素
properties元素
properties是一個配置屬性的元素,讓我們能在配置文件的上下文中使用它,MyBatis提供3種配置方式。
property子元素。
<property name="driver" value="com.mysql.jdbc.Driver"/>
properties配置文件。
一般情況下,我們會使用一個單獨的properties配置文件來配置屬性值,以方便我們在多個配置文件中重覆使用它們,也方便日後維護和隨時修改。我們可以通過${key}的形式,取出在配置文件中配置的值。
<configuration> <!-- 引入配置文件 --> <properties resource="datasource.properties"/> <environments default="dev"> <environment id="dev"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!-- 使用配置文件中的屬性 --> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> </dataSource> </environment> </environments> </configuration>
SqlSessionFactoryBuilder使用Properties文件構建。
出於安全考慮,properties配置文件中的賬號密碼等元素可能是加密的,這個時候就需要對加密的元素進行處理。
public static void func() throws Exception { Properties properties = new Properties(); properties.load(Resources.getResourceAsStream("datasource.properties")); // 對原賬號密碼解密 properties.setProperty("username", decode(properties.getProperty("username"))); properties.setProperty("password", decode(properties.getProperty("password"))); InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); // SqlSessionFactoryBuilder可以使用一個InputStream和一個Properties構建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is, properties); }
settings設置
settings(設置)在MyBatis中是最複雜的配置,它會改變 MyBatis 運行時的行為。
typeAliases別名
別名(typeAliases)是一個指代的名稱。因為我們遇到的類全限定名過長,所以我們希望用一個簡短的名稱去指代它,而這個名稱可以在MyBatis上下文中使用,在 MyBatis中別名是不分大小寫的。一個 typeAliases的實例是在解析配置文件時生成的,然後長期保存在 Configuration對象中,這樣就沒有必要運行的時候再次生成它的實例了。
系統定義的別名
通過org.apache.ibatis.type.TypeAliasRegistry可以查看所有系統定義的別名,主要是基本數據類型、字元串、基本數據類型數組、日期、容器類。
通過XML自定義別名
在mybatis-config.xml中通過
<typeAliases>
元素可以自定義別名。<typeAliases> <typeAlias type="com.zl.domain.UserDomain" alias="user"/> </typeAliases>
通過註解的方式自定義別名
在mybatis-config.xml中添加package掃描包
<typeAliases> <package name="com.zl.domain"/> </typeAliases>
@Alias("user") public class UserDomain { }
當配合上面的配置,MyBatis就會自動掃描包,將掃描到的類裝載到上下文中。如果配置了包掃描的路徑,而沒有註解@Alias的類也會被MyBatis裝載,MyBatis會自動把類名的第一個字母變為小寫,作為MyBatis的別名。
typeHandler類型轉換器
typeHandler為類型處理器。MyBatis在預處理語句(PreparedStatement)中設置一個參數或者從結果集(ResultSet)中取出一個值時,都會用註冊了的typeHandler進行處理。typeHandler常用的配置為Java類型(javaType)、JDBC類型(jdbcType)。typeHandler的作用就是將參數從javaType轉化為 jdbcType,或者從資料庫取出結果時把jdbcType轉化為javaType。
具體詳見:Mybatis類型轉換介紹 TypeHandler
objectFactory對象工廠
當MyBatis在構建一個結果返回的時候,都會使用ObjectFactory(對象工廠)去構建POJO,我們可以定製自己的對象工廠。MyBatis中預設的ObjectFactory是由DefaultObjectFactory來提供服務的。
environments環境變數
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
</dataSource>
</environment>
</environments>
- default:表示預設使用哪個數據源
- id:表示數據源的名稱
- transactionManager的事務類型type一共有三種:JDBC,採用JDBC方式管理事務,獨立編碼中我們常常使用;MANAGED,採用容器方式管理事務,在JNDI數據源中常用;自定義,由使用者自定義資料庫事務管理辦法,適用於特殊應用。
- property元素配置數據源的各類屬性
- dataSource的type屬性是提供我們對數據厙連接方式的配置:UNPOOLED(非連接池資料庫)、POOLED(連接池資料庫)、JNDI(JNDI數據源)、自定義數據源。