為什麼MyBatis的Mpper介面不需要實現類?

kiss_sheep發表於2024-03-27

1.不是不需要實現類,而是這些mapper介面不要人為的去實現(即不需要程式設計師使用者去實現)。
2.它們的實現者是 MyBatis 的框架開發者,透過動態代理實現的
MyBatis 會在執行時動態建立mapper介面的實現類,這個過程是透過 Java 的反射機制和 CGLIB 庫來完成的。
呼叫 Mapper 介面中的方法時,MyBatis 會根據介面方法的名稱和配置檔案中定義的 SQL 對映關係,動態地建立一個代理物件。這個代理物件在執行方法時,會負責執行對應的 SQL 語句,並將結果對映回 Java 物件

使用流程:
1.配置:定義 Mapper 介面+對應的 XML 檔案/註解來指定 SQL 語句和對映關係。
MyBatis 配置檔案(mybatis-config.xml)中會指定 Mapper XML 檔案的位置或者註冊 Mapper 介面。
2.啟動
SQL 語句和對映關係載入至記憶體
3.建立 SqlSessionFactory
4.獲取 SqlSession
5.動態代理
程式呼叫 Mapper 介面的方法時,MyBatis 使用 Java 的動態代理機制來建立一個代理物件。這個代理物件會攔截介面方法的呼叫。
6.執行 SQL 語句
代理物件攔截到介面方法後,根據方法名稱找到SQL 語句和對映關係。
透過SqlSession執行SQL
7.結果對映
將執行結果對映為JAVA物件
8.返回結果
9.關閉SqlSession

相關文章