SqlMapConfig.xml 是 MyBatis 全局配置文件,定義數據源、事務、映射器、類型別名、緩存、插件等核心組件。本文逐節拆解各配置項用法與最佳實踐。
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<settings> ... </settings>
<typeAliases> ... </typeAliases>
<typeHandlers> ... </typeHandlers>
<objectFactory type="..."/>
<plugins> ... </plugins>
<environments default="development"> ... </environments>
<mappers> ... </mappers>
</configuration>
<properties resource="db.properties"/>
<!-- db.properties -->
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/shop
jdbc.username=root
jdbc.password=123456
加載優先級 (低→高):
<properties> 內部定義resource/url 加載的屬性文件parameterType 傳遞的屬性建議:僅在屬性文件定義,名稱加前綴如 jdbc.xxx 避免衝突。
<settings>
<setting name="cacheEnabled" value="true"/> <!-- 二級緩存 -->
<setting name="lazyLoadingEnabled" value="true"/> <!-- 延遲加載 -->
<setting name="aggressiveLazyLoading" value="false"/> <!-- 按需加載 -->
<setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 下劃線轉駝峰 -->
<setting name="logImpl" value="SLF4J"/> <!-- 日誌實現 -->
<setting name="defaultExecutorType" value="REUSE"/> <!-- 執行器復用 -->
</settings>
<typeAliases>
<typeAlias type="com.example.model.User" alias="user"/>
</typeAliases>
<typeAliases>
<package name="com.example.model"/>
<package name="com.example.dto"/>
</typeAliases>
別名默認為類名 (首字母大小寫均可),User → user 或 User。
| 別名 | 映射類型 |
|---|---|
| _int / _integer / int / integer | int / Integer |
| _long / long | long / Long |
| _double / double | double / Double |
| _bool / boolean | boolean / Boolean |
| string | String |
| date | java.util.Date |
| decimal / bigdecimal | BigDecimal |
| map | Map |
MyBatis 內置處理器已覆蓋所有 JDBC 標準類型,通常無需自定義。核心映射表:
| 處理器 | Java 類型 | JDBC 類型 |
|---|---|---|
| StringTypeHandler | String | CHAR, VARCHAR |
| IntegerTypeHandler | int/Integer | INTEGER |
| DateTypeHandler | java.util.Date | TIMESTAMP |
| DateOnlyTypeHandler | java.util.Date | DATE |
| EnumTypeHandler | Enum | VARCHAR (存枚舉名) |
| BlobTypeHandler | byte[] | BLOB |
| 方式 | 配置示例 | 適用場景 |
|---|---|---|
| 資源路徑 | <mapper resource="mapper/UserMapper.xml"/> | XML 映射文件,類路徑下 |
| 絕對路徑 | <mapper url="file:///D:/mapper/UserMapper.xml"/> | 外部文件,較少用 |
| 接口類 (單個) | <mapper class="com.example.mapper.UserMapper"/> | Mapper 代理開發,接口與 XML 同名同目錄 |
| 包掃描 (推薦) | <package name="com.example.mapper"/> | 批量註冊,約定優於配置 |
整合 mybatis-spring 後,SqlMapConfig.xml 可精簡為:
<configuration>
<settings> ... </settings>
<typeAliases>
<package name="com.example.model"/>
</typeAliases>
<!-- mappers 由 MapperScannerConfigurer 掃描註冊 -->
</configuration>
數據源、事務、SqlSessionFactory 完全移交 Spring 容器管理。
mapUnderscoreToCamelCase 僅適用 resultMap 自動映射,手寫 resultMap 無效typeHandlers 註冊或註解 @MappedTypesenvironments default 或 Spring Profile 啟用對應 environment