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

MyBatis 原理概述與入門教程

     編輯:Java 相關知識

前言

MyBatis 是優秀的持久層框架,支援自定義 SQL、存儲過程與高級映射。本文涵蓋核心架構原理、完整 CRUD 入門範例、優缺點分析與 Hibernate 比較。

一、核心架構流程

  1. 載入配置:解析 XML/註解,構建 MappedStatement(含參數映射、SQL、結果映射),存入 Configuration。
  2. SQL 解析:根據 Statement ID 找到 MappedStatement,結合輸入參數動態解析 SQL(OGNL 表達式),生成 BoundSql。
  3. SQL 執行:獲取連線,建立 PreparedStatement,設定參數,執行查詢/更新。
  4. 結果映射:依 ResultMap 將 ResultSet 映射為 JavaBean、Map 或基本型別。

二、入門完整範例

1. 實體類

public class User {
    private int id;
    private String username, sex, address;
    private Date birthday;
    // getter/setter/toString
}

2. 映射檔

<mapper namespace="test">
  <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
    SELECT * FROM user WHERE id=#{value}
  </select>
  <select id="findUserByName" parameterType="String" resultType="User">
    SELECT * FROM user WHERE username LIKE '%${value}%'
  </select>
  <insert id="insertUser" parameterType="User">
    <selectKey keyProperty="id" order="AFTER" resultType="int">SELECT LAST_INSERT_ID()</selectKey>
    INSERT INTO user(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})
  </insert>
  <update id="updateUser" parameterType="User">
    UPDATE user SET username=#{username},... WHERE id=#{id}
  </update>
  <delete id="deleteUser" parameterType="int">DELETE FROM user WHERE id=#{id}</delete>
</mapper>

3. 測試代碼

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
SqlSession session = factory.openSession();
User user = session.selectOne("test.findUserById", 1);
List<User> list = session.selectList("test.findUserByName", "小明");
session.insert("test.insertUser", newUser);
session.update("test.updateUser", updatedUser);
session.delete("test.deleteUser", 39);
session.commit(); session.close();

三、優缺點分析

優點缺點
上手簡單、SQL 可見可控 SQL 編寫量大,字段多時維護成本高
SQL 與程式碼解耦,便於優化 SQL 依賴特定資料庫,移植性較差
支援動態 SQL、結果映射、關聯映射 XML 中 ID 唯一導致 DAO 不支援方法重載
輕量級,半自動映射 二級快取機制較弱,易產生髒讀

四、MyBatis vs Hibernate

維度MyBatisHibernate
學習曲線平緩,即學即用陡峭,需精通 O/R 映射
SQL 控制完全手寫,可精細優化自動生成,難以精細控制
對象模型簡單/扁平模型友好豐富領域模型強項
快取簡單二級快取強大二級快取,支援第三方
開發效率SQL 多時較低模型穩定後極高

選型建議:複雜報表、多表關聯、需 SQL 優化 → MyBatis;豐富領域模型、快速開發、團隊精通 Hibernate → Hibernate。

五、總結

MyBatis 以「SQL 為中心」提供靈活映射,適合追求 SQL 掌控力的專案。掌握 resultMap、動態 SQL、快取配置是進階關鍵。實務中常搭配 Spring Boot、PageHelper、MyBatis-Plus 提升開發效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved