controller & service & dao之间的关系

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

文章目录


后端各层级之间关系

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

图很重要

先用更通俗易懂的方式来解释controller(控制器)、service(服务层)、mapper(数据访问层)以及实体层之间的关系。

想象一下你去一家餐厅吃饭的情景:

  1. Controller(控制器)

    • 相当于餐厅的服务员。服务员负责接收顾客的订单(比如你要点什么菜),然后将这些信息传递给厨师(相当于服务层),同时也负责将做好的菜肴送回到顾客的餐桌上。在软件开发中,controller主要负责接收用户的请求,并将这些请求转发给合适的业务逻辑处理层(service层)。
  2. Service(服务层)

    • 相当于餐厅的厨师。厨师负责根据服务员带来的订单制作菜品。在软件开发中,service层负责处理具体的业务逻辑,比如计算价格、处理复杂的业务流程等。service层会与数据库进行交互,但它不直接操作数据库,而是通过mapper层来进行。
  3. Mapper(数据访问层)

    • 相当于餐厅的厨房里专门负责烹饪的工作人员。这些工作人员根据厨师的要求,具体操作炉灶、冰箱等设备来完成菜品的制作。在软件开发中,mapper层负责与数据库进行交互,执行SQL语句,获取或更新数据。mapper通常与数据库表紧密对应,负责将Java对象转换为数据库中的记录,或将数据库中的记录转换为Java对象。
  4. 实体层(Entity Layer)

    • 相当于餐厅的食材。食材是构成菜品的基础。在软件开发中,实体层是指那些用来表示业务领域概念的对象,比如用户、订单等。实体层定义了数据的基本结构和属性,是系统中数据的抽象表示形式。

总结来说:

  • Controller接收用户的请求,并将请求转发给Service层处理。
  • Service层处理业务逻辑,并通过Mapper层与数据库进行交互。
  • Mapper层负责执行SQL语句,与数据库打交道,获取或更新数据。
  • 实体层定义了数据的基本结构,是系统中数据的抽象表示。

整个流程就像一个餐厅的工作流程一样:顾客(前端用户)下单(发送请求),服务员(Controller)将订单交给厨师(Service),厨师准备食材(从数据库获取数据),并让厨房工作人员(Mapper)烹饪菜品(执行数据库操作),最后将菜品送到顾客手中(返回响应给前端用户)。

一、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来处理和控制用户请求,实现用户登录、注册、修改信息等操作。

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

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

Service层是整个系统的业务逻辑处理中心,负责对业务数据进行处理和计算,并将处理结果返回给Controller层。

此外,Service层也需要调用DAO层对数据进行访问和操作,以完成业务逻辑处理。

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

四、Dao 数据库持久化层

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

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

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

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方法

相关推荐
二哈喇子!3 小时前
Java Web项目怎么创建 & 没有出现web.xml的解决方法
java·web·web.xml
一起养小猫3 小时前
LeetCode100天Day13-移除元素与多数元素
java·算法·leetcode
小北方城市网3 小时前
Spring Security 认证授权实战(JWT 版):从基础配置到权限精细化控制
java·运维·python·微服务·排序算法·数据库架构
青槿吖3 小时前
Java 集合操作:HashSet、LinkedHashSet 和 TreeSet
java·开发语言·jvm
刘联其3 小时前
Prism Region注册父子区域 子区域初始化导航没生效解决
java·开发语言
ghgxm5203 小时前
FastApi_03_中间件 VS 依赖注入
java·中间件·fastapi
TT哇3 小时前
IDEA压缩空的软件包
java·ide·intellij-idea
Vv1997_3 小时前
基于java.awt 绘制 自定义图片算式验证码
java·开发语言·python
独自破碎E3 小时前
推送错了仓库的解决办法
java·开发语言