在 Spring MVC 整合 MyBatis 的標準開發模式中,我們通常遵循「Controller → Service → Mapper」的調用鏈路。許多初學者會疑惑:為什麼不直接在 Controller 中注入 Mapper 接口,省去 Service 層?
若將 Mapper 直接注入 Controller,會導致表現層與數據訪問層強耦合。Controller 的職責本應是接收請求、參數校驗、協調服務並返回視圖,不應包含業務邏輯或 SQL 相關操作。一旦業務變更,Controller 代碼將膨脹難維護,且難以實現事務管理、異常統一處理等橫切關注點。
問題中提到的「實現 ApplicationContextAware 從容器獲取 Mapper 並反射調用」屬於典型的反模式:
堅持分層架構,Controller 僅做請求分發,Service 聚焦業務邏輯與事務,Mapper 專注數據持久化。這樣才能構建高內聚、低耦合、易測試、可維護的企業級應用。