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

MyBatis 進階實戰(二):Mapper 介面綁定與動態代理

     編輯:Java 相關知識

前言

上一篇使用「命名空間 + 語句 ID」的方式調用映射語句,雖然可行但不夠直觀,且缺乏編譯期檢查。MyBatis 支援 Mapper 介面綁定,利用動態代理自動實現介面方法,讓開發更符合面向介面編程習慣。

一、映射檔保持不變

<mapper namespace="com.cn.inter.IMessageOperation">
    <select id="selectUserByID" parameterType="int" resultType="com.cn.imooc.entity.Message">
        select * from `message` where id = #{id}
    </select>
    <select id="selectMessages" resultType="Message">
        select id, command, description, comment from message;
    </select>
</mapper>

關鍵點:namespace 必須與介面全限定名一致;id 必須與介面方法名一致;參數與返回類型需匹配。

二、定義 Mapper 介面

package com.cn.inter;
import com.cn.imooc.entity.Message;
public interface IMessageOperation {
    Message selectUserByID(Integer id);
    // 可新增其他方法,如 selectMessages()
}

三、測試介面調用

package com.cn.test;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.cn.imooc.entity.Message;
import com.cn.inter.IMessageOperation;

public class MyTest2 {
    public static void main(String[] args) {
        Reader reader = null;
        SqlSession sqlSession = null;
        try {
            reader = Resources.getResourceAsReader("Configuration.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            sqlSession = sqlSessionFactory.openSession();
            // 獲取 Mapper 介面代理物件
            IMessageOperation mapper = sqlSession.getMapper(IMessageOperation.class);
            // 直接呼叫介面方法
            Message message = mapper.selectUserByID(3);
            System.out.println(message);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) sqlSession.close();
        }
    }
}

四、核心優勢

  • 類型安全:編譯期即可發現方法簽名錯誤。
  • 程式碼簡潔:無需硬編碼字串,IDE 支援重構與跳轉。
  • 解耦:業務邏輯只依賴介面,不依賴 MyBatis API。

五、兩種方式對比

維度字串調用Mapper 介面
調用方式selectOne("ns.id", param)mapper.method(param)
編譯檢查無有
重構友好差優
適用場景動態 SQL、腳本常規 CRUD、團隊協作

實務中推薦使用 Mapper 介面作為主流方式,僅在高度動態場景下考慮字串調用。

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