前言:配置文件的重要性
在MyBatis江湖中,mybatis-config.xml
就是整个框架的"总指挥部"。这个配置文件虽然体积不大,却掌管着数据源、事务、类型转换等核心命脉。今天我们就来扒一扒这个XML文件的十八般武艺,从青铜到王者配置全解析!
一、配置项分类详解(武器库大点兵)
1. 环境配置(environments)
这是整个配置文件的战略要地,相当于军队的作战指挥部:
<environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment>
</environments>
核心组件:
transactionManager
:事务管家(JDBC/MANAGED两种模式)dataSource
:数据源大本营(UNPOOLED/POOLED/JNDI三种类型)property
:数据库连接的四大金刚(驱动、URL、用户名、密码)
2. 类型别名(typeAliases)
给Java类型起"江湖绰号"的快捷方式:
<typeAliases><!-- 单个注册 --><typeAlias type="com.example.User" alias="AwesomeUser"/><!-- 包扫描注册(推荐) --><package name="com.example.model"/>
</typeAliases>
使用场景:
- Mapper XML中直接使用
resultType="AwesomeUser"
- 避免写全限定类名的繁琐
3. 插件配置(plugins)
给MyBatis装上"外挂"的神奇接口:
<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><property name="helperDialect" value="mysql"/></plugin>
</plugins>
经典应用:
- 分页插件(PageHelper)
- 性能监控插件
- 自定义拦截器(实现Interceptor接口)
4. 其他重要配置
<settings><!-- 开启驼峰命名自动转换 --><setting name="mapUnderscoreToCamelCase" value="true"/><!-- 延迟加载总开关 --><setting name="lazyLoadingEnabled" value="true"/>
</settings><typeHandlers><!-- 自定义类型处理器 --><typeHandler handler="com.example.JsonTypeHandler"/>
</typeHandlers>
二、多环境配置实战(分身术秘籍)
场景:开发/测试/生产三套环境
<environments default="dev"><environment id="dev"><!-- 开发环境配置 --></environment><environment id="test"><!-- 测试环境配置 --></environment><environment id="prod"><!-- 生产环境配置 --></environment>
</environments>
环境切换的两种姿势
- 硬编码切换(不推荐):
<environments default="test"> <!-- 直接修改default值 -->
- 动态参数化切换(推荐):
<!-- 通过JVM参数指定 -->
-Dmybatis.environment=prod<!-- 配置文件读取 -->
<property name="env" value="${mybatis.environment}"/>
<environments default="${env}">
三、属性文件外置化(乾坤大挪移)
1. 基础外置化
<properties resource="jdbc.properties"/>
jdbc.properties
内容:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
2. 属性优先级规则
<properties resource="base.properties"><!-- 命令行参数优先级最高 --><property name="jdbc.url" value="${cmd.jdbc.url}"/><!-- 系统属性次之 --><property name="jdbc.username" value="${sys.db.user}"/><!-- 配置文件最低 -->
</properties>
3. 占位符的高级玩法
<dataSource type="POOLED"><!-- 字符串拼接 --><property name="url" value="${db.protocol}://${db.host}:${db.port}/${db.name}"/>
</dataSource>
四、配置优化技巧(武林秘籍)
-
环境隔离原则:
- 开发环境用UNPOOLED(简单快速)
- 生产环境用POOLED(连接池优化)
- 云环境考虑JNDI(容器管理)
-
安全加固:
- 生产环境密码加密存储
- 使用
<property name="password" value="${jdbc.password:default_pwd}"/>
设置默认值
-
性能调优:
<dataSource type="POOLED"><!-- 连接池核心参数 --><property name="poolMaximumActiveConnections" value="100"/><property name="poolMaximumIdleConnections" value="20"/> </dataSource>
五、常见坑点排查(避坑指南)
-
环境切换失效:
- 检查default属性是否正确
- 确认没有同时使用Spring的@Profile注解
-
属性未加载:
- 检查文件路径是否在classpath下
- 确认属性名没有拼写错误
-
类型别名冲突:
- 包扫描时不同包存在同名类
- 解决方案:使用注解显式指定别名
结语:配置即代码
通过精心配置mybatis-config.xml
,我们不仅能掌控MyBatis的核心行为,更能为项目搭建起灵活可靠的架构基础。记住:好的配置是项目成功的基石,但过度配置则是灾难的开始。建议根据项目实际需求,在灵活性与可维护性之间找到最佳平衡点。
下期预告: 《Mapper映射文件全解析》
最后送大家一句配置真言:“配置宜简不宜繁,外置当用则用,环境必分则分”。快去优化你的MyBatis配置吧,让这个持久层框架在你的项目中发挥最大威力!