MyBatis 的核心配置文件(通常命名為 mybatis-config.xml
)是 MyBatis 應用程序的入口點,它定義了 MyBatis 的全局配置信息 。
核心配置文件的作用:
- 配置 MyBatis 的運行時行為: 通過
<settings>
標簽設置全局參數,控制 MyBatis 的各種行為,例如是否開啟緩存、是否使用延遲加載、是否自動映射等。 - 配置數據源和事務管理器: 通過
<environments>
標簽配置數據庫連接信息和事務管理方式。 - 注冊類型別名: 通過
<typeAliases>
標簽為 Java 類型定義別名,簡化 XML 映射文件中的類型引用。 - 注冊類型處理器: 通過
<typeHandlers>
標簽注冊自定義的類型處理器,處理 Java 類型與 JDBC 類型之間的轉換。 - 注冊對象工廠: 通過
<objectFactory>
標簽注冊自定義的對象工廠,用于創建結果對象。 - 注冊插件: 通過
<plugins>
標簽注冊插件,攔截 MyBatis 的核心執行流程。 - 加載映射器: 通過
<mappers>
標簽加載 SQL 映射文件或 Mapper 接口,將 SQL 語句與 Java 代碼關聯起來。
核心配置文件的結構 (mybatis-config.xml):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 屬性配置 (可選) --><properties resource="db.properties"/><!-- 全局設置 (可選) --><settings><setting name="cacheEnabled" value="true"/><setting name="lazyLoadingEnabled" value="false"/><!-- 其他設置 --></settings><!-- 類型別名 (可選) --><typeAliases><typeAlias alias="User" type="com.example.model.User"/><!-- 或者使用包掃描 --><!-- <package name="com.example.model"/> --></typeAliases><!-- 類型處理器 (可選) --><typeHandlers><typeHandler handler="com.example.MyTypeHandler"/><!-- 或者使用包掃描 --><!-- <package name="com.example.typehandler"/> --></typeHandlers><!-- 對象工廠(可選) --><objectFactory type="com.example.MyObjectFactory"/><!-- 插件 (可選) --><plugins><plugin interceptor="com.example.MyPlugin"/></plugins><!-- 環境配置 (必須) --><environments default="development"><environment id="development"><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><!-- 數據庫廠商標識(可選)--><databaseIdProvider type="DB_VENDOR"><property name="SQL Server" value="sqlserver"/><property name="MySQL" value="mysql"/><property name="Oracle" value="oracle" /></databaseIdProvider><!-- 映射器 (必須) --><mappers><mapper resource="com/example/mapper/UserMapper.xml"/><!-- 或者使用類路徑 --><!-- <mapper class="com.example.mapper.UserMapper"/> --><!-- 或者使用包掃描 --><!-- <package name="com.example.mapper"/> --></mappers></configuration>
各部分配置詳解:
<configuration>
: 根元素,所有配置都包含在這個元素中。<properties>
(可選):- 用于加載外部屬性文件(例如
db.properties
),可以在配置文件中引用屬性文件中的值。 resource
屬性指定屬性文件的路徑。- 也可以直接在
<properties>
標簽內部定義屬性。
- 用于加載外部屬性文件(例如
<settings>
(可選):- 用于配置 MyBatis 的全局設置,控制 MyBatis 的運行時行為。
- 常用的設置包括:
cacheEnabled
: 是否開啟二級緩存 (默認true
)。lazyLoadingEnabled
: 是否開啟延遲加載 (默認false
)。aggressiveLazyLoading
: 是否開啟積極的延遲加載 (默認false
,MyBatis 3.4.1 及之前版本默認為true
)。multipleResultSetsEnabled
: 是否允許單個語句返回多個結果集 (默認true
)。useColumnLabel
: 是否使用列標簽代替列名 (默認true
)。useGeneratedKeys
: 是否允許 JDBC 支持自動生成主鍵 (默認false
)。autoMappingBehavior
: 自動映射的行為 (默認PARTIAL
,可選值:NONE
、PARTIAL
、FULL
)。defaultExecutorType
: 默認的執行器類型 (默認SIMPLE
,可選值:SIMPLE
、REUSE
、BATCH
)。mapUnderscoreToCamelCase
: 是否開啟駝峰命名自動映射 (默認false
)。localCacheScope
: 一級緩存的作用域(默認SESSION
,可選值SESSION
或STATEMENT
)jdbcTypeForNull
: 當傳入的參數為null
時,使用的 JDBC 類型(默認OTHER
,通常設置為NULL
)。defaultStatementTimeout
: 默認的語句超時時間(秒)。
<typeAliases>
(可選):- 用于為 Java 類型定義別名,簡化 XML 映射文件中的類型引用。
typeAlias
標簽定義單個別名,package
標簽掃描指定包下的所有類,并自動生成別名(類名首字母小寫)。
<typeHandlers>
(可選):- 用于注冊自定義的類型處理器。
typeHandler
標簽注冊單個類型處理器,package
標簽掃描指定包下的所有類型處理器。
<objectFactory>
(可選):- 注冊一個自定義對象工廠,MyBatis 每次創建結果對象的新實例時,它都會使用一個對象工廠(ObjectFactory)實例來完成。
<plugins>
(可選):- 用于注冊插件,攔截 MyBatis 的核心執行流程(例如,攔截 SQL 執行、參數設置、結果映射等)。
plugin
標簽注冊單個插件,interceptor
屬性指定插件類的全限定名。
<environments>
(必須):- 用于配置數據源和事務管理器。
default
屬性指定默認的環境 ID。<environment>
標簽定義一個環境,id
屬性是環境的唯一標識符。<transactionManager>
標簽配置事務管理器:type="JDBC"
: 使用 JDBC 的事務管理機制(需要手動提交或回滾事務)。type="MANAGED"
: 將事務管理委托給容器(例如 Spring 或 Java EE 容器)。
<dataSource>
標簽配置數據源:type="POOLED"
: 使用 MyBatis 內置的連接池。type="UNPOOLED"
: 不使用連接池,每次都創建新的連接。type="JNDI"
: 使用 JNDI 數據源。<property>
標簽配置數據源的屬性,例如驅動類名、URL、用戶名、密碼等。
<databaseIdProvider>
(可選):- MyBatis 可以根據不同的數據庫廠商執行不同的 SQL 語句
<mappers>
(必須):- 用于加載 SQL 映射文件或 Mapper 接口。
<mapper resource="..."/>
: 加載 XML 映射文件。<mapper class="..."/>
: 加載 Mapper 接口(使用注解配置 SQL)。<package name="..."/>
: 掃描指定包下的所有 Mapper 接口或 XML 映射文件(XML 文件需要與 Mapper 接口在同一個包下,且文件名與接口名相同)。
必須配置的元素:
<environments>
: 必須配置至少一個數據源環境,否則 MyBatis 無法連接數據庫。<mappers>
: 必須加載至少一個 SQL 映射文件或 Mapper 接口,否則 MyBatis 無法執行 SQL 語句。
可選配置的元素:
<properties>
<settings>
<typeAliases>
<typeHandlers>
<objectFactory>
<plugins>
<databaseIdProvider>