以前完成了一個mybatis的CRUD操做進行了最基本的體驗。html
回顧一下mybatis的步驟:java
1)核心配置文件配置git
2)pojo模型建立github
3)映射文件配置sql
4)獲取SqlSessionFactory數據庫
5)獲取SqlSessionapache
6)CRUD操做數組
7)事務操做緩存
8)關閉SqlSessionsession
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資源文件中。
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元素體內定義
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 |
類型別名。
給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 |
類型處理器。
用途:
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類型時是一個數組,而保存到數據庫時又會是以逗號隔開的字符串。
這種狀況須要自定義類型處理器來處理。
關於自定義類型處理器,會單獨作一個總結。
在 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和剩下的配置