Mybatis配置檔案詳解
- Properties(屬性)
Java屬性檔案可以配置直觀的。
如:
<properties>
<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql:///mybatis"/>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="root"/>
</properties>
或者通過直接引入屬性檔案,例如:
<properties resource="db.properties"></properties>
然後db.properties檔案中的配置就是:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis
jdbc.username=root
jdbc.password=root
值得一提的是:上面resource屬性預設是載入類路徑下的db.perperties屬性檔案
要用到這些屬性的時候,就如下面一樣:
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
如果一個屬性在多個地方出現,那Mybatis將按一下的順序載入:
(1)屬性檔案中的屬性項首先被讀取
(2)在類路徑或URL資源中讀取的屬性項第二順序載入,並且可以覆蓋第一順序載入的值
(3)在方法體中給定的引數值最好載入,但是以後覆蓋上述兩種載入的值。
也就是說,最高級別的屬性值是方法體中設定的引數值,接下來是類路徑和URL,最後才是 屬性檔案
2.settings(設定)
例如:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25000"/>
</settings>
3.typeAliases(類型別名)
類型別名是Java型別的簡稱。
逐個設定,例如:
<typeAliases>
<typeAlias type="com.yan.po.User" alias="user"/>
</typeAliases>
整個包設定,例如:
<typeAliases>
<package name="com.yan.po"/>
</typeAliases>
然後,咱們要注意的是,Mybatis已經給咱們預設設定好常用型別的別名,如下表:
4.typeHandlers(型別控制代碼)
當mybatis 對 PreparedStatement設入一個引數或者是從ResultSet 返回一個值的時候,型別控制代碼被用將值轉為相匹配的JAVA型別。這下表格描述了預設的型別控制代碼。
你可以重寫型別控制代碼或者是建立你自己的方式來處理不支援或者是非標準的型別。只需要簡單地實現org.mybaits.type包裡的TypeHandler,並且對映到一個JAVA型別,然後再選定一個JDBC型別。
例如:
<typeHandlers>
<typeHandler handler="com.yan.typeHandler.TestTypeHandler"/>
</typeHandlers>
然後自己寫了一個型別:
package com.yan.typeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
public class TestTypeHandler<T> implements TypeHandler<T> {
public void setParameter(PreparedStatement ps, int i, T parameter,
JdbcType jdbcType) throws SQLException {
// TODO Auto-generated method stub
ps.setString(i, (String) parameter);
}
public T getResult(ResultSet rs, String columnName) throws SQLException {
// TODO Auto-generated method stub
return null;
}
public T getResult(ResultSet rs, int columnIndex) throws SQLException {
// TODO Auto-generated method stub
return null;
}
public T getResult(CallableStatement cs, int columnIndex)
throws SQLException {
// TODO Auto-generated method stub
return null;
}
}
然後,想怎麼改型別,就怎麼改,就是這麼的任性。
比如,我想讓某個返回值用到這個型別,例如:
<resultMap type="" id="" >
<result column="" property="" typeHandler="com.yan.typeHandler.TestTypeHandler"/>
</resultMap>
現在,你們應該知道怎麼用這玩意了吧 ,沒錯,其實這玩意兒就是這麼的簡單。
5.ObjectFactory(物件工廠)
每次Mybatis為結果物件建立一個新例項,都會用到ObjectFactory。預設的ObjectFactory與使用目標類的建構函式建立一個例項毫無區別,如果有已經對映的引數,那也可能使用帶引數的建構函式。如果你重寫ObjectFactory的預設操作,你就可以建立你自己的物件。例如:
SqlMapConfig.xml中配置是:
<ObjectFactory type="com.yan.objectFactory.TestObjectFactory">
<property name="" value=""/>
</ObjectFactory>
重寫的ObjectFactory 程式碼:
package com.yan.objectFactory;
import java.util.List;
import java.util.Properties;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import com.yan.po.User;
public class TestObjectFactory extends DefaultObjectFactory {
public Object create(Class type){
return super.create(type);
}
public Object create(Class type,List<Class<T>> constructorArgTypes,List<Object> constructorArgs){
return super.create(type, constructorArgTypes, constructorArgs);
}
public void setProperties(Properties properties){
super.setProperties(properties);
}
}
6.Plugins (外掛)
啥都先別說,來個例子你就明白了:
sqlMapConfig.xml中配置:
<!-- 配置分頁外掛 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 設定資料庫型別 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種資料庫-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
就是這麼簡單,這麼好用。
7.Environment (環境)
MyBatis可以配置多個環境。這可以幫助你SQL對映對應多種資料庫等。
比如說,你想為開發、測試、釋出產品配置不同的環境。等等。
不過,值得咱們注意的是:雖然你可以配置多重環境,但是你只可以選擇一對一的SqlsessionFactory例項。
例如: 用environment 的id屬性來標識,然後environments 的default指定
<environments default="development2">
<environment id="development1">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="development2">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
8.Mappers (對映器)
用過Mabatis的朋友們都知道這個,這個標籤有兩個用法,都是用來對映代理mapper.xml檔案使用的。
第一個用法:逐個對映,
例如:
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
第二個用法:包名對映,其包下的mapper.xml檔案都被註冊
例如:
<mappers>
<package name="com.yan.mapper"/>
</mappers>
最後,在這裡祝大家學習愉快,家庭幸福美滿