1. <properties>
元素java
<properties>
是一個配置屬性的元素,該元素一般用來將內部的配置外在化,即經過外部的配置來動態的替換內部定義的屬性。mysql
例如:數據庫的鏈接屬性,就能夠經過專門配置db.properties而後替換掉裏面的配置信息。sql
編寫db.properties數據庫
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://1localhost:3306;DatabaseName=mybatis
jdbc.username=root
jdbc.password=123456
配置<properties>
屬性緩存
<properties resource="db.properties"></properties>
這個時候只須要在引用db.properties中的數據庫相關信息就能夠了服務器
<dataSource type="POOLED">
<!-- 數據庫驅動 -->
<property name="driver" value="${jdbc.driver}" />
<!-- 鏈接數據庫的url -->
<property name="url" value="${jdbc.url}" />
<!-- 鏈接數據庫的用戶名 -->
<property name="username" value="${jdbc.username}" />
<!-- 鏈接數據庫的密碼 -->
<property name="password" value="${jdbc.password}" />
</dataSource>
2.<settings>
元素mybatis
<settings>
元素主要用於改變MyBatis運行時的行爲,例如開啓二級緩存、開啓延遲加載等。<settings>元素中常見的配置及其描述以下表所示。併發
設置參數 | 描述 | 有效值 | 默認值 |
cacheEnabled | 該配置影響全部映射器中配置的緩存全局開關 | ture|false | false |
lazyLoadingEnabled | 延遲加載的全局開關。開啓時全部關聯對象都會延遲加載。特定關聯關係中能夠經過設置fetchType屬性來覆蓋該項的開關狀態 | ture|false | false |
agressiveLazyLoading | 關聯對象屬性的延遲加載開關。當啓用時,對任意延遲屬性的調用會使帶有延遲加載屬性的對象徹底加載;反之,每種屬性都會按需加載 | ture|false | true |
multipleResultSetsEnabled | 是否容許單一語句返回多結果集(須要驅動兼容) | ture|false | true |
useColumnLabel | 使用列標籤代替列名。不一樣的驅動在這方面有不一樣的表現。具體可參考驅動文檔或經過測試兩種模式來觀察所用驅動的行爲。 | ture|false | true |
useGeneratedKeys | 容許JDBC支持自動生成主鍵,須要驅動兼容。若是設置爲true,則這個設置強制使用自動生成主鍵,儘管一些驅動不兼容但仍可正常工做。 | ture|false | false |
autoMappingBehavior | 指定mybatis應如何自動映射列到字段或屬性。NONE表示取消自動映射;PARTIAL只會自動映射沒有定義嵌套結果集映射的結果集;FULL會自動映射任意複雜的結果集(不管是否嵌套) | NONE、PARTIAL、FULL | PARTIAL |
defaultExecutorType | 配置默認的執行器。SIMPLE就是普通的執行器;REUSE執行器會重用預處理語句(prepared statements);BATCH執行器將重用語句並執行批量更新。 | SIMPLE、REUSE、BATCH | SIMPLE |
defaultStatementTimeOut | 設置超時時間。它決定驅動等待數據庫響應的秒數。當沒有設置的時候,它取的就是驅動默認的時間。 | 任何正整數 | 沒有設置 |
mapUnderscoreToCamelCase | 是否開啓自動駝峯命名規則(camel case)映射 | true|false | false |
jdbcTypeForNull | 當沒有爲參數提供特定的JDBC類型時,爲空值指定JDBC類型。某些驅動須要指定列的JDBC類型,多數狀況直接使用通常類型便可。如NULL、Varchar、other等。 | NULL、Varchar、other | other |
配置舉例以下:app
<settings>框架
<setting name="cacheEnabled" value="true"/>
<setting name="LazyLoadingEnabled" value="true"/>
<settings>
3.<typeAliases>
元素
<typeAliases>
元素用於爲配置文件中的Java類型設置別名。別名設置好了事後能夠在mapper.xml文件中直接使用別名便可。其使用的意義在於減小全限定類名的冗餘。
使用<typeAliases>
元素配置別名的方法以下:
<typeAliases>
<typeAlias alias="user" type="com.itheima.po.User"/>
<!--若是省略alias屬性,mybatis會默認將類名首字母小寫後的名稱做爲別名-->
</typeAliases>
當POJO類過多時,能夠經過自動掃描包的形式自定義別名,具體以下:
<typeAliases>
<package name="com.itheima.po"/>
<!--mybatis會將全部com.itheima.po包中的POJO類以首字母小寫的非限定類名來做爲它的別名-->
</typeAliases>
建議使用掃描包的形式設置別名。
注意:上面設置別名的方式只適用於沒有使用註解的狀況,若是在程序中使用了註解,則其別名爲註解的值。例如:
@Alias(value="user")
public class User{
//屬性和方法。。。。
}
除了使用<typeAliases>元素自定義別名外,mybatis框架還默認爲許多常見的java類型(如數值、字符串、日期等)提供了相應的別名,以下表所示。
別名 | 映射的類型 |
_byte | btye |
_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 |
以上表格中列舉的別名能夠直接在mybatis中使用,可是因爲不區分大小寫,在使用的時候須要注意重複定義的問題。
4.<typeHandlers>
元素
mybatis在預處理語句(prepareStatement)中設置一個參數或者從結果集(ResultSet)中取出一個值時,都會用到其框架內部註冊了的typehandler(類型處理器)進行相關的處理。typeHandler的做用就是將預處理語句中傳入的參數從javaType(Java類型)轉換爲jdbcType(JDBC類型),或者從數據庫取出結果時將jdbcType轉換爲javaType。也就是將數據庫類型與java類型映射關聯起來。
爲了方便轉換,mybatis提供了默認一些默認的類型處理器,以下表所示。
類型處理器 | 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 |
ByteArrayTypeHandler | byte[] | 數據庫兼容的字節流類型 |
BlobTypeHandler | byte[] | blob、longvarbinary |
DateTypeHandler | java.util.Date | timestamp |
SqlTimestampTypeHandler | java.sql.timestamp | timestamp |
SqlDateTypeHandler | java.sql.Date | date |
SqlTimeTypeHandler | java.sql.time | time |
若是以上類型處理器沒法知足需求時能夠經過自定義類型處理器。<typeHandler>
元素能夠在配置文件中註冊自定義的類型處理器,它的使用方式有兩種。
1.註冊一個類的類型處理器
<typeHandlers>
<typeHandler handler="com.itheima.type.CustomtypeHandler" />
</typeHandlers>
2.註冊一個包中全部的類型處理器
<typeHandlers>
<package name="com.itheima.type" />
</typeHandlers>
5.<objectFactory>
元素
MyBatis中默認的ObjectFactory的做用是實例化目標類,它既能夠經過默認構造方法實例化,也能夠在參數映射存在的時候經過參數構造方法來實例化。一般使用默認的ObjectFactory便可。
大部分場景下都不用配置和修改默認的ObjectFactory ,若是想覆蓋ObjectFactory的默認行爲,能夠經過自定義ObjectFactory來實現,具體以下:
1.自定義一個對象工廠
public class MyObjectFactory extends DefaultObjectFactory {
private static final long serialVersionUID = -4114845625429965832L;
public <T> T create(Class<T> type) {
return super.create(type);
}
public <T> T create(Class<T> type, List<Class<?>> constructorArgTypes,
List<Object> constructorArgs) {
return super.create(type, constructorArgTypes, constructorArgs);
}
public void setProperties(Properties properties) {
super.setProperties(properties);
}
public <T> boolean isCollection(Class<T> type) {
return Collection.class.isAssignableFrom(type);
}
}
2.在配置文件中使用<objectFactory>
元素配置自定義的ObjectFactory
<objectFactory type="com.itheima.factory.MyObjectFactory">
<property name="name" value="MyObjectFactory"/>
</objectFactory>
在開發中這個元素沒有怎麼使用,通常瞭解就能夠了,知道有這個東西就行。
6.<plugins>
元素
MyBatis容許在已映射語句執行過程當中的某一點進行攔截調用,這種攔截調用是經過插件來實現的。元素的做用就是配置用戶所開發的插件。 若是用戶想要進行插件開發,必需要先了解其內部運行原理,由於在試圖修改或重寫已有方法的行爲時,極可能會破壞MyBatis原有的核心模塊。慎用。
7.<environments>
元素
<environments>
元素用於對環境進行配置。MyBatis的環境配置實際上就是數據源的配置,咱們能夠經過元素配置多種數據源,即配置多種數據庫。
<environments default="development">
<environment id="development">
<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>
<transactionManager>
元素用於配置事務管理,它的type屬性用於指定事務管理的方式,即便用哪一種事務管理器;<dataSource>
元素用於配置數據源,它的type屬性用於指定使用哪一種數據源。
在MyBatis中,能夠配置兩種類型的事務管理器,分別是JDBC和MANAGED。關於這兩個事務管理器的描述以下:
JDBC:此配置直接使用了JDBC的提交和回滾設置,它依賴於從數據源獲得的鏈接來管理事務的做用域。
MANAGED:此配置歷來不提交或回滾一個鏈接,而是讓容器來管理事務的整個生命週期。默認狀況下,它會關閉鏈接,但一些容器並不但願這樣,爲此能夠將closeConnection屬性設置爲false來阻止它默認的關閉行爲。
注意:若是項目中使用的是Spring+ MyBatis,則沒有必要在MyBatis中配置事務管理器,由於實際開發中,會使用Spring自帶的管理器來實現事務管理。
對於數據源的配置,MyBatis提供了UNPOOLED、POOLED、JNDI三種數據源類型。
UNPOOLED 配置此數據源類型後,在每次被請求時會打開和關閉鏈接。它對沒有性能要求的簡單應用程序是一個很好的選擇。在使用時,須要配置5種屬性。
Pooled
此數據源利用「池」的概念將JDBC鏈接對象組織起來,避免了在建立新的鏈接實例時所須要初始化和認證的時間。這種方式使得併發Web應用能夠快速的響應請求,是當前流行的處理方式。在使用時,能夠配置更多的屬性。
JNDI
能夠在EJB或應用服務器等容器中使用。容器能夠集中或在外部配置數據源,而後放置一個JNDI上下文的引用。在使用時,須要配置2個屬性。
9.<mappers>
元素
<mappers>
元素用於指定MyBatis映射文件的位置,通常可使用如下4種方法引入映射器文件
1.使用類路徑引入(經常使用)
<mappers>
<mapper resource="com/itheima/mapper/UserMapper.xml"/>
</mappers>
2.使用本地文件路徑引入
<mappers>
<mapper url="file:///D:/com/itheima/mapper/UserMapper.xml"/>
</mappers>
3.使用接口類引入
<mappers>
<mapper class="com.itheima.mapper.UserMapper"/>
</mappers>
4.使用包名引入(經常使用)
<mappers> <package name="com.itheima.mapper"/></mappers>