MyBatis 的核心配置文件是干什么的? 它的结构是怎样的? 哪些是必须配置的,哪些是可选的?
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>
