mybatis核心配置信息必須嚴格按照格式標準進行配置
配置名稱 | 配置含義 | 配置簡介 |
---|---|---|
configuration | 包裹所有配置文件 | 整個配置文件的頂級標籤 |
properties | 屬性 | 該標籤可以引入外部配置的屬性,也可以自己配置。該配置標籤所在的同一個配置文件均可引用此配置中的屬性 |
setting | 全局配置參數 | 用來配置一些改變運行時行爲的信息,例如是否使用緩存機制,是否使用延遲加載,是否使用錯誤機制等。並且可以設置最大併發請求數量、最大併發事務數量,以及是否啓動命名空間等 |
typeAliases | 類型別名 | 用來設置一些別名來代替Java的長類型聲明(如java.lang.int變成int),減少配置編碼的冗餘 |
typeHandlers | 類型處理器 | 將SQL中返回的數據庫類型轉換成相應Java類型的處理器配置 |
objectFactory | 對象工廠 | 實例化目標類的工廠類配置 |
plugins | 插件 | 可以通過插件修改Mybatis的核心行爲,例如對語句執行的某一點進行攔截調用 |
environments | 環境集合屬性變量 | 數據庫環境信息的集合。在一個配置文件中,可以有多種數據庫環境集合,這樣可以使Mybatis將SQL同時映射至多個數據庫 |
environment | 環境子屬性對象 | 數據庫環境配置的詳細配置 |
transactionManager | 事務管理 | 指定Mybatis的事務管理器 |
dataSource | 數據源 | 使用其中的type指定數據源的連接類型,在標籤對中可以使用property屬性指定數據庫連接池的其他信息 |
mappers | 映射器 | 配置SQL映射文件的位置,告知MyBatis去哪裏加載SQL映射配置 |
<?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>
<!-- 1.properties屬性引入外部配置文件 -->
<properties resource="com/mybatis/example/config.properties">
<!-- property裏面的屬性全局均可使用 -->
<property name="username" value="root"/>
<property name="pasword" value="123"/>
</properties>
<!--2. 全局配置參數 -->
<settings>
<!-- 設置是否啓動緩存 -->
<setting name="cacheEnabled" value="true"/>
<!-- 設置是否啓用懶加載 -->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<!-- 3.別名設置 -->
<typeAliases>
<typeAlias type="com.mybatis.domain.User" alias="user"/>
<typeAlias type="com.mybatis.domain.Customer" alias="customer"/>
</typeAliases>
<!-- 4.類型轉換器 -->
<typeHandlers>
<!-- 一個簡單類型轉換器 -->
<typeHandler handler="com.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>
<!-- 5.對象工廠 -->
<objectFactory type="com.mybatis.example.ExampleObjectFactory">
<!-- 對象工廠注入的參數 -->
<property name="someProperty" value="100"/>
</objectFactory>
<!-- 6.插件 -->
<plugins>
<plugin interceptor="com.mybatis.example.ExamplePlugin">
<property name="someProperty" value="100"/>
</plugin>
</plugins>
<!-- 7.environments數據庫環境配置 -->
<!-- 和Spring整合後environments配置將配廢除 -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC事務管理 -->
<transactionManager type="JDBC" />
<!-- 數據庫連接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 8.加載映射文件 -->
<mappers>
<mapper resource="com/mybatis/mapper/UserMapper.xml" />
<mapper resource="com/mybatis/mapper/CustomerMapper.xml" />
</mappers>
</configuration>
各個配置參數的詳解:
properties參數用來引入一個外部屬性文件:
引入一個config.properties文件
<!-- 1.properties屬性引入外部配置文件 -->
<properties resource="com/mybatis/example/config.properties">
<!-- property裏面的屬性全局均可使用 -->
<property name="username" value="root"/>
<property name="pasword" value="123"/>
</properties>
config.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///ssm
username=root
password=123
properties標籤引入它避免了數據庫信息的“硬編碼”,當需要連接其他數據庫的時候,只需要連接其他數據庫時,只需要更改數據庫的配置文件即可。
當propertieszhong you property子標籤時,並且子標籤配置了引的屬性文件的屬性值,這時取的就是property子標籤中的value值。
在properties變遷中引入的配置文件信息以及property子標籤中的配置的信息,在其他標籤中可以使用"{}"中填寫引入的配置文件中參數的name或者property子標籤的name。
例如:
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
setting配置影響Mybatis框架在運行時的一些行爲,在這就不詳細介紹了,只需大致瞭解setting中包含了哪些設置,然後在需要用的時候,查看setting的文檔即可。
setting配置常用來實現緩存、延遲加載和分頁設置。
Setting配置的樣例:
https://blog.csdn.net/qq_37745636/article/details/98953127
typeAliases配置
在MyBatis的SQL映射配置文件中,常使用parameterType、resultType之類的參數設置SQL語句的輸入/輸出參數,一般參數都是一個java類型的數據,有基本數據類型或引用數據類型,單數一般都要聲明該類型的全路徑名稱,例如“java.lang.String”、“com.mybatis.domain.User”。
而通過在typeAliases配置中聲明該類的全路徑名稱,然後給它一個別名,在SQL映射配置文件中指定輸入/輸出參數類型時使用別名。
<typeAliases>
<typeAlias type="com.mybatis.domain.User" alias="user"/>
<typeAlias type="com.mybatis.domain.Customer" alias="customer"/>
</typeAliases>
MyBatis還提供了批量定義別名的方法,指定包名即可,程序會爲該包下的所有包裝類加上別名。定義別名的規範就是對應包裝類的類名首字母變成小寫。
<typeAliases>
<package name="com.mybatis.domain" />
</typeAliases>
還可以通過註解的方式來實現
@Alias("user")
public class User {
}
Mybatis已經爲Java的常見類型默認指定了別名,可以直接使用。
別名 | 映射的類型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | java.lang.String |
byte | java.lang.Byte |
long | java.lang.Long |
short | java.lang.Short |
int | java.lang.Integer |
integer | java.lang.Integer |
double | java.lang.Double |
boolean | java.lang.Boolean |
date | java.util.Date |
decimal | java.math.BigDecimal |
bigdecimal | java.math.BigDecimal |
object | java.lang.Object |
map | java.util.Map |
hashmap | java.util.HashMap |
list | java.util.List |
arraylist | java.util.ArrayList |
collection | java.util.Collection |
iterator | java.util.Iterator |
可以從上面發現規律: 基本數據類型的別名是“_”加上基本數據類型的名稱,引用數據類型的別名是數據類型的名稱首字母小寫。
建議:在實體類中定義屬性時儘量使用引用數據類型。
在返回值是個List集合的時候,ResultType中還是寫返回的list集合中對象的別名。
environments配置環境
<!-- 7.environments數據庫環境配置 -->
<!-- 和Spring整合後environments配置將配廢除 -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC事務管理 -->
<transactionManager type="JDBC" />
<!-- 數據庫連接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
environments中的default屬性配置默認的環境,而environment中的id則是這個環境的id。
數據管理器(transactionManager)有兩種類型:分別是JDBC和MANAGED。配置爲JDBC,相當於直接使用JDBC的提交和回滾設置。配置爲MANAGED,則不提交和回滾連接,而是有容器來管理事務的生命週期。
關於數據源(dataSource),在mybatis中有三種內建的數據源類型:分別是“UNPOOLED”、“POOLED”,與“JNDI”。其中UNPLOOED設置每次請求時打開和關閉連接,而POOLED可以設置一個管理數據庫連接的資源池,用來合理控制數據庫的連接與關閉次數,利用“池”的概念將JDBC連接對象組織起來。而JNDI則配置連接外部數據源的信息。
mappers配置分析
mappers標籤下有多個mapper標籤,每一個mapper標籤中配置的都是一個獨立的Mapper映射配置文件的路徑。有以下幾種配置方式:
第一種,使用相對路徑進行配置:
<mappers>
<mapper resource="com/mybatis/mappers/UserMapper.xml" />
</mappers>
第二種,使用絕對路徑進行配置:
<mappers>
<mapper url="file:///var/mappers/UserMapper.xml" />
</mappers>
第三種,使用接口信息進行配置:
<mappers>
<mapper class="com.mybatis.mappers.UserMapper" />
</mappers>
第四種,使用接口所在包進行配置:
<mappers>
<mapper class="com.mybatis.mappers" />
</mappers>