EmpService 和 EmpMapper接口的作用

在這個項目中,EmpServiceEmpMapper 都定義接口,是基于面向接口編程(Interface Oriented Programming,IOP)的設計思想,這兩種接口在項目中承擔著不同的職責,具體說明如下:

EmpService接口

  • 作用

    • 業務邏輯抽象EmpService 接口對員工相關的業務邏輯進行了抽象和定義。它將復雜的業務操作封裝成一個個方法,比如員工的新增、刪除、修改、查詢等操作,使得上層的 EmpController 無需關心業務邏輯的具體實現細節,只需要調用接口方法即可。
    • 規范業務行為:通過定義接口,為業務邏輯的實現制定了統一的規范。不同的開發者可以根據這個規范,在 EmpService 接口的實現類(通常在 EmpService 接口所在包的 impl 子包下)中編寫具體的業務邏輯代碼。例如,在實現員工查詢方法時,可能需要對查詢條件進行合法性校驗、處理分頁邏輯、調用緩存服務(如果有的話)等,這些都可以在實現類中完成,只要保證方法簽名符合接口定義即可。
    • 便于代碼維護和擴展:當業務需求發生變化時,比如需要在員工刪除操作中添加額外的業務校驗(如檢查該員工是否有關聯的訂單未處理),只需要在 EmpService 接口的實現類中修改對應的方法實現,而不會影響到 EmpController 以及其他依賴該接口的代碼。同時,也方便在不修改接口的情況下,對業務邏輯進行擴展,例如添加新的業務方法。
    • 實現業務層的依賴倒置:在 Spring 等框架中,可以通過依賴注入(Dependency Injection,DI)的方式將 EmpService 接口的實現類注入到 EmpController 中,實現了高層模塊(EmpController)不依賴于低層模塊(EmpService 實現類)的具體實現,而是依賴于抽象(EmpService 接口),提高了代碼的可維護性和可測試性。
  • 示例
    假設 EmpService 接口有以下定義:

public interface EmpService {// 查詢所有員工List<Emp> listAllEmp();// 根據員工ID查詢員工Emp getEmpById(Integer empId);// 新增員工void addEmp(Emp emp);// 修改員工void updateEmp(Emp emp);// 刪除員工void deleteEmp(Integer empId);
}

EmpService 接口的實現類中,會根據業務需求實現這些方法,可能會涉及到調用 EmpMapper 接口進行數據庫操作,以及處理其他業務相關的邏輯。

EmpMapper接口

  • 作用

    • 數據庫操作抽象EmpMapper 接口對員工相關的數據庫操作進行了抽象。它定義了與數據庫交互的方法,如查詢、插入、更新、刪除員工數據等,使得業務層(EmpService)無需直接編寫 SQL 語句,也無需關心數據庫連接的獲取、關閉等底層操作。
    • 配合 MyBatis 框架:在使用 MyBatis 框架的項目中,EmpMapper 接口與對應的 XML 映射文件(如 EmpMapper.xml)配合使用。接口中的方法與 XML 文件中定義的 SQL 語句相對應,MyBatis 框架會通過動態代理等機制,在運行時生成接口的實現類,從而執行對應的 SQL 操作。例如,EmpMapper 接口中的查詢方法會根據 XML 文件中定義的 SQL 語句從數據庫中獲取數據,并將結果映射為 Java 對象(如 Emp 實體類)返回給調用者。
    • 實現數據訪問層的解耦:通過將數據庫操作抽象成接口,使得業務層與具體的數據庫實現解耦。如果后續需要更換數據庫(如從 MySQL 切換到 Oracle),只需要修改 EmpMapper.xml 中的 SQL 語句,以及數據庫連接配置等,而業務層的代碼(EmpService 及其實現類)無需進行大規模修改,提高了代碼的可移植性和可維護性。
    • 方便測試和代碼復用:在單元測試中,可以通過模擬 EmpMapper 接口的行為來測試業務層代碼,而無需真正連接到數據庫。同時,EmpMapper 接口定義的數據庫操作方法可以在多個業務邏輯中復用,提高了代碼的復用性。
  • 示例
    假設 EmpMapper 接口有以下定義:

public interface EmpMapper {// 查詢所有員工List<Emp> selectAllEmp();// 根據員工ID查詢員工Emp selectEmpById(Integer empId);// 新增員工int insertEmp(Emp emp);// 修改員工int updateEmp(Emp emp);// 刪除員工int deleteEmp(Integer empId);
}

EmpMapper.xml 文件中,會有與這些方法對應的 SQL 語句定義,例如:

<select id="selectAllEmp" resultType="com.itheima.pojo.Emp">SELECT * FROM emp
</select>
<select id="selectEmpById" parameterType="int" resultType="com.itheima.pojo.Emp">SELECT * FROM emp WHERE emp_id = #{empId}
</select>
<insert id="insertEmp" parameterType="com.itheima.pojo.Emp">INSERT INTO emp (emp_name, age, gender,...) VALUES (#{empName}, #{age}, #{gender},...)
</insert>
<update id="updateEmp" parameterType="com.itheima.pojo.Emp">UPDATE emp SET emp_name = #{empName}, age = #{age}, gender = #{gender},... WHERE emp_id = #{empId}
</update>
<delete id="deleteEmp" parameterType="int">DELETE FROM emp WHERE emp_id = #{empId}
</delete>

兩者區別

  • 功能職責不同EmpService 接口關注的是業務邏輯層面的操作,處理與員工相關的業務需求,如數據校驗、業務規則應用等;而 EmpMapper 接口專注于數據庫操作,負責從數據庫中獲取數據或向數據庫中存儲、更新、刪除數據。
  • 調用層次不同EmpController 調用 EmpService 接口來處理業務請求,EmpService 接口在實現業務邏輯過程中會調用 EmpMapper 接口來完成數據庫操作。即 EmpService 接口處于業務層,EmpMapper 接口處于數據訪問層。
  • 依賴關系不同EmpService 接口依賴于 EmpMapper 接口,因為業務邏輯的實現往往需要對數據庫進行操作;而 EmpMapper 接口不依賴于 EmpService 接口,它直接與數據庫進行交互,為業務層提供數據訪問服務。
  • 接口實現方式不同EmpService 接口的實現類由開發者根據業務需求編寫,實現業務邏輯代碼;EmpMapper 接口的實現是由 MyBatis 框架通過動態代理機制自動生成的,其具體的數據庫操作邏輯由對應的 XML 映射文件中的 SQL 語句決定。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94074.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94074.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【語音技術】什么是動態實體

目錄 動態實體的定義和維度 1.1 動態實體的資源 1.2 生效維度 1.2.1 應用級 1.2.2 用戶級 1.2.3 自定義級 2. 動態實體的上傳及使用 2.1 WebAPI 2.1.1 授權認證 2.1.2 上傳資源接口 2.1.2.1 參數說明 2.1.2.2 返回說明 2.1.3 查詢打包狀態 2.1.3.1 參數說明 2.1.…

STM32學習記錄--Day3

今天了解了下I2C&#xff1a;1.I2C電路結構I2C通信示意圖&#xff1a;數據傳輸階段????主→從模式??&#xff08;寫操作&#xff09;&#xff1a;主機控制SCL時鐘&#xff08;把SCL拉低&#xff09;主機向SDA線發送數據&#xff08;每次8位1位ACK&#xff09;??主←從模…

裂變數據看板:5個核心指標決定活動生死?

數據是裂變活動的“指南針”。本文詳解曝光量、轉化率、裂變系數等5大核心指標&#xff0c;結合工具與案例&#xff0c;教你用數據驅動活動優化&#xff0c;避免“自嗨式裂變”。?為什么數據是裂變的“生死線”&#xff1f;&#xff08;認知重構&#xff09; 很多企業裂變活動…

iOS 類存儲 與 C# 類存儲 的差異

C# 中類的代碼&#xff08;包括方法、屬性等成員&#xff09;的存儲機制與 Objective-C 有顯著差異&#xff0c;其核心依賴于 ?CLR&#xff08;公共語言運行時&#xff09;的方法表&#xff08;Method Table&#xff09;和虛擬方法表&#xff08;vtable&#xff09;機制&#…

Selenium自動化:輕松實現網頁操控

selenium自動化 1 什么是 Selenium 自動化 Selenium 是一個用于 Web 應用程序測試的工具&#xff0c;支持多種瀏覽器&#xff08;如 Chrome、Firefox、Edge 等&#xff09;。WebDriver 是 Selenium 的核心組件&#xff0c;用于控制瀏覽器行為并執行自動化操作。元素定位是通過…

又開發了一個優雅的小工具!

在開源項目中&#xff0c;Issues是一個強大的功能&#xff0c;用于跟蹤bug、功能請求和任務。然而&#xff0c;隨著項目的發展&#xff0c;Issues可能會變得難以管理&#xff0c;特別是當你需要離線訪問或進行深入分析時。 當然GitHub Issues除了上述功能以外&#xff0c;做在線…

【安裝教程】Docker Desktop 安裝與使用教程

文章目錄一、環境要求二、安裝步驟2.1 安裝 WSL 2&#xff08;適用于非專業版 Windows 10 及 Windows 11&#xff09;2.2 安裝 Docker Desktop2.3 漢化 DDocker Desktop2.4 卸載 Docker Desktop三、使用 Docker3.1驗證安裝3.2. 拉取鏡像3.3. 運行容器3.4. 查看容器3.5.更改容器…

Hutool 的 WordTree(敏感詞檢測)

package cn.hutool.dfa;WordTree 繼承自 HashMap<Character, WordTree>&#xff0c;表示一個字符到子樹的映射&#xff0c;構成一顆“詞樹”&#xff08;類似 Trie 樹&#xff09;&#xff0c;用于快速匹配字符串中的詞語&#xff08;敏感詞檢測、關鍵詞匹配等&#xff0…

Makefile 從入門到精通:自動化構建的藝術

引入 在軟件開發的世界里&#xff0c;“編譯” 是繞不開的環節&#xff0c;但手動編譯大型項目時&#xff0c;重復輸入編譯命令的痛苦&#xff0c;相信每個開發者都深有體會。Makefile 作為自動化構建的基石&#xff0c;能讓編譯過程“一鍵完成”&#xff0c;甚至智能判斷文件變…

利用DeepSeek將Rust程序的緩沖輸出改寫為C語言實現提高輸出效率

在前面多語言測試中&#xff0c;遇到一個難以置信的問題&#xff0c;rust的輸出到文件比c語言還快&#xff0c;這是不合情理的&#xff0c;通過對兩者輸出語句的比較&#xff0c;發現了不同。 rust程序在輸出到stdout前有這么一句 let mut writer BufWriter::with_capacity(6…

Java Optional 類教程詳解

一、Optional 類核心定位Optional 是 Java 8 引入的函數式容器類&#xff08;java.util.Optional&#xff09;&#xff0c;專為??顯式空值處理??設計。其核心價值在于&#xff1a;消除 60% 以上的傳統 null 檢查代碼通過類型系統強制空值聲明&#xff0c;降低 NPE 風險支持…

Agent X MCP 把想法編譯成現實

多模態GUI智能體協作型AI魔搭社區MCPMCP 硬件

cv快速input

效果<view class"miniWhether-box-lss"><view class"content-inp-text">快遞單號</view><input class"content-inp-input" type"text"v-model"expressInfo.expressNo" placeholder"填寫快遞單號&…

[AI8051U入門第十二步]W5500-Modbus TCP從機

學習目標: 1、了解Modbus Tcp協議 2、學習Modbus Tcp 從機程序驅動 3、使用 Modbus Pull調試一、Modbus TCP介紹? Modbus TCP 是一種基于 TCP/IP 網絡的工業通信協議,是 Modbus 協議家族中的一員,專門為以太網環境設計。它是 Modbus RTU(串行通信)協議的擴展,將 Modbus…

Python編程基礎與實踐:Python循環結構基礎

循環結構 學習目標 通過本課程的學習&#xff0c;學員可以掌握Python中for循環和while循環的基本使用方法&#xff0c;了解如何利用循環結構來重復執行代碼塊&#xff0c;以及如何使用break和continue語句來控制循環的執行流程。 相關知識點 循環結構 學習內容 1 循環結構 1.1 …

趣談設計模式之模板方法模式-老板,你的數字咖啡制作好了,請享用!

模板方法模式 定義了一套算法的骨架&#xff0c;講某些具體的步驟延遲到子類中實現。 主要用于不改變算法結構的情況下重新定義算法的某些步驟&#xff0c;以適應新的需求。 模板方法的角色 抽象類&#xff1a; 作為算法的骨架&#xff0c;該抽象類中包含了算法的核心部分和…

技術棧:基于Java語言的搭子_搭子社交_圈子_圈子社交_搭子小程序_搭子APP平臺

一、市場背景1、社會發展與生活方式轉變城市化進程加快&#xff1a;隨著城市化不斷推進&#xff0c;大量人口涌入城市&#xff0c;人們生活的物理空間距離拉近了&#xff0c;但人際關系卻在一定程度上變得疏離。傳統的基于血緣、地緣建立起的緊密社交關系難以滿足城市生活中的多…

字典在VBA與VB.NET的區別,舉例說明

簡述&#xff1a;在VBA中&#xff0c;字典通常使用Scripting.Dictionary對象&#xff0c;通過CreateObject("Scripting.Dictionary")創建。它需要引用Microsoft Scripting Runtime庫&#xff08;scrrun.dll&#xff09;。VBA字典的方法包括Exists、Add、Remove等&…

2024年網絡安全案例

以下是2024年造成嚴重損失的網絡安全典型案例&#xff0c;涵蓋市政系統、金融交易、區塊鏈平臺、國家級攻擊及全球性IT故障五大領域&#xff0c;按損失規模和技術危害性綜合排序&#xff1a;---一、市政基礎設施攻擊 1. 加拿大漢密爾頓市勒索軟件事件 - 損失&#xff1a;183…

PINN+貝葉斯:深度學習中的魔改新思路

2025深度學習發論文&模型漲點之——PINN貝葉斯PINN通過將物理定律&#xff08;如偏微分方程PDEs&#xff09;嵌入神經網絡的損失函數中&#xff0c;使得模型能夠利用已知的物理規律來指導學習過程&#xff0c;從而在數據有限或噪聲較多的情況下實現更高的準確性。然而&…