controller & service & dao之间的关系及解读

 更新时间:2026年04月10日 08:43:41   作者:二哈喇子!  
本文介绍了软件开发中Controller、Service、Mapper和Entity层的概念及其关系,类比于餐厅工作流程解释各层职责,Entity层定义数据结构,Service层处理业务逻辑,Mapper层与数据库交互,Controller层接收用户请求,同时提供了Eclipse和IDEA中自动生成方法的快捷操作说明

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

后端各层级之间关系

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

图很重要

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

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

Controller(控制器)

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

Service(服务层)

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

Mapper(数据访问层)

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

实体层(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等数据格式,处理表单数据,进行一些计算或数据库查询操作等等

扩展

一般的,一个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中快速添加to String方法

IDEA中快速添加构造方法

此处借用网上经典动图展示:

IDEA中快速添加Getter、Setter方法

此处借用网上经典动图展示:

IDEA中快速添加to String方法

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java小程序赛马游戏实现过程详解

    Java小程序赛马游戏实现过程详解

    这篇文章主要介绍了Java小程序赛马游戏实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 教你如何监控 Java 线程池运行状态的操作(必看)

    教你如何监控 Java 线程池运行状态的操作(必看)

    这篇文章主要介绍了教你如何监控 Java 线程池运行状态的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringMVC bean实现加载控制方法详解

    SpringMVC bean实现加载控制方法详解

    SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发
    2022-08-08
  • idea同时编辑多行问题-win&mac都支持

    idea同时编辑多行问题-win&mac都支持

    这篇文章主要介绍了idea同时编辑多行问题-win&mac都支持,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Spring Boot Logback配置日志过程解析

    Spring Boot Logback配置日志过程解析

    这篇文章主要介绍了Spring Boot Logback配置日志过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Activiti7通过代码动态生成工作流实现详解

    Activiti7通过代码动态生成工作流实现详解

    这篇文章主要为大家介绍了Activiti7通过代码动态生成工作流实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • SpringAI流式输出的底层实现原理解析

    SpringAI流式输出的底层实现原理解析

    在 Spring AI 中,流式输出(Streaming Output)是一种逐步返回 AI 模型生成结果的技术,允许服务器将响应内容分批次实时传输给客户端,而不是等待全部内容生成完毕后再一次性返回,这篇文章主要介绍了SpringAI流式输出的底层实现,需要的朋友可以参考下
    2025-04-04
  • 详解Java实现多种方式的http数据抓取

    详解Java实现多种方式的http数据抓取

    本篇文章主要介绍了Java实现多种方式的http数据抓取,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
    2016-12-12
  • SpringCloud Zuul实现动态路由

    SpringCloud Zuul实现动态路由

    这篇文章主要介绍了SpringCloud Zuul实现动态路由,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 基于java中正则操作的方法总结

    基于java中正则操作的方法总结

    本篇文章介绍了,在java中正则操作的方法总结。需要的朋友参考下
    2013-05-05

最新评论