本文詳細講解 MyBatis 核心配置文件優化的兩大關鍵技巧:將資料庫連線資訊外部化至 properties 文件,以及為實體類定義類型別名簡化映射文件引用。
傳統做法將資料庫連線資訊直接寫在 conf.xml 中:
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="XDP"/>
</dataSource>
缺點:環境切換需修改 XML、敏感資訊洩露風險、版本控制困擾。
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
name=root
password=XDP
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 引入外部屬性文件 -->
<properties resource="db.properties"/>
<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="${name}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
</configuration>
<properties resource="db.properties"/>
<properties resource="db-${env}.properties"/> <!-- 覆蓋預設值 -->
<environments default="${env}">
<environment id="development">...</environment>
<environment id="production">...</environment>
<environment id="test">...</environment>
</environments>
啟動時指定 JVM 參數:-Denv=production 即可切換環境。
映射文件中頻繁寫入完整類名:
<insert id="addUser" parameterType="me.gacl.domain.User">...</insert>
<select id="getUser" resultType="me.gacl.domain.User">...</select>
冗長且易拼錯,重構時需批量修改。
<configuration>
<typeAliases>
<typeAlias type="me.gacl.domain.User" alias="_User"/>
</typeAliases>
</configuration>
映射文件簡化為:
<insert id="addUser" parameterType="_User">...</insert>
<select id="getUser" resultType="_User">...</select>
<configuration>
<typeAliases>
<!-- 掃描包下所有類,別名預設為簡類名 (User) -->
<package name="me.gacl.domain"/>
</typeAliases>
</configuration>
效果:me.gacl.domain.User → 別名 User
me.gacl.domain.Order → 別名 Order
@Alias("User")
public class User { ... }
需在配置中開啟掃描:<package name="me.gacl.domain"/>
| 策略 | 別名格式 | 優點 | 缺點 |
|---|---|---|---|
| 簡類名 | User, Order, Product | 簡潔、預設行為 | 不同包同名類衝突 |
| 前綴+簡類名 | _User, dto_User, entity_User | 避免衝突、語義清晰 | 稍長 |
| 全小寫 | user, order, product | 統一風格 | 與關鍵字衝突風險 |
| 註解自定義 | @Alias("sysUser") | 完全可控 | 需維護註解 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<typeAliases>
<package name="me.gacl.domain"/>
<package name="me.gacl.dto"/>
</typeAliases>
<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="${name}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="me/gacl/mapping/userMapper.xml"/>
<mapper resource="me/gacl/mapping/orderMapper.xml"/>
</mappers>
</configuration>
<!-- 優化前 -->
<select id="getUser" parameterType="me.gacl.domain.User" resultType="me.gacl.domain.User">...</select>
<!-- 優化後 -->
<select id="getUser" parameterType="User" resultType="User">...</select>
映射文件行數減少 ~30%,可讀性顯著提升,重構時僅需修改實體類包路徑。
MyBatis 配置優化兩大核心:外部化屬性文件實現環境隔離與安全管理,類型別名消除冗長類名提升可維護性。建議專案伊始即確立:db-${env}.properties 多環境配置 + <package name="..."/> 批量別名掃描,配合註解 @Alias 處理特殊命名衝突,構建清晰、安全、易維護的配置體系。