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 configuration
PUBLIC "-//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>