1. 程式人生 > >Mybatis學習(二)Mybatis配置檔案

Mybatis學習(二)Mybatis配置檔案

Mybatis配置檔案影響著Mybatis的行為。

配置檔案有兩種
第 1種基於xml配置檔案

下面來具體分析一個xml配置檔案.

<?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>
    <!-- 屬性:定義配置外在化 -->
<properties></properties> <!-- 設定:定義mybatis的一些全域性性設定 --> <settings> <!-- 具體的引數名和引數值 --> <setting name="" value=""/> </settings> <!-- 型別名稱:為一些類定義別名 --> <typeAliases></typeAliases> <!-- 型別處理器:定義Java型別與資料庫中的資料型別之間的轉換關係 -->
<typeHandlers></typeHandlers> <!-- 物件工廠 --> <objectFactory type=""></objectFactory> <!-- 外掛:mybatis的外掛,外掛可以修改mybatis的內部執行規則 --> <plugins> <plugin interceptor=""></plugin> </plugins> <!-- 環境:配置mybatis的環境 -->
<environments default=""> <!-- 環境變數:可以配置多個環境變數,比如使用多資料來源時,就需要配置多個環境變數 --> <environment id=""> <!-- 事務管理器 --> <transactionManager type=""></transactionManager> <!-- 資料來源 --> <dataSource type=""></dataSource> </environment> </environments> <!-- 資料庫廠商標識 --> <databaseIdProvider type=""></databaseIdProvider> <!-- 對映器:指定對映檔案或者對映類 --> <mappers></mappers> </configuration>

整理一下完整的配置檔案如下

名稱空間:固定的
configuration:配置
    properties:屬性
    settings:設定
    typeAliases:型別命名
    typeHandlers:型別處理器
    objectFactory:物件工廠
    plugins:外掛
    environments:環境
    environment:環境變數
    transactionManager:事務管理器
    dataSource:資料來源
    databaseIdProvider:資料庫廠商標識
    mappers:對映器

但關於每一項的具體如何設定如下
properties
可以使用外部檔案動態傳遞,設定比計靈活多種選擇
舉例如下
可以在CLASSPATH 中增加一個db.properties 的Java屬性檔案。

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis
username=root
Password=root

在配置檔案中配置

<properties resource="db.properties"/>

settings
setting是指定MyBatis的一些全域性配置屬性,這是MyBatis中極為重要的調整設定。
它們會改變MyBatis的執行時行為,所以我們需要清楚的知道這些屬性的作用及預設值。
這裡有一個完整預設的settings設定如下:

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" 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="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

typeAliases
ypeAliases 型別命名

類型別名是為Java 型別設定的一個短的名字。它只和XML配置有關,存在的意義僅在於用來減少類完全限定名的冗餘。

<typeAliases>
<typeAlias alias="user" type="cn.mybatis.domain.User"/>
</typeAliases>

當這樣配置時,user可以用在任何使用cn.mybatis.domain.User的地方。

也可以指定一個包名,MyBatis會在包名下面搜尋需要的JavaBean

<typeAliases>
<package name="cn.mybatis.domain"/>
</typeAliases>

每一個在包cn.mybatis.domain中的Java Bean,在沒有註解的情況下,會使用Bean的首字母
小寫的非限定類名來作為它的別名。
比如cn.mybatis.domain.User的別名為user; 若有註解,則別名為其註解值。

@Alias ("user")
public class User {
...
}

typeHandler
無論是 MyBatis 在預處理語句(PreparedStatement)中設定一個引數時,
還是從結果集中取出一個值時, 都會用型別處理器將獲取的值以合適的方式轉換成 Java 型別。
下表描述了一些預設的型別處理器。
型別處理器 Java 型別 JDBC 型別
BooleanTypeHandler java.lang.Boolean, boolean 資料庫相容的 BOOLEAN
ByteTypeHandler java.lang.Byte, byte 資料庫相容的 NUMERIC 或 BYTE
ShortTypeHandler java.lang.Short, short 資料庫相容的 NUMERIC 或 SHORT INTEGER
IntegerTypeHandler java.lang.Integer, int 資料庫相容的 NUMERIC 或 INTEGER
LongTypeHandler java.lang.Long, long 資料庫相容的 NUMERIC 或 LONG INTEGER
FloatTypeHandler java.lang.Float, float 資料庫相容的 NUMERIC 或 FLOAT
DoubleTypeHandler java.lang.Double, double 資料庫相容的 NUMERIC 或 DOUBLE
BigDecimalTypeHandler java.math.BigDecimal 資料庫相容的 NUMERIC 或 DECIMAL
StringTypeHandler java.lang.String CHAR, VARCHAR
ClobTypeHandler java.lang.String CLOB, LONGVARCHAR
NStringTypeHandler java.lang.String NVARCHAR, NCHAR
NClobTypeHandler java.lang.String NCLOB
ByteArrayTypeHandler byte[] 資料庫相容的位元組流型別
BlobTypeHandler byte[] BLOB, LONGVARBINARY
DateTypeHandler java.util.Date TIMESTAMP
DateOnlyTypeHandler java.util.Date DATE
TimeOnlyTypeHandler java.util.Date TIME
SqlTimestampTypeHandler java.sql.Timestamp TIMESTAMP
SqlDateTypeHandler java.sql.Date DATE
SqlTimeTypeHandler java.sql.Time TIME
ObjectTypeHandler Any OTHER 或未指定型別
EnumTypeHandler Enumeration Type VARCHAR-任何相容的字串型別,儲存列舉的名稱(而不是索引)
EnumOrdinalTypeHandler Enumeration Type 任何相容的 NUMERIC 或 DOUBLE 型別,儲存列舉的索引(而不是名稱)。
關於自定義Handler後續再整理 。。。。
一般使用系統預設的就足夠了。

objectFactory物件工廠
這個一般不設定後續再講

environments配置環境
這個一般不設定 後續再講

mapper對映器 最重要的 自己需要配置的
MyBatis需要開發者自己寫SQL語句,mapper對映器正是告訴MyBatis到哪裡去找對映檔案,
進而找到這些SQL 語句。
實際開發中可以使用相對於類路徑的資源引用或完全限定資源定位符(包括file://的URL),以及類名和包名等。例如:
有四種方式
1.類路徑 推薦使用

<!-- 使用類路徑查詢資原始檔-->
<mappers>
<mapper resource="cn/mybatis/mapper/UserMapper.xml" />
</mappers>

2.本地檔案

<!--使用本地檔案-->
<mappers>
<mapper ur1="file:///C:/mapper/UserMapper.xm1"/>
< / mappers >

3.使用介面 不常用

<!-- 使用介面類-->
<mappers>
<mapper class="cn.mybatis.mapper. UserMapper" />
</mappers>

4.可以考慮使用 在檔案比較多的情況下建議這樣做

<1-- 使用包名-->
<mappers>
<package name="cn.mybatis.mapper"/>
</mappers>

mapper對映器會告訴MyBatis去哪裡找對映檔案,剩下的細節就是每個SQL對映檔案了,也就是接下來我們要重點討論的。

第2種非xml配置

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

注意該例中,configuration 添加了一個對映器類(mapper class)。對映器類是 Java 類,它們包含 SQL 對映語句的註解從而避免了 XML 檔案的依賴。不過,由於 Java 註解的一些限制加之某些 MyBatis 對映的複雜性,XML 對映對於大多數高階對映(比如:巢狀 Join 對映)來說仍然是必須的。有鑑於此,如果存在一個對等的 XML 配置檔案的話,MyBatis 會自動查詢並載入它(這種情況下, BlogMapper.xml 將會基於類路徑和 BlogMapper.class 的類名被載入進來)。具體細節稍後討論。
還有其他屬性日後再更新