DAO层和Service层的究极理解–这波我在大气层

DAO层和Service层的究极理解–这波我在大气层说实话 学了挺久的 MVC 架构了 到现在也一直没整明白 Service 层和 DAO 层是干什么用的 这波是 Dao 成和 Service 层的究极理解 相信大家看了之后会有所感悟

  • 注重版权,转载请注明原作者和原文链接
    作者:码农BookSea
    原文链接:https://blog.csdn.net/bookssea/article/details/

在这里插入图片描述


说实话,学了挺久的MVC架构了,到现在也一直没整明白Service层DAO层是干什么用的,哪怕我目前已经学到了Spring Boot,但回过头来看这些基础知识,依然是不明就里。
感觉Service层并没有做什么实际的工作,只是接受了Servlet,同时又调用了Dao。它本身并没有什么实际意义的代码,感觉并没有什么用处,那为什么还写?这不是增加代码量吗?
还有DAO层是做什么的?为什么用Service层来调用DAO层?

在这里插入图片描述

网上的相关文章我也看了挺多,但大都讲的不是很通俗易懂,看了之后依旧还是很迷糊。
问了身边的一些大佬同学,也去咨询了下老师,不断求知
总算整明白了,我把我的心得写下来跟大家做个分享。


先简单来讲下Dao层,和Service层的概念:

Service是业务层,Dao是数据访问层,这样的分层是基于MVC架构来说的。

Dao层:全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查

Service层:被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种操作封装起来。


简单来说就是Dao层是底层,具体到某一张表的增删查改,可以理解为有多少张表就有多少个Dao层,而Service成可以理解为是Dao层的 “上司”,通过Service层来控制Dao层。

一个Service层控制一个或者多个Dao层。

举个栗子:Service层好比是老大,手下跟着一大帮小弟 (Dao层), 老大不用亲自出马,有事情吩咐小弟去干就行,老大只管下命令,小弟只管做事跑腿。
在这里插入图片描述

而为什么我们要通过Service层去调用Dao层,这样做的最大好处就是:

解耦

说的通俗点就是降低代码之间的耦合,尽量让代码之间不要有太大的联系。

好比主板上内存坏了,我换内存就行,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存就都可以插上这个接口使用。
在这里插入图片描述

这样当某部分代码出错或者需要修改时,其他代码就不需要修改或者变更,好处就在这里。

而 Dao 层,只负责接收最终的 sql 语句,具体到某一张表的增删查改。

再用上面的老大和小弟的例子,小弟 (Dao层) 脑子一般不太灵光,不具备什么决策能力。能当上老大脑瓜都比较好使,命令由老大去下达,累活脏活交给小弟去干 (增删查改),底下一大帮子小弟听老大指挥,老大叫谁干什么就干什么。最后完成老大布置的任务。

Service层也不是就非有不可,对于极小的项目而言,加了Service层,反而增加了代码量,而且Dao层中已经预见了可能出现的情况,并进行了相应的扩展。那么,此时就不需要了。

虽然小弟脑子可能不太好使,但是有些事,你没脑子都能完成啊,这时就不需要老大出马了,不然一点屁大点的事都要麻烦老大,老大也太掉价了吧。

但是存在即合理,存在Service层肯定有其原因,通过Service层去调用Dao层,不仅可以解耦合,而且可以增加代码的拓展性。


以上仅是个人的一些当前阶段的理解,如果我有哪里写的不对,欢迎评论区留言进行指正。

白嫖不好,创作不易。各位的点赞就是我创作的最大动力,我们下篇文章见!
老铁,如果有收获,请点个免费的赞鼓励一下博主

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200073.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午11:35
下一篇 2026年3月20日 上午11:35


相关推荐

  • php网页运行不出来_phpstudy启动后就停止

    php网页运行不出来_phpstudy启动后就停止phpstudy中的nginx无法启动,报错:10049最近使用phpstudy的nginx+php环境编写laravel项目,老是报错,nginx无法启动,闪了一下,又变成了红色。下面整理一下解决方案:1.查看nginx的配置文件,一般是80端口,我这里根据不同项目修改了,所以我的是8093:2.win+R键,输入cmd,输入端口查询命令netstat-aon|findstr80,查看响应端口是否被占用,这里举例80端口;3.可以看到占用80端口程序的pid是3364,然后输入命令task

    2026年4月16日
    5
  • NoSQL中的行存储与列存储

    NoSQL中的行存储与列存储在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储。在这里,我不讨论这些软件的技术和优缺点,只围绕机械磁盘的物理特质,分析行存储和列存储的存储特点,以及由此产生的一些问题和解决办法。  一.结构布局  行存储数据排列  列存储数据排列  表格的灰色背景部分表示行列结构,白色背景部分表示数据的

    2022年7月14日
    13
  • 跨平台应用开发进阶(十五) :uni-app 自定义 showToast并实现下载进度条

    跨平台应用开发进阶(十五) :uni-app 自定义 showToast并实现下载进度条大话设计模式(四)单例模式的优与劣前言首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了,比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个,这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,即在整个的打印过程中我只有一个打印程序的实例。简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,

    2022年6月20日
    260
  • mathtype大括号三个公式_latex大括号左对齐

    mathtype大括号三个公式_latex大括号左对齐数学方程输入对于很多理工科朋友来说是一件让人头疼的事情。不仅是数学方程本身就纷繁复杂花样百出,各种输入语法更是劝退无数人。然而很多看似复杂的东西其实并非如想象中的难,抓住本质即可快速入门。今天和大家分享下如何快速入门LaTeX,在XMind2020中轻松输入方程。01LaTeX是什么LaTeX是一种基于ΤΕΧ的排版系统,具有方便而强大的数学公式排版能力。日常中大家常见的高印刷质量的…

    2022年10月10日
    4
  • pytest重试_qq插件加载失败如何处理

    pytest重试_qq插件加载失败如何处理安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

    2022年7月30日
    8
  • linux 没有root权限的用户安装GCC[通俗易懂]

    linux 没有root权限的用户安装GCC[通俗易懂]在Linux下,如果有root权限的话,使用sudoaptinstall就可以很方便的安装软件,而且同时也会帮你把一些依赖文件也给编译安装好。但是如果不是用的自己的机器,一般情况下是没有root权限的。所以就需要自己动手下载tar文件,解压安装。在安装中遇到的最大的问题是依赖的问题。手动下载编译GCC,首先下载tar文件,可以在这里下载https://ftp.gnu.org/gnu/gc…

    2022年5月26日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号