目录
一、配置文件概述
MyBatis的配置文件(通常命名为mybatis-config.xml
)是整个MyBatis的核心,它包含了会影响MyBatis行为的设置和属性信息。本文将详细介绍配置文件的各个部分。
二、配置文件结构
MyBatis配置文件遵循以下顺序(顺序不能颠倒):
-
properties(属性)
-
settings(设置)
-
typeAliases(类型别名)
-
typeHandlers(类型处理器)
-
objectFactory(对象工厂)
-
plugins(插件)
-
environments(环境配置)
-
databaseIdProvider(数据库厂商标识)
-
mappers(映射器)
三、详细配置说明
1. properties(属性)
properties可以从外部配置文件中加载属性,便于管理和修改配置:
<!-- 从外部文件加载属性 -->
<properties resource="db.properties">
<!-- 也可以在properties元素中定义属性 -->
<property name="username" value="dev_user"/>
</properties>
<!-- db.properties文件内容示例 -->
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
username=root
password=123456
2. settings(设置)
settings用于改变MyBatis的运行时行为,这是最重要的配置:
<settings>
<!-- 开启驼峰命名自动映射 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
<!-- 设置日志实现 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
常用settings配置说明:
设置名 | 描述 | 默认值 |
---|---|---|
cacheEnabled | 是否开启二级缓存 | true |
lazyLoadingEnabled | 是否开启延迟加载 | false |
mapUnderscoreToCamelCase | 是否开启驼峰命名自动映射 | false |
defaultExecutorType | 设置默认执行器 | SIMPLE |
logImpl | 指定日志实现 | 未设置 |
3. typeAliases(类型别名)
typeAliases可以为Java类型设置一个短的名字,方便在XML配置中使用:
<typeAliases>
<!-- 单个别名定义 -->
<typeAlias alias="User" type="com.example.entity.User"/>
<!-- 批量别名定义,扫描包下所有类 -->
<package name="com.example.entity"/>
</typeAliases>
常用的内建别名:
别名 | Java类型 |
---|---|
string | String |
long | Long |
int | Integer |
map | Map |
list | List |
hashmap | HashMap |
4. typeHandlers(类型处理器)
typeHandlers用于Java类型与数据库类型的转换:
<typeHandlers>
<!-- 自定义类型处理器 -->
<typeHandler handler="com.example.handler.MyDateTypeHandler"
javaType="java.util.Date"
jdbcType="TIMESTAMP"/>
</typeHandlers>
自定义TypeHandler示例:
public class MyDateTypeHandler implements TypeHandler<Date> {
@Override
public void setParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) {
// 设置参数
}
@Override
public Date getResult(ResultSet rs, String columnName) {
// 获取结果
}
// 其他必要方法实现...
}
5. environments(环境配置)
environments用于配置不同环境下的数据库连接:
<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>
<!-- 生产环境 -->
<environment id="production">
<transactionManager type="MANAGED"/>
<dataSource type="JNDI">
<property name="data_source" value="java:comp/env/jdbc/mydb"/>
</dataSource>
</environment>
</environments>
事务管理器类型:
-
JDBC:使用JDBC的事务管理
-
MANAGED:将事务管理交给容器
数据源类型:
-
UNPOOLED:不使用连接池
-
POOLED:使用连接池
-
JNDI:使用JNDI数据源
6. mappers(映射器)
mappers用于注册Mapper文件:
<mappers>
<!-- 使用相对路径 -->
<mapper resource="mapper/UserMapper.xml"/>
<!-- 使用完全限定类名 -->
<mapper class="com.example.mapper.UserMapper"/>
<!-- 扫描包下所有Mapper -->
<package name="com.example.mapper"/>
<!-- 使用URL -->
<mapper url="file:///var/mappers/UserMapper.xml"/>
</mappers>
四、最佳实践
1. 属性配置最佳实践
<!-- 推荐的配置方式 -->
<properties resource="db.properties">
<!-- 设置默认值 -->
<property name="username" value="default_user"/>
<property name="password" value="default_pass"/>
</properties>
2. 设置配置最佳实践
<settings>
<!-- 建议开启的设置 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="logImpl" value="SLF4J"/>
</settings>
3. 类型别名最佳实践
<!-- 推荐使用包扫描 -->
<typeAliases>
<package name="com.example.entity"/>
</typeAliases>
4. 环境配置最佳实践
<!-- 分环境配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 开发环境配置 -->
</dataSource>
</environment>
<environment id="testing">
<!-- 测试环境配置 -->
</environment>
<environment id="production">
<!-- 生产环境配置 -->
</environment>
</environments>
五、常见问题及解决方案
1. 配置文件加载失败
问题:找不到配置文件 解决:
-
检查配置文件路径是否正确
-
确保配置文件在classpath下
-
Maven项目需要配置资源文件过滤
2. 属性文件读取问题
问题:无法读取属性文件 解决:
-
检查属性文件路径
-
确保属性名称匹配
-
使用正确的占位符语法 ${property}
3. 映射文件注册问题
问题:找不到Mapper文件 解决:
-
检查Mapper文件路径
-
确保XML文件和接口名称一致
-
正确配置mapper扫描路径
六、配置优化建议
-
使用外部配置文件
-
将数据库配置等信息放在外部properties文件
-
便于管理和修改
-
支持不同环境配置
-
-
合理使用别名
-
为常用的类型配置别名
-
使用包扫描简化配置
-
避免过多的单独别名定义
-
-
环境隔离
-
为不同环境配置不同的数据源
-
使用profiles管理不同环境
-
避免硬编码配置
-
-
日志配置
-
配置合适的日志实现
-
开发环境使用详细日志
-
生产环境注意日志级别
-
七、小结
本文详细介绍了MyBatis配置文件的各个部分,通过学习这些内容,你应该能够:
-
理解MyBatis配置文件的结构
-
掌握各个配置项的作用和用法
-
学会配置不同环境的数据源
-
了解配置的最佳实践
-
解决常见的配置问题
下一篇文章我们将深入讲解MyBatis的动态SQL,敬请期待!