最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

controller?&?service?&?dao之間的關(guān)系及解讀

 更新時(shí)間:2026年04月10日 08:43:41   作者:二哈喇子!  
本文介紹了軟件開發(fā)中Controller、Service、Mapper和Entity層的概念及其關(guān)系,類比于餐廳工作流程解釋各層職責(zé),Entity層定義數(shù)據(jù)結(jié)構(gòu),Service層處理業(yè)務(wù)邏輯,Mapper層與數(shù)據(jù)庫交互,Controller層接收用戶請(qǐng)求,同時(shí)提供了Eclipse和IDEA中自動(dòng)生成方法的快捷操作說明

不要把所有代碼寫在同一個(gè)類里,要遵循單一原則,一個(gè)類只干一件事

后端各層級(jí)之間關(guān)系

提示:這里可以添加本文要記錄的大概內(nèi)容:

圖很重要

先用更通俗易懂的方式來解釋controller(控制器)、service(服務(wù)層)、mapper(數(shù)據(jù)訪問層)以及實(shí)體層之間的關(guān)系。

想象一下你去一家餐廳吃飯的情景:

Controller(控制器)

  • 相當(dāng)于餐廳的服務(wù)員。服務(wù)員負(fù)責(zé)接收顧客的訂單(比如你要點(diǎn)什么菜),然后將這些信息傳遞給廚師(相當(dāng)于服務(wù)層),同時(shí)也負(fù)責(zé)將做好的菜肴送回到顧客的餐桌上。在軟件開發(fā)中,controller主要負(fù)責(zé)接收用戶的請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)發(fā)給合適的業(yè)務(wù)邏輯處理層(service層)。

Service(服務(wù)層)

  • 相當(dāng)于餐廳的廚師。廚師負(fù)責(zé)根據(jù)服務(wù)員帶來的訂單制作菜品。在軟件開發(fā)中,service層負(fù)責(zé)處理具體的業(yè)務(wù)邏輯,比如計(jì)算價(jià)格、處理復(fù)雜的業(yè)務(wù)流程等。service層會(huì)與數(shù)據(jù)庫進(jìn)行交互,但它不直接操作數(shù)據(jù)庫,而是通過mapper層來進(jìn)行。

Mapper(數(shù)據(jù)訪問層)

  • 相當(dāng)于餐廳的廚房里專門負(fù)責(zé)烹飪的工作人員。這些工作人員根據(jù)廚師的要求,具體操作爐灶、冰箱等設(shè)備來完成菜品的制作。在軟件開發(fā)中,mapper層負(fù)責(zé)與數(shù)據(jù)庫進(jìn)行交互,執(zhí)行SQL語句,獲取或更新數(shù)據(jù)。mapper通常與數(shù)據(jù)庫表緊密對(duì)應(yīng),負(fù)責(zé)將Java對(duì)象轉(zhuǎn)換為數(shù)據(jù)庫中的記錄,或?qū)?shù)據(jù)庫中的記錄轉(zhuǎn)換為Java對(duì)象。

實(shí)體層(Entity Layer)

  • 相當(dāng)于餐廳的食材。食材是構(gòu)成菜品的基礎(chǔ)。在軟件開發(fā)中,實(shí)體層是指那些用來表示業(yè)務(wù)領(lǐng)域概念的對(duì)象,比如用戶、訂單等。實(shí)體層定義了數(shù)據(jù)的基本結(jié)構(gòu)和屬性,是系統(tǒng)中數(shù)據(jù)的抽象表示形式。

總結(jié)來說:

  • Controller接收用戶的請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給Service層處理。
  • Service層處理業(yè)務(wù)邏輯,并通過Mapper層與數(shù)據(jù)庫進(jìn)行交互。
  • Mapper層負(fù)責(zé)執(zhí)行SQL語句,與數(shù)據(jù)庫打交道,獲取或更新數(shù)據(jù)。
  • 實(shí)體層定義了數(shù)據(jù)的基本結(jié)構(gòu),是系統(tǒng)中數(shù)據(jù)的抽象表示。

整個(gè)流程就像一個(gè)餐廳的工作流程一樣:顧客(前端用戶)下單(發(fā)送請(qǐng)求),服務(wù)員(Controller)將訂單交給廚師(Service),廚師準(zhǔn)備食材(從數(shù)據(jù)庫獲取數(shù)據(jù)),并讓廚房工作人員(Mapper)烹飪菜品(執(zhí)行數(shù)據(jù)庫操作),最后將菜品送到顧客手中(返回響應(yīng)給前端用戶)。

一、Model 數(shù)據(jù)庫實(shí)體層

model層也就是數(shù)據(jù)庫實(shí)體層,也被稱為entity層,Bean,pojo 或 po

一般數(shù)據(jù)庫一張表對(duì)應(yīng)一個(gè)實(shí)體類,類屬性同表字段 一 一對(duì)應(yīng)。

Model層是被封裝起來的,Service層和DAO層只負(fù)責(zé)訪問和操作Model層,不直接與Model層交互。

Model層也可以包括其他的數(shù)據(jù)模型、數(shù)據(jù)庫或文件系統(tǒng)等,以完成業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)、訪問和操作。

model層就像是蛋糕的原材料,比如雞蛋、面粉、糖、牛奶等等。

是用來描述數(shù)據(jù)的,定義了數(shù)據(jù)的屬性和行為

比如一個(gè)User對(duì)象就可以包含用戶名、密碼、郵箱等屬性,也可以擁有登錄、注冊(cè)等行為。

實(shí)體層中一般會(huì)自動(dòng)生成Getter、Setter、to String方法和構(gòu)造方法

具體怎么生成放在了文章下面

二、Controller 業(yè)務(wù)控制層

controller層的功能為請(qǐng)求和響應(yīng)控制。它不允許直接操作數(shù)據(jù)庫

主要負(fù)責(zé)接收前端用戶請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的Service層進(jìn)行處理,處理Service層返回的結(jié)果,并將結(jié)果響應(yīng)給前端。

  • Controller層調(diào)用Service層,Service層調(diào)用DAO層,DAO層負(fù)責(zé)操作Model層,從而完成整個(gè)系統(tǒng)的業(yè)務(wù)與處理、數(shù)據(jù)訪問等功能
  • Controller層也可對(duì)客戶端提交的數(shù)據(jù)進(jìn)行驗(yàn)證和校驗(yàn),保證數(shù)據(jù)的合法性和正確性。
  • controller層是用來處理用戶請(qǐng)求的,通過它來控制和協(xié)調(diào)整個(gè)應(yīng)用程序的運(yùn)行流程,接受用戶輸入,調(diào)用相應(yīng)的service層來處理業(yè)務(wù)邏輯,并將處理結(jié)果返回給客戶端。

比如可以通過UserController來處理和控制用戶請(qǐng)求,實(shí)現(xiàn)用戶登錄、注冊(cè)、修改信息等操作。

三、Service 業(yè)務(wù)邏輯層/服務(wù)層

所有的內(nèi)部的業(yè)務(wù)邏輯都會(huì)放在這里處理

Service層是整個(gè)系統(tǒng)的業(yè)務(wù)邏輯處理中心,負(fù)責(zé)對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行處理和計(jì)算,并將處理結(jié)果返回給Controller層。

此外,Service層也需要調(diào)用DAO層對(duì)數(shù)據(jù)進(jìn)行訪問和操作,以完成業(yè)務(wù)邏輯處理。

通過規(guī)范對(duì)dao層提供的功能進(jìn)行封裝和組裝,實(shí)現(xiàn)更加復(fù)雜的操作,比如可以實(shí)現(xiàn)對(duì)用戶進(jìn)行注冊(cè)、登錄、修改信息等業(yè)務(wù)操作。

四、Dao 數(shù)據(jù)庫持久化層

dao層也被稱為mapper層,全稱是DataAccessObject數(shù)據(jù)訪問對(duì)象

DAO層是用來訪問數(shù)據(jù)庫的,負(fù)責(zé)執(zhí)行數(shù)據(jù)訪問和操作,包括對(duì)數(shù)據(jù)庫的訪問和操作、文件系統(tǒng)的存取等,就是和數(shù)據(jù)庫打交道的,與數(shù)據(jù)庫進(jìn)行聯(lián)絡(luò)的一些任務(wù)都封裝在此,向數(shù)據(jù)庫發(fā)送 SQL語句,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的增刪改查操作

為Service層提供數(shù)據(jù)訪問的支持和服務(wù)。并隱藏了數(shù)據(jù)訪問的細(xì)節(jié),并提供了一組簡(jiǎn)單易用的接口,方便Service層調(diào)用和使用。

DAO設(shè)計(jì)的總體規(guī)劃需要和設(shè)計(jì)的表,dao類一般也是和數(shù)據(jù)庫中的表對(duì)應(yīng),采用駝峰式命名:表名+Dao

五、View 視圖

  • 運(yùn)行時(shí)展示界面,給系統(tǒng)的用戶查看,也就是前端
  • 視圖類要展示輸出語句
  • 獲得輸入數(shù)據(jù)

它可以返回HTML頁面、JSON等數(shù)據(jù)格式,處理表單數(shù)據(jù),進(jìn)行一些計(jì)算或數(shù)據(jù)庫查詢操作等等

擴(kuò)展

一般的,一個(gè)Controller對(duì)應(yīng)一個(gè)Service,一個(gè)Service對(duì)應(yīng)一個(gè)Dao,一個(gè)Dao對(duì)應(yīng)一個(gè)數(shù)據(jù)庫表,

當(dāng)然根據(jù)項(xiàng)目或業(yè)務(wù)復(fù)雜程度,一個(gè)Controller可以調(diào)用多個(gè)Service,而一個(gè)Service也可以調(diào)用多個(gè)Dao,但是Controller層不允許互調(diào),Service層也不允許互調(diào),

就是AController不能直接調(diào)用BController

AService也不能直接去調(diào)用BService,遵循高內(nèi)聚低耦合原則

本篇文章部分內(nèi)容借鑒了其他博主的文章,但我忘了哪篇文章了,在此十分感謝那篇原創(chuàng)文章的博主

實(shí)體類中快速添加自動(dòng)生成方法

新建實(shí)體類后要有四個(gè)步驟:

1、手寫私有屬性,與表中列對(duì)應(yīng)

2、自動(dòng)生成兩個(gè)構(gòu)造方法

3、自動(dòng)生成Getter、Setter方法

4、自動(dòng)生成重寫toString方法

Eclipse中快速添加構(gòu)造方法

有參和無參構(gòu)造方法

Eclipse中快速添加Getter、Setter方法

Eclipse中快速添加to String方法

IDEA中快速添加構(gòu)造方法

此處借用網(wǎng)上經(jīng)典動(dòng)圖展示:

IDEA中快速添加Getter、Setter方法

此處借用網(wǎng)上經(jīng)典動(dòng)圖展示:

IDEA中快速添加to String方法

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring框架+jdbcTemplate實(shí)現(xiàn)增刪改查功能

    Spring框架+jdbcTemplate實(shí)現(xiàn)增刪改查功能

    這篇文章主要介紹了Spring框架+jdbcTemplate實(shí)現(xiàn)增刪改查功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 關(guān)于Http持久連接和HttpClient連接池的深入理解

    關(guān)于Http持久連接和HttpClient連接池的深入理解

    眾所周知,httpclient是java開發(fā)中非常常見的一種訪問網(wǎng)絡(luò)資源的方式了,下面這篇文章主要給大家介紹了關(guān)于Http持久連接和HttpClient連接池的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • Spring?Security?Oauth2整合JWT的詳細(xì)步驟和核心配置

    Spring?Security?Oauth2整合JWT的詳細(xì)步驟和核心配置

    這篇文章主要介紹了Spring?Security?Oauth2整合JWT的詳細(xì)步驟和核心配置,包括依賴引入、JWT工具類、OAuth2和資源服務(wù)器配置以及SpringSecurity配置,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • 基于Jenkins搭建.NET Core持續(xù)集成環(huán)境過程圖解

    基于Jenkins搭建.NET Core持續(xù)集成環(huán)境過程圖解

    這篇文章主要介紹了基于Jenkins搭建.NET Core持續(xù)集成環(huán)境過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java 非阻塞I/O使用方法

    Java 非阻塞I/O使用方法

    這篇文章主要介紹了Java 非阻塞I/O使用方法,文中涉及非阻塞I/O的簡(jiǎn)介,同時(shí)向大家展示了利用非阻塞I/O實(shí)現(xiàn)客戶端的方法,需要的朋友可以參考下。
    2017-09-09
  • Springboot3自定義starter業(yè)務(wù)代碼

    Springboot3自定義starter業(yè)務(wù)代碼

    在Spring?Boot中,starter是一種特殊的依賴,它可以幫助開發(fā)人員快速引入和配置某個(gè)特定的功能模塊,這篇文章給大家介紹Springboot3自定義starter業(yè)務(wù)代碼的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2025-05-05
  • 詳解MyBatis resultType與resultMap中的幾種返回類型

    詳解MyBatis resultType與resultMap中的幾種返回類型

    本文主要介紹了MyBatis resultType與resultMap中的幾種返回類型,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • java 淺析代碼塊的由來及用法

    java 淺析代碼塊的由來及用法

    所謂代碼塊是指用"{}"括起來的一段代碼,根據(jù)其位置和聲明的不同,可以分為普通代碼塊、構(gòu)造塊、靜態(tài)塊、和同步代碼塊。如果在代碼塊前加上 synchronized關(guān)鍵字,則此代碼塊就成為同步代碼塊
    2021-10-10
  • Java設(shè)計(jì)模式之java狀態(tài)模式詳解

    Java設(shè)計(jì)模式之java狀態(tài)模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之狀態(tài)模式定義與用法,結(jié)合具體實(shí)例形式詳細(xì)分析了Java狀態(tài)模式的概念、原理、定義及相關(guān)操作技巧,需要的朋友可以參考下
    2021-09-09
  • Java連接MySQL數(shù)據(jù)庫實(shí)例

    Java連接MySQL數(shù)據(jù)庫實(shí)例

    這篇文章介紹了Java連接MySQL數(shù)據(jù)庫實(shí)例的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

宜良县| 西乡县| 青川县| 会泽县| 元谋县| 博客| 安义县| 固始县| 西华县| 南召县| 玉环县| 佛教| 无锡市| 会同县| 海林市| 招远市| 岢岚县| 梓潼县| 建湖县| 旬阳县| 阜平县| 武冈市| 阳曲县| 瓮安县| 北宁市| 牙克石市| 凤凰县| 五大连池市| 扶余县| 自治县| 开原市| 白玉县| 德安县| 泸定县| 垣曲县| 湘潭县| 吉木萨尔县| 水富县| 永宁县| 深州市| 建湖县|