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)”各自专注,系统更清晰、可维护、可测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1211704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业微信智能定位:非ROOT环境下的异地打卡解决方案

企业微信智能定位:非ROOT环境下的异地打卡解决方案 【免费下载链接】weworkhook 企业微信打卡助手,在Android设备上安装Xposed后hook企业微信获取GPS的参数达到修改定位的目的。注意运行环境仅支持Android设备且已经ROOTXposed框架 (未 ROOT …

AI抠图边缘有白边?科哥镜像参数调整技巧

AI抠图边缘有白边?科哥镜像参数调整技巧 你是不是也遇到过这样的情况:用AI抠图工具处理人像时,头发丝边缘明明很清晰,可导出后却在发际线、衣领、手指尖这些地方出现一圈若隐若现的白边?放大一看,不是透明…

7个技巧掌握AI语音识别字幕工具:多语言字幕生成与翻译全解析

7个技巧掌握AI语音识别字幕工具:多语言字幕生成与翻译全解析 【免费下载链接】video-subtitle-master 批量为视频生成字幕,并可将字幕翻译成其它语言。这是一个客户端工具, 跨平台支持 mac 和 windows 系统 项目地址: https://gitcode.com/gh_mirrors/…

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

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

一文说清nmodbus4类库使用教程的基础操作流程

以下是对您提供的博文内容进行 深度润色与结构重构后的专业级技术文章 。整体风格更贴近一位资深工业软件工程师在技术社区中自然、务实、略带经验口吻的分享,彻底去除AI生成痕迹、模板化表达和冗余套话,强化逻辑流、实操细节与工程直觉,并严格遵循您提出的全部优化要求(…

4步实现音乐自由:解锁加密音频的全平台解决方案

4步实现音乐自由:解锁加密音频的全平台解决方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://git…

企业微信打卡定位全攻略:从入门到精通的6种解决方案

企业微信打卡定位全攻略:从入门到精通的6种解决方案 【免费下载链接】weworkhook 企业微信打卡助手,在Android设备上安装Xposed后hook企业微信获取GPS的参数达到修改定位的目的。注意运行环境仅支持Android设备且已经ROOTXposed框架 (未 ROOT…

macOS证书配置网络嗅探解决方案:从问题排查到效能优化

macOS证书配置网络嗅探解决方案:从问题排查到效能优化 【免费下载链接】res-downloader 资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gitcode.com…

开源硬盘监控工具全攻略:从故障预警到数据安全防护

开源硬盘监控工具全攻略:从故障预警到数据安全防护 【免费下载链接】CrystalDiskInfo CrystalDiskInfo 项目地址: https://gitcode.com/gh_mirrors/cr/CrystalDiskInfo 在数字化时代,硬盘故障往往毫无征兆却后果严重,可能导致数年积累…

高效转换B站缓存视频:跨平台播放的零基础解决方案

高效转换B站缓存视频:跨平台播放的零基础解决方案 【免费下载链接】m4s-converter 将bilibili缓存的m4s转成mp4(读PC端缓存目录) 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 旅行途中想离线观看B站缓存视频,却发现文件格式不兼容…

Hackintool黑苹果配置工具:解决硬件适配与系统优化的实用指南

Hackintool黑苹果配置工具:解决硬件适配与系统优化的实用指南 【免费下载链接】Hackintool The Swiss army knife of vanilla Hackintoshing 项目地址: https://gitcode.com/gh_mirrors/ha/Hackintool Hackintool是一款专为黑苹果用户设计的硬件配置与系统优…

高效获取B站字幕的实用技巧:3步轻松搞定视频字幕提取

高效获取B站字幕的实用技巧:3步轻松搞定视频字幕提取 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否曾遇到这样的尴尬?想反复学习B…

3分钟上手的字幕黑科技:B站字幕提取、下载与格式转换全攻略

3分钟上手的字幕黑科技:B站字幕提取、下载与格式转换全攻略 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 还在为无法保存B站视频的字幕而烦恼&#…

如何用智能歌词管理工具解决90%的音乐歌词烦恼?

如何用智能歌词管理工具解决90%的音乐歌词烦恼? 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 你是否也曾遇到这些尴尬时刻:精心收藏的演唱会视频…

音频格式转换工具:告别格式枷锁,实现跨设备音乐自由

音频格式转换工具:告别格式枷锁,实现跨设备音乐自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地…

Qwen2.5-0.5B输出乱码?编码格式问题排查指南

Qwen2.5-0.5B输出乱码?编码格式问题排查指南 1. 为什么你的Qwen2.5-0.5B会输出乱码? 你刚启动了那个轻巧又快的Qwen2.5-0.5B-Instruct镜像,输入“你好”,结果屏幕上蹦出一串看不懂的字符: 、¡—¢˜&#x…

RuoYi-Flowable-Plus零基础上手指南:从安装到实战的避坑全攻略

RuoYi-Flowable-Plus零基础上手指南:从安装到实战的避坑全攻略 【免费下载链接】RuoYi-Flowable-Plus 本项目基于 RuoYi-Vue-Plus 进行二次开发扩展Flowable工作流功能,支持在线表单设计和丰富的工作流程设计能力。如果觉得这个项目不错,麻烦…

Sambert-HiFiGAN如何快速上手?保姆级语音合成部署教程入门必看

Sambert-HiFiGAN如何快速上手?保姆级语音合成部署教程入门必看 1. 为什么选这个镜像:开箱即用的多情感中文语音合成 你是不是也遇到过这些情况:想做个带配音的短视频,却卡在语音合成这一步;想给产品加个智能播报功能…

如何用LyricsX打造专属音乐体验:Mac用户的个性化歌词解决方案

如何用LyricsX打造专属音乐体验:Mac用户的个性化歌词解决方案 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics LyricsX是一款基于Swift开发的iTunes插件&#…

Qwen2.5-0.5B批量处理能力:多请求并行优化部署案例

Qwen2.5-0.5B批量处理能力:多请求并行优化部署案例 1. 为什么小模型也能扛起批量任务? 你可能已经试过Qwen2.5-0.5B-Instruct——那个在浏览器里点开就能聊、打字还没停答案就开始冒出来的AI小助手。它轻、快、中文顺,特别适合放在树莓派、…