mybatis-config.xml

以前完成了一個mybatis的CRUD操做進行了最基本的體驗。html

回顧一下mybatis的步驟:java

1)核心配置文件配置git

2)pojo模型建立github

3)映射文件配置sql

4)獲取SqlSessionFactory數據庫

5)獲取SqlSessionapache

6)CRUD操做數組

7)事務操做緩存

8)關閉SqlSessionsession

 

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的一些基本配置。

尚未總結完,好比environments和其餘的配置,下一篇文章專門說明environments和剩下的配置

相關文章
相關標籤/搜索