controller?&?service?&?dao之間的關系及解讀
不要把所有代碼寫在同一個類里,要遵循單一原則,一個類只干一件事
后端各層級之間關系
提示:這里可以添加本文要記錄的大概內(nèi)容:
圖很重要

先用更通俗易懂的方式來解釋controller(控制器)、service(服務層)、mapper(數(shù)據(jù)訪問層)以及實體層之間的關系。
想象一下你去一家餐廳吃飯的情景:
Controller(控制器):
- 相當于餐廳的服務員。服務員負責接收顧客的訂單(比如你要點什么菜),然后將這些信息傳遞給廚師(相當于服務層),同時也負責將做好的菜肴送回到顧客的餐桌上。在軟件開發(fā)中,
controller主要負責接收用戶的請求,并將這些請求轉(zhuǎn)發(fā)給合適的業(yè)務邏輯處理層(service層)。
Service(服務層):
- 相當于餐廳的廚師。廚師負責根據(jù)服務員帶來的訂單制作菜品。在軟件開發(fā)中,
service層負責處理具體的業(yè)務邏輯,比如計算價格、處理復雜的業(yè)務流程等。service層會與數(shù)據(jù)庫進行交互,但它不直接操作數(shù)據(jù)庫,而是通過mapper層來進行。
Mapper(數(shù)據(jù)訪問層):
- 相當于餐廳的廚房里專門負責烹飪的工作人員。這些工作人員根據(jù)廚師的要求,具體操作爐灶、冰箱等設備來完成菜品的制作。在軟件開發(fā)中,
mapper層負責與數(shù)據(jù)庫進行交互,執(zhí)行SQL語句,獲取或更新數(shù)據(jù)。mapper通常與數(shù)據(jù)庫表緊密對應,負責將Java對象轉(zhuǎn)換為數(shù)據(jù)庫中的記錄,或?qū)?shù)據(jù)庫中的記錄轉(zhuǎn)換為Java對象。
實體層(Entity Layer):
- 相當于餐廳的食材。食材是構成菜品的基礎。在軟件開發(fā)中,實體層是指那些用來表示業(yè)務領域概念的對象,比如用戶、訂單等。實體層定義了數(shù)據(jù)的基本結構和屬性,是系統(tǒng)中數(shù)據(jù)的抽象表示形式。
總結來說:
Controller接收用戶的請求,并將請求轉(zhuǎn)發(fā)給Service層處理。Service層處理業(yè)務邏輯,并通過Mapper層與數(shù)據(jù)庫進行交互。Mapper層負責執(zhí)行SQL語句,與數(shù)據(jù)庫打交道,獲取或更新數(shù)據(jù)。- 實體層定義了數(shù)據(jù)的基本結構,是系統(tǒng)中數(shù)據(jù)的抽象表示。
整個流程就像一個餐廳的工作流程一樣:顧客(前端用戶)下單(發(fā)送請求),服務員(Controller)將訂單交給廚師(Service),廚師準備食材(從數(shù)據(jù)庫獲取數(shù)據(jù)),并讓廚房工作人員(Mapper)烹飪菜品(執(zhí)行數(shù)據(jù)庫操作),最后將菜品送到顧客手中(返回響應給前端用戶)。
一、Model 數(shù)據(jù)庫實體層
model層也就是數(shù)據(jù)庫實體層,也被稱為entity層,Bean,pojo 或 po
一般數(shù)據(jù)庫一張表對應一個實體類,類屬性同表字段 一 一對應。
Model層是被封裝起來的,Service層和DAO層只負責訪問和操作Model層,不直接與Model層交互。
Model層也可以包括其他的數(shù)據(jù)模型、數(shù)據(jù)庫或文件系統(tǒng)等,以完成業(yè)務數(shù)據(jù)的存儲、訪問和操作。
model層就像是蛋糕的原材料,比如雞蛋、面粉、糖、牛奶等等。
是用來描述數(shù)據(jù)的,定義了數(shù)據(jù)的屬性和行為
比如一個User對象就可以包含用戶名、密碼、郵箱等屬性,也可以擁有登錄、注冊等行為。


實體層中一般會自動生成Getter、Setter、to String方法和構造方法
具體怎么生成放在了文章下面
二、Controller 業(yè)務控制層
controller層的功能為請求和響應控制。它不允許直接操作數(shù)據(jù)庫
主要負責接收前端用戶請求,并將請求轉(zhuǎn)發(fā)給相應的Service層進行處理,處理Service層返回的結果,并將結果響應給前端。
- Controller層調(diào)用Service層,Service層調(diào)用DAO層,DAO層負責操作Model層,從而完成整個系統(tǒng)的業(yè)務與處理、數(shù)據(jù)訪問等功能
- Controller層也可對客戶端提交的數(shù)據(jù)進行驗證和校驗,保證數(shù)據(jù)的合法性和正確性。
- controller層是用來處理用戶請求的,通過它來控制和協(xié)調(diào)整個應用程序的運行流程,接受用戶輸入,調(diào)用相應的service層來處理業(yè)務邏輯,并將處理結果返回給客戶端。
比如可以通過UserController來處理和控制用戶請求,實現(xiàn)用戶登錄、注冊、修改信息等操作。
三、Service 業(yè)務邏輯層/服務層
所有的內(nèi)部的業(yè)務邏輯都會放在這里處理
Service層是整個系統(tǒng)的業(yè)務邏輯處理中心,負責對業(yè)務數(shù)據(jù)進行處理和計算,并將處理結果返回給Controller層。
此外,Service層也需要調(diào)用DAO層對數(shù)據(jù)進行訪問和操作,以完成業(yè)務邏輯處理。
通過規(guī)范對dao層提供的功能進行封裝和組裝,實現(xiàn)更加復雜的操作,比如可以實現(xiàn)對用戶進行注冊、登錄、修改信息等業(yè)務操作。
四、Dao 數(shù)據(jù)庫持久化層
dao層也被稱為mapper層,全稱是DataAccessObject數(shù)據(jù)訪問對象
DAO層是用來訪問數(shù)據(jù)庫的,負責執(zhí)行數(shù)據(jù)訪問和操作,包括對數(shù)據(jù)庫的訪問和操作、文件系統(tǒng)的存取等,就是和數(shù)據(jù)庫打交道的,與數(shù)據(jù)庫進行聯(lián)絡的一些任務都封裝在此,向數(shù)據(jù)庫發(fā)送 SQL語句,可以實現(xiàn)對數(shù)據(jù)庫的增刪改查操作
為Service層提供數(shù)據(jù)訪問的支持和服務。并隱藏了數(shù)據(jù)訪問的細節(jié),并提供了一組簡單易用的接口,方便Service層調(diào)用和使用。
DAO設計的總體規(guī)劃需要和設計的表,dao類一般也是和數(shù)據(jù)庫中的表對應,采用駝峰式命名:表名+Dao
五、View 視圖
- 運行時展示界面,給系統(tǒng)的用戶查看,也就是前端
- 視圖類要展示輸出語句
- 獲得輸入數(shù)據(jù)
它可以返回HTML頁面、JSON等數(shù)據(jù)格式,處理表單數(shù)據(jù),進行一些計算或數(shù)據(jù)庫查詢操作等等
擴展
一般的,一個Controller對應一個Service,一個Service對應一個Dao,一個Dao對應一個數(shù)據(jù)庫表,
當然根據(jù)項目或業(yè)務復雜程度,一個Controller可以調(diào)用多個Service,而一個Service也可以調(diào)用多個Dao,但是Controller層不允許互調(diào),Service層也不允許互調(diào),
就是AController不能直接調(diào)用BController
AService也不能直接去調(diào)用BService,遵循高內(nèi)聚低耦合原則
本篇文章部分內(nèi)容借鑒了其他博主的文章,但我忘了哪篇文章了,在此十分感謝那篇原創(chuàng)文章的博主
實體類中快速添加自動生成方法
新建實體類后要有四個步驟:
1、手寫私有屬性,與表中列對應
2、自動生成兩個構造方法
3、自動生成Getter、Setter方法
4、自動生成重寫toString方法
Eclipse中快速添加構造方法
有參和無參構造方法

Eclipse中快速添加Getter、Setter方法

Eclipse中快速添加to String方法

IDEA中快速添加構造方法
此處借用網(wǎng)上經(jīng)典動圖展示:

IDEA中快速添加Getter、Setter方法
此處借用網(wǎng)上經(jīng)典動圖展示:

IDEA中快速添加to String方法


總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring框架+jdbcTemplate實現(xiàn)增刪改查功能
這篇文章主要介紹了Spring框架+jdbcTemplate實現(xiàn)增刪改查功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
Spring?Security?Oauth2整合JWT的詳細步驟和核心配置
這篇文章主要介紹了Spring?Security?Oauth2整合JWT的詳細步驟和核心配置,包括依賴引入、JWT工具類、OAuth2和資源服務器配置以及SpringSecurity配置,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-11-11
基于Jenkins搭建.NET Core持續(xù)集成環(huán)境過程圖解
這篇文章主要介紹了基于Jenkins搭建.NET Core持續(xù)集成環(huán)境過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
詳解MyBatis resultType與resultMap中的幾種返回類型
本文主要介紹了MyBatis resultType與resultMap中的幾種返回類型,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09

