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>