controller & service & dao之间的关系_controller层,service层,dao层调用关系-程序员宅基地

技术标签: java  # SpringBoot 框架知识  Java、面向对象  intellij-idea  eclipse  

不要把所有代码写在同一个类里,要遵循单一原则,一个类只干一件事


前言

提示:这里可以添加本文要记录的大概内容:

我在上一篇文中说过代码编写流程
基于SSM框架的网上商城购物系统的设计与实现(开源项目——实现增删改查功能整体流程超详细)
1、画页面,编写 A.jsp
2、编写客户请求地址,发起客户请求,编写 B.jsp
3、编写控制层代码 (xxxController.java)
4、编写业务层代码(xxxService.java)
5、编写数据持久层代码(xxxDao.java 和 xxxDao.xml)
————————————————————————————————————————
今天再来说一下他们之间的关系

提示:可以把这个关系比喻成一个制作蛋糕的过程

在这里插入图片描述

一、Model 数据库实体层

model层也就是数据库实体层,也被称为entity层,Bean,pojo 或 po
一般数据库一张表对应一个实体类,类属性同表字段 一 一对应。

Model层是被封装起来的,Service层和DAO层只负责访问和操作Model层,不直接与Model层交互。
Model层也可以包括其他的数据模型、数据库或文件系统等,以完成业务数据的存储、访问和操作。

model层就像是蛋糕的原材料,比如鸡蛋、面粉、糖、牛奶等等。
是用来描述数据的,定义了数据的属性和行为
比如一个User对象就可以包含用户名、密码、邮箱等属性,也可以拥有登录、注册等行为。

在这里插入图片描述
在这里插入图片描述

实体层中一般会自动生成Getter、Setter、to String方法和构造方法
具体怎么生成放在了文章下面

二、Controller 业务控制层

controller层的功能为请求和响应控制。它不允许直接操作数据库
主要负责接收前端用户请求,并将请求转发给相应的Service层进行处理,处理Service层返回的结果,并将结果响应给前端。

Controller层调用Service层,Service层调用DAO层,DAO层负责操作Model层,从而完成整个系统的业务与处理、数据访问等功能

Controller层也可对客户端提交的数据进行验证和校验,保证数据的合法性和正确性。

controller层是用来处理用户请求的,通过它来控制和协调整个应用程序的运行流程,接受用户输入,调用相应的service层来处理业务逻辑,并将处理结果返回给客户端。
比如可以通过UserController来处理和控制用户请求,实现用户登录、注册、修改信息等操作。

controller层就像是蛋糕店的服务员,它接收客户的需求和请求,并且将它们传递给烘焙师进行处理。

三、Service 业务逻辑层/服务层

所有的内部的业务逻辑都会放在这里处理

Service层是整个系统的业务逻辑处理中心,负责对业务数据进行处理和计算,并将处理结果返回给Controller层。
此外,Service层也需要调用DAO层对数据进行访问和操作,以完成业务逻辑处理。

通过规范对dao层提供的功能进行封装和组装,实现更加复杂的操作,比如可以实现对用户进行注册、登录、修改信息等业务操作。

service层就像是有经验的烘焙师,它负责根据客户的需求和要求,选择合适的原材料和工具,并且将它们组合起来制作出好吃的蛋糕。

四、Dao 数据库持久化层

dao层也被称为mapper层,全称是DataAccessObject数据访问对象

DAO层是用来访问数据库的,负责执行数据访问和操作,包括对数据库的访问和操作、文件系统的存取等,就是和数据库打交道的,与数据库进行联络的一些任务都封装在此,向数据库发送 SQL语句,可以实现对数据库的增删改查操作

为Service层提供数据访问的支持和服务。并隐藏了数据访问的细节,并提供了一组简单易用的接口,方便Service层调用和使用。

DAO设计的总体规划需要和设计的表,dao类一般也是和数据库中的表对应,采用驼峰式命名:表名+Dao

dao层就像是把原材料加工成蛋糕的工具和设备,比如搅拌器、烤箱、模具等。

五、View 视图

运行时展示界面,给系统的用户查看,也就是前端
视图类要展示输出语句
获得输入数据

它可以返回HTML页面、JSON等数据格式,处理表单数据,进行一些计算或数据库查询操作等等


扩展

JDBC与数据库连接代码
一般的,一个Controller对应一个Service,一个Service对应一个Dao,一个Dao对应一个数据库表,
当然根据项目或业务复杂程度,一个Controller可以调用多个Service,而一个Service也可以调用多个Dao,但是Controller层不允许互调,Service层也不允许互调,
就是AController不能直接调用BController
AService也不能直接去调用BService,遵循高内聚低耦合原则

本篇文章部分内容借鉴了其他博主的文章,但我忘了哪篇文章了,在此十分感谢那篇原创文章的博主


实体类中快速添加自动生成方法

新建实体类后要有四个步骤:

1、手写私有属性,与表中列对应
2、自动生成两个构造方法
3、自动生成Getter、Setter方法
4、自动生成重写toString方法

Eclipse中快速添加构造方法

有参和无参构造方法
在这里插入图片描述

Eclipse中快速添加Getter、Setter方法

Eclipse 快捷键|菜鸟教程
在这里插入图片描述

Eclipse中快速添加to String方法

在这里插入图片描述


IDEA中快速添加构造方法

此处借用网上经典动图展示:
请添加图片描述

IDEA中快速添加Getter、Setter方法

此处借用网上经典动图展示:
请添加图片描述

IDEA中快速添加to String方法

在这里插入图片描述在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/rej177/article/details/125457432

智能推荐

python实现mqtt_python mqtt 客户端的实现代码实例-程序员宅基地

文章浏览阅读492次。这篇文章主要介绍了python mqtt 客户端代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下安装paho-mqttpip install paho-mqtt -i http://pypi.douban.com/simple --trusted-host pypi.douban.compython消息收发实现import paho.mqt..._python实现mqtt

文件夹权限问题和linux下搭建FTP服务器_linux 文件夹权限 影响ftp listfles-程序员宅基地

文章浏览阅读2.6w次。文件夹权限问题Linux、Fedora、Ubuntu修改文件、文件夹权限的方法差不多。很多人开始接触Linux时都很头痛Linux的文件权限问题。这里告诉大家如何修改Linux文件-文件夹权限。以主文件夹下的一个名为cc的文件夹为例。 下面一步一步介绍如何修改权限: 1.打开终端。输入su(没 Linux、Fedora、Ubuntu修改文件、文件夹权限的方法差不多。很多人开始接触Lin_linux 文件夹权限 影响ftp listfles

JavaScript调用Python程序_javascript 调用python-程序员宅基地

文章浏览阅读186次。JavaScript调用Python程序_javascript 调用python

这个为生信学习打造的开源Bash教程真香!!(目录更新)!-程序员宅基地

文章浏览阅读300次。生物信息学习的正确姿势NGS系列文章包括NGS基础、在线绘图、转录组分析(Nature重磅综述|关于RNA-seq你想知道的全在这)、ChIP-seq分析(ChIP-seq基本分析流..._bash教程 国外

oracle详解-程序员宅基地

文章浏览阅读4.3k次,点赞11次,收藏65次。首先看张图:对于一个数据库系统来说,假设这个系统没有运行,我们所能看到的和这个数据库相关的无非就是几个基于操作系统的物理文件,这是从静态的角度来看,如果从动态的角度来看呢,也就是说这个数据库系统运行起来了,能够对外提供服务了,那就意外着数据库系统启动了自己的一个实例,综合以上2个角度,Oracle如何定义上述描述呢?我们来引入第一个概念,Oracle服务器,所谓Oracle服务器是一个数据库管理系统,它包括一个Oracle实例(动态)和一个Oracle数据库(静态)。Oracle实例是一个运行的概念(_oracle

Cadence学习记录_layout如何提取参数-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏14次。基于模拟集成电路仿真软件cadence零基础入门的一点学习记录_layout如何提取参数

随便推点

求助spyder闪退问题_活动代码页936spyder-程序员宅基地

文章浏览阅读5.6k次,点赞6次,收藏4次。背景:windows11+anaconda3+spyder5.1.5今天给笔记本重装系统,想尝鲜直接装了win11,然后下载了最新的anaconda,自己创了环境,装了最新的spyder,第一次是在anaconda nagivator里面下载的,launch之后会自动弹出来一个CMD窗口,显示“活动代码页:936” 。spyder 虽然可以打开,但是如果关掉这个cmd窗口,spyder会闪退。然后卸载掉spyder之后尝试从anaconda promot 里面重新安装spyder ,lau._活动代码页936spyder

SublimeText3 插件开发记录 --- 划词翻译_sublime text 翻译-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏10次。最近正研究怎么使用SublimeText3开发Python,然而对Python英文文档的阅读是一个比较头疼的问题,在AndroidStudio中有自动翻译插件ECTranslation,能方便的翻译单词和句子。因此想仿照ECTranslation,自己写一个翻译插件,正好也能加深对Python的印象。(在SublimeText3中,似乎没有特别好用的划词翻译插件)开发ST3的插件,网上只有简单的入门_sublime text 翻译

c语言struct的作用和用法,c语言struct用法详解-程序员宅基地

文章浏览阅读8.5k次,点赞4次,收藏19次。c语言struct用法详解在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct 结构体名{结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:struct stu{char *name; //姓名int num; //..._c语言struct的作用和用法

java爬虫之登录到教务系统抓取成绩_java实现从学校教务网上爬取数据(-程序员宅基地

文章浏览阅读2.2k次。最近使用java写了个爬虫,可能我对java比较熟悉,所以相对于python来说,我觉得用java写更得心应手些。我采用的是java的jsoup,以及解析用到的json先放上学校教务系统的url http://222.200.98.147首先可以看到,这里是需要验证码输入的,所以我使用了以下的思路:第一步,先访问验证码所在的url,把图片下载到本地,然后保存cookie_java实现从学校教务网上爬取数据(

[ERROR] Can't find error-message file '/data/mysql/share/errmsg.sys'. Check error-message file locat...-程序员宅基地

文章浏览阅读5.6k次。1. MySQL5.7.21启动时报错:[ERROR] Can't find error-message file '/data/mysql/3307/share/errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive.2. 登录MySQL查看系统全局参数:..._can't find error-message file '/data/mysql/share/errmsg.sys'. check error-me

51单片机入门——数字时钟_51单片机 时钟-程序员宅基地

文章浏览阅读2.5w次,点赞58次,收藏419次。文章目录1. 前言1.1. 设计要求2. 硬件原理2.1. 时钟信号(晶振)2.2. 按键开关2.3. 数码管显示3. 原理图3.1. 仿真原理图3.2. AD原理图3.3. PCB图4. 软件设计4.1. 初版代码(无年月日)4.2. 终版代码5. 元器件清单5.1. 仿真软件5.2. 实物1. 前言在此之前我们已经学习了单片机的定时器、中断、数码管。这篇文章主要讲述如何用上述的知识自己制作一个基于51单片机的数字时钟。1.1. 设计要求(1)主电路由秒信号发生器、“时、分、秒”计数器_51单片机 时钟