三层架构(Controller-Service-DAO)模式中的controller 和 dao/mapper的通俗理解

如果把 Web 应用比作一家餐厅,它们的分工如下:

1. Controller(控制器层):餐厅的"迎宾员/点餐员"

  • 职责 :它是程序的入口。Web 项目接收到的所有请求(如点击了一个按钮、提交了一个表单)都会首先到达这里。
  • 作用 :
    • 接收请求:解析用户传来的参数(比如 ID 是多少)。
    • 拦截与校验:检查参数是否合法。
    • 调度响应 :调用相应的 service 层来处理业务,拿到结果后,决定返回给用户什么样的界面或 JSON 数据。
  • 核心准则 :Controller 自己不要写业务逻辑! 它只负责"传话"和"分发"。

2. DAO/Mapper(数据访问层):餐厅的"库房管理员"

  • 名词解释 :DAO 是 Data Access Object 的缩写;在 MyBatis 等框架中,习惯叫 Mapper。
  • 职责 :它是代码与数据库之间的直接沟通桥梁。
  • 作用 :
    • 执行 SQL:增、删、改、查(CRUD)。
    • 屏蔽底层 :service 层不需要知道数据库是用 MySQL 还是 Oracle,也不需要写复杂的 SQL 语句,只需要调用 mapper.selectById(id) 这样的简单方法。
  • 核心准则 :Mapper 只做一件事------把对象存入数据库,或从数据库取出对象。

它们是如何协作的?(以"查询用户信息"为例)

当你访问一个"查询用户详情"的网页时,数据流向是这样的:

  1. 用户 :点击链接 http://api.myapp.com/user/1
  2. Controller :接收到请求,解析出 ID 为 1。对 service 说:"帮我查一下 ID 为 1 的用户。"
  3. Service :调用 mapper 说:"根据 ID 给我在数据库里捞出这个用户的数据。"
  4. DAO/Mapper :执行 SQL SELECT * FROM user WHERE id = 1,将结果包装成一个 User 对象(domain 类)返回给 service。
  5. Service :可能还会对这个对象做一些业务判断(比如该用户是否被封禁),然后传回给 controller。
  6. Controller:把拿到的对象转成 JSON 返回给浏览器。

为什么这样做?

这种分层开发有三个巨大的优势:

  • 分而治之 :当你觉得查询速度慢时,你肯定去优化 mapper(SQL 语句);当你觉得业务规则改了,去优化 service;当你觉得网页接口地址改了,去优化 controller。你不需要去改动不相关的代码。
  • 解耦 :如果以后数据库要从 MySQL 换成 MongoDB,你只需要修改 mapper 实现,controller 和 service 的代码完全不需要动。
  • 多人协作:一个人写界面和 Controller(前端向),一个人写业务逻辑(Service),一个人写复杂的 SQL 操作(DBA/后端)。大家各司其职,互不干扰。

总结:

  • Controller:指挥官(接收请求)。
  • Service:大脑(处理逻辑)。
  • Domain:数据模板(定义对象)。
  • DAO/Mapper:搬运工(跟数据库打交道)。
  • Util:工具箱(提供方便的辅助工具)。

这套结构是 Java 领域最流行的"标准模板"。理解了它们,你就掌握了后端开发的核心流程!

相关推荐
wuminyu12 小时前
JVM规范学习总结:解释器与JIT编译器如何处理JVM字节码
java·linux·c语言·jvm·c++
txxzjmzlh13 小时前
SpringBoot 配置⽂件
java·spring boot·spring
Wang's Blog13 小时前
Java 项目实战: 交友项目 - 搜索附近的功能概述和分析
java·开发语言·交友
骑着蜗牛撵大象32713 小时前
大模型 Agent 的沙箱护栏:gVisor 隔离、出口白名单与审计闭环
java·开发语言·jvm·安全·agent沙箱·gvisor·microvm
独泪了无痕13 小时前
Hutool之LocalDateTimeUtil:让时间间隔操作如虎添翼
java
三无少女指南15 小时前
从这里开始:Java 后端与 AI 工程的三条阅读路线
java·学习路线·ai工程
香蕉大香蕉(06敬畏市场)15 小时前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
nice_lcj52015 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
骑着蜗牛撵大象32716 小时前
2026 后端 AI 工程化:Spring AI 管调用、MCP 管工具、Agent 内嵌管自治
java·人工智能·后端·spring·ai·可观测性·mcp
tryxr16 小时前
JVM 垃圾回收机制
java·jvm·gc·垃圾回收