1. 程式人生 > >mybatis配置文件

mybatis配置文件

hash 實例 也會 user 方式 tro 保存 有一個 fyi

文檔頂層結構:

configuration 配置

properties 屬性

settings 設置

typeAliases 類型命名

typeHandlers 類型處理器

objectFactory 對象工廠

plugins 插件

environments 環境

environment 環境變量

transactionManager 事務管理器

dataSource 數據源

databaseIdProvider 數據庫廠商標識

transactionManager 事務管理器

mappers 映射器

註意:這些元素在mybatis的xml配置文件中,順序是不可以顛倒的,否則無法構建SqlSessionFactoryBuilder實例,

也就無法構建SqlSessionFactory工廠實例,更無法構建SqlSession操作數據庫命令SQL對象實例。

回顧一下mybatis的步驟:

1)核心配置文件配置

2)pojo模型創建

3)映射文件配置

4)獲取SqlSessionFactory

5)獲取SqlSession

6)CRUD操作

7)事務操作

8)關閉SqlSession

mybatis的基本操作在這裏:

mybatis初體驗(一)

這篇文章總結一下核心配置文件mybatis-config.xml的配置方法。

初體驗中的mybatis-config.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>  
    <!-- 對事務的管理和連接池的配置 -->  
    <environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="oracle.jdbc.driver.OracleDriver" />  
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />  
                <property name="username" value="ibatis" />  
                <property name="password" value="ibatis" />  
            </dataSource>  
        </environment>  
    </environments>  
      
    <!-- mapping 文件路徑配置 -->  
    <mappers>  
        <mapper resource="com/yu/res/UserMapper.xml" />  
    </mappers>  
</configuration>

Properties

由上面的配置可以看出,我們的數據庫信息是直接寫到了配置裏

而一般情況下,對於這種配置信息,一般我們都會把它放到properties資源文件中。

1.創建一個資源文件jdbc.properties:

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=mybatis  
jdbc.password=mybatis

2.mybatis-config.xml中引入

<properties resource="jdbc.properties" />

當然也可以在<properties/>標簽中定義屬性:

<properties resource="jdbc.properties">
	<property name="jdbc.driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
</properties>

3.使用properties文件裏的屬性

<dataSource type="POOLED">  
      <property name="driver" value="${jdbc.driverClassName}" />  
      <property name="url" value="${jdbc.url}" />  
      <property name="username" value="${jdbc.username}" />  
      <property name="password" value="${jdbc.password}" />   
</dataSource>

說下這些配置的加載順序:

.在 properties 元素體內指定的屬性首先被讀取。
.從類路徑下資源或 properties 元素的 url 屬性中加載的屬性第二被讀取,它會 覆蓋已經存在的完全一樣的屬性。
.作為方法參數傳遞的屬性最後被讀取, 它也會覆蓋任一已經存在的完全一樣的 屬性,這些屬性可能是從 properties 元素體內和資源/url 屬性中加載的。

引用自:http://mybatis.github.io/mybatis-3/zh/configuration.html

所以,屬性的優先級為:方法直接傳遞參數 > 通過resource、url引用的資源 > properties元素體內定義

Settings

setting設置,關系到mybatis的主要設置,關系到mybatis運行時的行為方式。

配置方式:

<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="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>

配置項說明:(從 http://mybatis.github.io/mybatis-3/zh/configuration.html copy過來的 )

設置參數描述有效值默認值
cacheEnabled 這個配置使全局的映射器啟用或禁用 緩存。 true | false true
lazyLoadingEnabled 全局啟用或禁用延遲加載。當禁用時, 所有關聯對象都會即時加載。 This value can be superseded for an specific relation by using the fetchType attribute on it. true | false false
aggressiveLazyLoading 當啟用時, 有延遲加載屬性的對象在被 調用時將會完全加載任意屬性。否則, 每種屬性將會按需要加載。 true | false true
multipleResultSetsEnabled 允許或不允許多種結果集從一個單獨 的語句中返回(需要適合的驅動) true | false true
useColumnLabel 使用列標簽代替列名。 不同的驅動在這 方便表現不同。 參考驅動文檔或充分測 試兩種方法來決定所使用的驅動。 true | false true
useGeneratedKeys 允許 JDBC 支持生成的鍵。 需要適合的 驅動。 如果設置為 true 則這個設置強制 生成的鍵被使用, 盡管一些驅動拒絕兼 容但仍然有效(比如 Derby) true | false False
autoMappingBehavior 指定 MyBatis 如何自動映射列到字段/ 屬性。PARTIAL 只會自動映射簡單, 沒有嵌套的結果。FULL 會自動映射任 意復雜的結果(嵌套的或其他情況) 。 NONE, PARTIAL, FULL PARTIAL
defaultExecutorType 配置默認的執行器。SIMPLE 執行器沒 有什麽特別之處。REUSE 執行器重用 預處理語句。BATCH 執行器重用語句 和批量更新 SIMPLE REUSE BATCH SIMPLE
defaultStatementTimeout 設置超時時間, 它決定驅動等待一個數 據庫響應的時間。 Any positive integer Not Set (null)
safeRowBoundsEnabled Allows using RowBounds on nested statements. true | false False
mapUnderscoreToCamelCase Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn. true | false False
localCacheScope MyBatis uses local cache to prevent circular references and speed up repeated nested queries. By default (SESSION) all queries executed during a session are cached. If localCacheScope=STATEMENT local session will be used just for statement execution, no data will be shared between two different calls to the same SqlSession. SESSION | STATEMENT SESSION
jdbcTypeForNull Specifies the JDBC type for null values when no specific JDBC type was provided for the parameter. Some drivers require specifying the column JDBC type but others work with generic values like NULL, VARCHAR or OTHER. JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER OTHER
lazyLoadTriggerMethods Specifies which Object‘s methods trigger a lazy load A method name list separated by commas equals,clone,hashCode,toString
defaultScriptingLanguage Specifies the language used by default for dynamic SQL generation. A type alias or fully qualified class name. org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver
callSettersOnNulls 當結果集中含有Null值時是否執行映射對象的setter或者Map對象的put方法。此設置對於原始類型如int,boolean等無效。 true | false false
logPrefix Specifies the prefix string that MyBatis will add to the logger names. Any String Not set
logImpl Specifies which logging implementation MyBatis should use. If this setting is not present logging implementation will be autodiscovered. SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING Not set
proxyFactory Specifies the proxy tool that MyBatis will use for creating lazy loading capable objects. CGLIB | JAVASSIST CGLIB

typeAliases

類型別名。

給java類型取一個別名,方便在核心配置、映射配置中來使用這個java類型。

在 mybatis初體驗(一) 中的UserMapper.xml配置中,有這樣的配置信息:

<select id="findUserById" resultType="com.yu.model.User" parameterType="long">  
        select * from t_user where id = #{id}
</select>

可以看到resultType屬性的值為com.yu.model.User,表示這個查詢返回的類型為com.yu.model.User類型。

如果有很多種類型的話,每次都得把類型的全路徑寫上,感覺就很費事。

所以就可以用mybatis提供的typeAliases來進行別名配置。

在核心配置文件中加上配置:

<typeAliases>  
      <typeAlias type="com.yu.model.User" alias="User" />
      <typeAlias type="com.yu.model.Org" alias="Org"/>
</typeAliases>

然後修改UserMapper.xml的配置:

<select id="findUserById" resultType="User" parameterType="long">  
        select * from t_user where id = #{id}
</select>

這樣就簡便多了。

當然,這是對於我們自定義的類型,或者其他類型,用這種設置別名的方式。

其實mybatis給我們提供了很多內建的類型別名,使我們不用在typeAliases中指定,就可以直接使用,下面是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
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

typeHandlers

類型處理器。

用途:

1)獲取數據庫的值,以合適的方式轉變為對應的java類型

2)將java類型,以合適的方式轉化為數據庫的保存類型

mybatis中默認的類型處理器:

類型處理器Java 類型JDBC 類型
BooleanTypeHandler java.lang.Boolean, boolean 任何兼容的布爾值
ByteTypeHandler java.lang.Byte, byte 任何兼容的數字或字節類型
ShortTypeHandler java.lang.Short, short 任何兼容的數字或短整型
IntegerTypeHandler java.lang.Integer, int 任何兼容的數字和整型
LongTypeHandler java.lang.Long, long 任何兼容的數字或長整型
FloatTypeHandler java.lang.Float, float 任何兼容的數字或單精度浮點型
DoubleTypeHandler java.lang.Double, double 任何兼容的數字或雙精度浮點型
BigDecimalTypeHandler java.math.BigDecimal 任何兼容的數字或十進制小數類型
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 其他或未指定類型
EnumTypeHandler Enumeration Type VARCHAR-任何兼容的字符串類型, 作為代碼存儲(而不是索引)
EnumOrdinalTypeHandler Enumeration Type Any compatible NUMERIC or DOUBLE, as the position is stored (not the code itself).

當然也可以自定義類型處理器,

比如有一個字段的值是一個逗號隔開的字符串,如果希望查詢結果映射到java類型時是一個數組,而保存到數據庫時又會是以逗號隔開的字符串。

這種情況需要自定義類型處理器來處理。

關於自定義類型處理器,會單獨做一個總結。

mappers

在 mybatis初體驗(一) 中的UserMapper.xml配置中,有這樣的配置信息:

 <!-- mapping 文件路徑配置 -->  
 <mappers>  
     <mapper resource="com/yu/res/UserMapper.xml" />  
 </mappers>

用於引用定義好的映射定義,告訴mybatis去哪裏找我們的sql定義配置。有以下幾種用法:

直接引用xml文件

<mappers>  
     <mapper resource="com/yu/res/UserMapper.xml" />  
</mappers>

通過絕對路徑引用,註意在絕對路徑前加上:“file:///”

<mappers>  
     <mapper url="file:///D:/workspace/mywork/MyBatis/src/com/yu/res/UserMapper.xml"/> 
</mappers>

引用mapper接口對象的方式:

<mappers>  
     <mapper resource="com.yu.mapper.UserMapper" />  
</mappers>

引用mapper接口包的方式:

<mappers>  
     <package name="com.yu.mapper"/>
</mappers>

這篇文章介紹了mybatis核心配置文件mybatis-config.xml的一些基本配置。

mybatis配置文件