news 2026/4/18 10:47:36

java开发的三层架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java开发的三层架构

三层架构

三层架构把程序分成三部分,各司其职,便于维护与扩展:
Controller(控制层 / 接口层)→ Service(业务层)→ Mapper/DAO(持久层)


概览

  • 目标:每层只做一类事,职责单一,降低耦合。
  • 好处:易维护、易测试、易扩展、便于多人协作。

Controller(控制层 / 接口层)

前台接待与传话筒。

主要职责

  • 接收请求(URL、Headers、Body、参数)。
  • 做入参校验(是否缺失、格式是否合法、简单鉴权)。
  • 调用 Service,传递必要参数。
  • 封装 Service 返回值为响应格式(JSON/HTTP status),返回给前端。

不该做

  • 不实现复杂业务逻辑。
  • 不写 SQL、不直接访问数据库。

原则

  • 薄控制层:只做协调与验证,保持简单易读。

Service(业务层)

业务逻辑的大脑。

主要职责

  • 实现业务规则(权限判断、折扣规则、状态机、事务编排等)。
  • 组织调用多个 Mapper 或第三方服务,串联业务流程。
  • 处理事务边界(开启/提交/回滚)。
  • 返回业务结果给 Controller。

不该做

  • 不直接操作 SQL 或处理请求/响应的细节(HTTP、序列化等)。

原则

  • 业务集中化、可复用、可单元测试。尽量纯粹(无 UI/协议依赖)。

Mapper / DAO(持久层)

数据库搬运工与翻译官。

主要职责

  • 执行 SQL(查询/插入/更新/删除)。
  • 将数据库记录映射为实体对象(Entity/POJO),或将对象转换为 SQL 参数。
  • 提供基础的增删改查接口给 Service 使用。

不该做

  • 不处理复杂业务规则、不做跨表业务决策。

原则

  • 单一职责:只关心数据持久化与映射,保持稳定、可替换(例如切换 ORM 或数据库)。

请求/数据流(简明)

前端请求 ↓ Controller(校验、解析) ↓ Service(业务逻辑、事务、调用多个 Mapper) ↓ Mapper/DAO(执行 SQL、返回实体) ↓ Service(整合结果) ↓ Controller(封装为 JSON) ↓ 前端收到响应

快速对照表

主要角色做什么不做
Controller接口/路由接收请求、校验、转交、响应写业务、写 SQL
Service业务逻辑核心逻辑、流程编排、事务直接操作数据库、处理 HTTP 细节
Mapper/DAO持久化执行 SQL、对象映射写业务规则、处理事务决策

常见示例流程(订单更新)

  1. 前端发来更新订单请求(/orders/123/update)。
  2. Controller 校验 token、校验参数是否完整。
  3. Controller 调用OrderService.updateOrder(userId, orderDto)
  4. Service 检查用户权限、校验订单状态、开始事务。
  5. Service 调用OrderMapper.selectById(123)InventoryMapper.decrease(...)等。
  6. Mapper 执行 SQL 并返回实体。
  7. Service 整合结果,提交事务,返回业务结果。
  8. Controller 将结果封装为 JSON 并返回前端。

结论

三层架构让“接待(Controller)→ 决策(Service)→ 搬运(Mapper)”各自专注,系统更清晰、可维护、可测试。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:38:22

Sambert音频合成卡顿?GPU算力动态分配优化实战

Sambert音频合成卡顿?GPU算力动态分配优化实战 1. 开箱即用的Sambert语音合成体验 你有没有试过刚部署好Sambert语音合成服务,输入一段文字点下“生成”,结果等了快十秒才听到声音?或者更糟——页面卡住不动,GPU显存…

作者头像 李华
网站建设 2026/4/17 5:51:10

超实用macOS歌词工具完全指南:让你的桌面歌词体验升级

超实用macOS歌词工具完全指南:让你的桌面歌词体验升级 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics macOS上的桌面歌词工具种类繁多,但能做到实…

作者头像 李华
网站建设 2026/4/18 3:50:23

游戏存档管理工具:从数据危机到掌控自由的技术民主化实践

游戏存档管理工具:从数据危机到掌控自由的技术民主化实践 【免费下载链接】XGP-save-extractor Python script to extract savefiles out of Xbox Game Pass for PC games 项目地址: https://gitcode.com/gh_mirrors/xg/XGP-save-extractor 存档丢失&#xf…

作者头像 李华
网站建设 2026/4/18 3:52:10

实现音乐自由:3种方法突破加密音乐播放限制

实现音乐自由:3种方法突破加密音乐播放限制 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitcode…

作者头像 李华
网站建设 2026/4/18 3:50:38

如何用Obsidian Minimal打造会呼吸的数字空间

如何用Obsidian Minimal打造会呼吸的数字空间 【免费下载链接】obsidian-minimal A distraction-free and highly customizable theme for Obsidian. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-minimal 当你在深夜写作时,是否曾因刺眼的屏幕光线…

作者头像 李华
网站建设 2026/4/18 3:50:49

音乐解密工具全解析:从格式解锁到音频自由管理

音乐解密工具全解析:从格式解锁到音频自由管理 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitc…

作者头像 李华