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

iBatis 到 MyBatis 遷移核心差異總結:XML 映射、DAO 實現、參數結果處理全對比

     編輯:Java 綜合教學

架構層面核心變化

維度iBatis 2.xMyBatis 3.x
DAO 實現方式繼承 SqlMapClientDaoSupport,調用 getSqlMapClientTemplate().queryForObject(...)定義 Mapper 接口,XML 直接映射方法,無需實現類 (動態代理)
配置文件根元素<sqlMap><mapper namespace="...">
DTD 約束ibatis-2-mapping.dtdmybatis-3-mapping.dtd

XML 映射文件屬性名稱統一規範

iBatis 屬性MyBatis 屬性說明
parameterClassparameterType輸入參數類型 (全限定名/別名)
resultClassresultType單條結果類型
resultMap (class 屬性)resultMap (type 屬性)結果映射引用/定義
parameterMap (class 屬性)parameterMap (type 屬性)參數映射 (已棄用,推薦 parameterType)

動態 SQL 標籤演進

  • 參數佔位符:#value# → #{value} (OGNL 表達式支持屬性導航 #{user.id}、集合遍歷 #{item.name})。
  • 判斷標籤:<isEqual>/<isNotNull> → <if test="..."> (統一 OGNL 語法)。
  • 迭代標籤:<iterate> → <foreach collection="..." item="..." separator=",">。
  • 動態更新:<dynamic> → <set>/<trim> (更精準控制逗號/AND/OR)。

JDBC 類型映射變更

iBatis jdbcTypeMyBatis jdbcType
ORACLECURSORCURSOR
NUMBERNUMERIC
其它標準類型保持不變 (VARCHAR, INTEGER, TIMESTAMP...)

resultMap 細節調整

  • 移除 <result columnIndex="..."> (按索引映射),統一使用 column="列名" 或 property="屬性名"。
  • <id> 標識主鍵屬性,<result> 普通屬性,<association>/<collection> 關聯對象/集合。

遷移實戰清單

  1. 刪除所有 DAO 實現類,保留 Mapper 接口。
  2. 將 sqlMapConfig.xml 重寫為 mybatis-config.xml,註冊 <mapper resource="..."/> 或 <package name="..."/>。
  3. 批量替換 XML 屬性名 (parameterClass→parameterType 等),可用 IDE 正則替換。
  4. 重寫動態 SQL 標籤 (isEqual→if, iterate→foreach)。
  5. 修正 jdbcType 值 (ORACLECURSOR→CURSOR, NUMBER→NUMERIC)。
  6. 移除 columnIndex 用法,補全 column/property。
  7. 測試所有 CRUD、動態 SQL、關聯查詢、存過程調用。

MyBatis 新增優勢功能 (遷移動力)

  • 接口綁定:無需寫實現類,減少樣板代碼 80%+。
  • 註解映射:@Select("SELECT * FROM t WHERE id=#{id}") 簡單查詢無需 XML。
  • TypeHandler 自定義:優雅處理枚舉、JSON、加密字段等類型轉換。
  • 插件機制:分頁 (PageHelper)、租戶隔離、數據權限、SQL 審計等切面無侵入擴展。
  • 多緩存支持:一級緩存 (Session 級)、二級緩存 (Mapper 級)、第三方緩存 (Redis/Ehcache) 整合。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved