首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

MyBatis 核心配置 SqlMapConfig.xml 完整解析

     編輯:Java 綜合教學

MyBatis 核心配置 SqlMapConfig.xml 完整解析

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 — 外部化屬性

<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

加載優先級 (低→高):

  1. <properties> 內部定義
  2. resource/url 加載的屬性文件
  3. 運行時 parameterType 傳遞的屬性

建議:僅在屬性文件定義,名稱加前綴如 jdbc.xxx 避免衝突。

二、settings — 全局行為開關

<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 — 類型別名

1. 單個定義

<typeAliases>
  <typeAlias type="com.example.model.User" alias="user"/>
</typeAliases>

2. 批量掃描 (推薦)

<typeAliases>
  <package name="com.example.model"/>
  <package name="com.example.dto"/>
</typeAliases>

別名默認為類名 (首字母大小寫均可),User → user 或 User。

3. 內置別名表 (節選)

別名映射類型
_int / _integer / int / integerint / Integer
_long / longlong / Long
_double / doubledouble / Double
_bool / booleanboolean / Boolean
stringString
datejava.util.Date
decimal / bigdecimalBigDecimal
mapMap

四、typeHandlers — 類型處理器

MyBatis 內置處理器已覆蓋所有 JDBC 標準類型,通常無需自定義。核心映射表:

自定義場景:特殊枚舉存數值、JSON 字段、加密字段。實現 TypeHandler 接口並註冊。

五、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>
  <environment id="production">
    <transactionManager type="MANAGED"/>
    <dataSource type="JNDI">
      <property name="data_source" value="java:comp/env/jdbc/prodDS"/>
    </dataSource>
  </environment>
</environments>
  • type="POOLED":MyBatis 內置連接池
  • type="JNDI":應用服務器容器管理
  • type="UNPOOLED":無連接池,每次新建

六、mappers — 映射器註冊 (四種方式)

處理器Java 類型JDBC 類型
StringTypeHandlerStringCHAR, VARCHAR
IntegerTypeHandlerint/IntegerINTEGER
DateTypeHandlerjava.util.DateTIMESTAMP
DateOnlyTypeHandlerjava.util.DateDATE
EnumTypeHandlerEnumVARCHAR (存枚舉名)
BlobTypeHandlerbyte[]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"/>批量註冊,約定優於配置

七、與 Spring 整合後的簡化

整合 mybatis-spring 後,SqlMapConfig.xml 可精簡為:

<configuration>
  <settings> ... </settings>
  <typeAliases>
    <package name="com.example.model"/>
  </typeAliases>
  <!-- mappers 由 MapperScannerConfigurer 掃描註冊 -->
</configuration>

數據源、事務、SqlSessionFactory 完全移交 Spring 容器管理。

八、常見坑點提醒

  1. mapUnderscoreToCamelCase 僅適用 resultMap 自動映射,手寫 resultMap 無效
  2. 批量別名掃描要求實體類有無參構造函數
  3. 自定義 TypeHandler 需在 typeHandlers 註冊或註解 @MappedTypes
  4. 多環境切換靠 environments default 或 Spring Profile 啟用對應 environment
  5. 生產環境必須使用連接池 (POOLED/JNDI/Druid/HikariCP)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved