MyBatis 配置文件(通常命名为 mybatis-config.xml 或 mybatis-config.xml.vm ), MyBatis 配置文件是 MyBatis 的核心组成部分,它包含了 MyBatis 的全局配置信息,例如数据库连接信息、事务管理器、类型别名、类型处理器、插件等。 通过配置文件,我们可以灵活地配置 MyBatis 的属性,使其适应不同的应用场景和数据库环境。
一、 作用 (Purpose)
MyBatis 配置文件的主要作用是:
- 配置数据库连接信息: 指定数据库连接的驱动程序、URL、用户名、密码等信息。
- 配置事务管理器: 指定 MyBatis 使用的事务管理器类型(例如 JDBC 或 MANAGED)。
- 配置 MyBatis 的全局设置: 例如是否启用缓存、是否启用延迟加载、是否将数据库字段的下划线命名风格自动转换为 Java 驼峰命名风格等。
- 定义类型别名: 为常用的 Java 类型设置别名,简化 SQL 映射文件的配置。
- 注册类型处理器 (TypeHandlers): 注册自定义的类型处理器,用于处理特殊类型的转换。
- 配置对象工厂 (ObjectFactory): 配置自定义的对象工厂,用于创建对象实例。
- 注册插件 (Plugins): 配置 MyBatis 插件,例如分页插件、性能监控插件等。
- 注册 SQL 映射文件 (Mappers): 将 SQL 映射文件 (Mapper XML Files) 注册到 MyBatis 中,使 MyBatis 能够找到和使用这些文件定义的 SQL 语句。
二、 结构 (Structure)
MyBatis 配置文件的根元素是 <configuration>,它包含多个子元素,用于配置 MyBatis 的各个方面。 以下是一个典型的 MyBatis 配置文件结构:
<?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="database.properties">
<!-- 可以包含多个 <property> 元素,用于定义属性 -->
</properties>
<!-- 2. settings (设置) -->
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 更多设置 -->
</settings>
<!-- 3. typeAliases (类型别名) -->
<typeAliases>
<typeAlias alias="User" type="com.example.model.User"/>
<!-- 也可以使用 package 扫描 -->
<!-- <package name="com.example.model"/> -->
</typeAliases>
<!-- 4. typeHandlers (类型处理器) -->
<typeHandlers>
<typeHandler handler="com.example.handler.MyTypeHandler" javaType="java.util.Date" jdbcType="TIMESTAMP"/>
<!-- 也可以使用 package 扫描 -->
<!-- <package name="com.example.handler"/> -->
</typeHandlers>
<!-- 5. objectFactory (对象工厂) -->
<objectFactory type="com.example.factory.MyObjectFactory">
<!-- 可以配置 constructorArg 和 property 元素 -->
</objectFactory>
<!-- 6. plugins (插件) -->
<plugins>
<plugin interceptor="com.github.pagehelper.MybatisInterceptor">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
<!-- 7. environments (环境配置) -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${database.driver}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</dataSource>
</environment>
</environments>
<!-- 8. mappers (映射器) -->
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
<!-- 也可以使用 package 扫描 -->
<!-- <package name="com.example.mapper"/> -->
</mappers>
</configuration>
三、各个元素详解
-
<properties>(属性):-
作用: 用于定义和加载属性,可以在配置文件中使用
${}占位符引用这些属性。 -
属性来源:
- 直接在
<properties>元素内部定义。 - 通过
resource属性加载外部属性文件 (例如database.properties)。 - 通过
url属性加载远程属性文件。 - 可以在
<properties>元素中配置多个resource和url属性,MyBatis 会按照顺序加载这些文件。
- 直接在
-
属性覆盖: 如果多个属性文件中定义了相同的属性,后面的文件中的属性会覆盖前面的文件中的属性。
-
示例:
<properties resource="database.properties"> <!-- 也可以直接定义属性 --> <property name="jdbc.username" value="root"/> </properties>database.properties:
database.driver=com.mysql.cj.jdbc.Driver database.url=jdbc:mysql://localhost:3306/mybatis_db database.username= database.password=your_password
-
-
<settings>(设置):-
作用: 用于配置 MyBatis 的全局行为。
-
常用设置:
cacheEnabled:是否启用二级缓存 (默认true)。lazyLoadingEnabled:是否启用延迟加载 (默认false)。aggressiveLazyLoading:当启用延迟加载时,是否立即加载所有延迟加载属性 (默认true)。 设置为false可以提高性能。multipleResultSetsEnabled:是否允许单个语句返回多个结果集 (默认true)。useColumnLabel:是否使用列标签代替列名 (默认true)。useGeneratedKeys:是否允许 MyBatis 使用 JDBC 的getGeneratedKeys方法获取自增主键值 (默认false)。defaultExecutorType:指定执行器的类型 (SIMPLE, REUSE, BATCH)。defaultStatementTimeout:设置 Statement 的超时时间 (秒)。defaultFetchSize:设置每次从数据库获取的记录数量。mapUnderscoreToCamelCase:是否将数据库字段的下划线命名风格自动转换为 Java 驼峰命名风格 (默认false)。
-
示例:
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
-
-
<typeAliases>(类型别名):-
作用: 为常用的 Java 类型设置别名,简化 SQL 映射文件的配置。
-
两种配置方式:
<typeAlias>:单独定义类型别名。<package>:扫描指定包下的所有类,自动生成别名(类名首字母小写)。
-
示例:
<typeAliases> <typeAlias alias="User" type="com.example.model.User"/> <!-- 为 com.example.model.User 类设置别名为 User --> <package name="com.example.model"/> <!-- 扫描 com.example.model 包,自动生成别名 --> </typeAliases>配置之后, 可以在SQL映射文件中使用
User来代替com.example.model.User了.
-
-
<typeHandlers>(类型处理器):-
作用: 用于处理 Java 类型和 JDBC 类型之间的转换。
-
MyBatis 内置了一些常用的类型处理器,例如
IntegerTypeHandler,StringTypeHandler,DateTypeHandler等。 -
你也可以自定义类型处理器,来处理特殊类型的转换,例如将 JSON 字符串转换为 Java 对象。
-
配置方式:
-
<typeHandler>:单独注册类型处理器。 -
<package>:扫描指定包下的所有类型处理器。 -
也可以使用注解的方式注册 (在TypeHandler类上加
@MappedTypes和@MappedJdbcTypes)
-
-
示例:
<typeHandlers> <typeHandler handler="com.example.handler.JsonTypeHandler" javaType="com.example.model.MyObject" jdbcType="VARCHAR"/> <package name="com.example.handler"/> <!-- 扫描 com.example.handler 包,自动注册类型处理器 --> </typeHandlers>
-
-
<objectFactory>(对象工厂):-
作用: 用于创建对象实例。 MyBatis 默认使用
DefaultObjectFactory,你可以自定义ObjectFactory来改变对象的创建方式。 -
示例:
<objectFactory type="com.example.factory.MyObjectFactory"> <property name="someProperty" value="someValue"/> <!-- 可以配置对象工厂的属性 --> </objectFactory>
-
-
<plugins>(插件):-
作用: 用于配置 MyBatis 插件,扩展 MyBatis 的功能。
-
MyBatis 插件允许你拦截 MyBatis 的执行过程,例如:
- 执行器 (Executor)
- 语句处理器 (StatementHandler)
- 参数处理器 (ParameterHandler)
- 结果集处理器 (ResultSetHandler)
-
常用的插件:
- PageHelper:分页插件。
- MyBatis Generator:代码生成器。
-
示例:
<plugins> <plugin interceptor="com.github.pagehelper.MybatisInterceptor"> <property name="dialect" value="mysql"/> </plugin> </plugins>
-
-
<environments>(环境配置):-
作用: 用于配置数据库连接信息。
-
MyBatis 支持配置多个环境,例如开发环境、测试环境、生产环境。
-
使用
default属性指定默认使用的环境。 -
<environment>元素:id属性:指定环境的唯一标识。<transactionManager>元素:配置事务管理器。type属性:指定事务管理器的类型 (JDBC, MANAGED)。JDBC:使用 JDBC 提供的事务管理。MANAGED:将事务管理委托给容器(例如 Spring)。
<dataSource>元素:配置数据源。type属性:指定数据源的类型 (UNPOOLED, POOLED, JNDI)。UNPOOLED:每次请求都创建一个新的数据库连接。POOLED:使用连接池管理数据库连接。JNDI:从 JNDI 目录中获取数据源。
-
示例:
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${database.driver}"/> <property name="url" value="${database.url}"/> <property name="username" value="${database.username}"/> <property name="password" value="${database.password}"/> </dataSource> </environment> </environments>
-
-
<mappers>(映射器):-
作用: 用于注册 SQL 映射文件。
-
配置方式:
<mapper resource="com/example/mapper/UserMapper.xml"/>:使用resource属性指定 SQL 映射文件的路径(相对于 classpath 根目录)。<mapper url="file:///path/to/UserMapper.xml"/>:使用url属性指定 SQL 映射文件的 URL。<mapper class="com.example.mapper.UserMapper"/>:使用class属性指定 Mapper 接口的类名,MyBatis 会自动查找与该接口同名的 SQL 映射文件。<package name="com.example.mapper"/>:扫描指定包下的所有 Mapper 接口,MyBatis 会自动查找与这些接口同名的 SQL 映射文件。 这种方式通常与 Spring 的@MapperScan注解一起使用。
-
示例:
<mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> <package name="com.example.mapper"/> <!-- 扫描 com.example.mapper 包,自动注册 Mapper 接口 --> </mappers>
-
四、 DTD (Document Type Definition)
MyBatis 配置文件需要遵循特定的 DTD 约束, DTD 文件定义了 XML 文档的结构和元素。
-
DTD 声明:
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> -
DTD 文件:
mybatis-3-config.dtd文件定义了 MyBatis 配置文件的结构。 可以在 MyBatis 的官方网站上找到该文件。- 通常不需要手动修改 DTD 文件,只需要在 XML 配置文件中声明 DTD 即可。
五、 注意事项
- 配置文件位置: MyBatis 配置文件通常放在 classpath 根目录下,例如
src/main/resources目录。 - 命名规范: 建议使用
mybatis-config.xml作为配置文件的名称。 - DTD 声明: 确保在 XML 配置文件中声明了正确的 DTD,以便 MyBatis 能够正确解析配置文件。
- 属性值: 确保所有属性值都正确设置,例如数据库连接信息、缓存配置等。
- 版本兼容性: MyBatis 的不同版本可能存在一些差异,需要注意配置文件的兼容性。
1906

被折叠的 条评论
为什么被折叠?



