Spring MVC三层架构 – 朝汐の小站
Spring MVC三层架构
本文最后更新于 302 天前,如有错误请邮件至 zhiligyi222na@gmail.com

1. Controller 层(最左侧)

职责:接收 HTTP 请求 → 组装参数 → 调用 Service → 把结果封装成统一响应返回前端。

  • 1. 接收并封装参数
    把前端传进来的 JSON/表单里的 username、password 取出来,封装成一个 DTO(如 LoginDTO)。
    示例代码(Spring MVC):java复制@PostMapping("/login") public Result login(@RequestBody LoginDTO dto) { Employee emp = employeeService.login(dto.getUsername(), dto.getPassword()); return Result.success(emp); }
  • 2. 调用 Service 方法查询数据库
    把 username、password 往下传,交给 Service 层去做真正的业务逻辑。
  • 3. 封装结果并响应
    Service 把校验后的 Employee 对象返回上来,Controller 把它再包一层统一返回格式(如 Result<T>),然后 return 给前端。

2. Service 层(中间)

职责:业务编排、事务控制、密码校验、抛业务异常。

  • 1. 调用 Mapper 查询数据库
    拿到 username 后,立刻调 Mapper 层去数据库查整条记录。
    示例:java复制Employee emp = employeeMapper.findByUsername(username);
  • 2. 密码比对
    Mapper 返回的是数据库里存的加密后的密码。Service 层把前端传来的明文密码用同样的算法(如 BCrypt)加密,再与数据库值比对:java复制if (!passwordEncoder.matches(rawPassword, emp.getPassword())) { throw new BizException("用户名或密码错误"); }
  • 3. 返回结果
    比对成功后把 Employee 对象原样返回给 Controller;失败则抛异常或返回 null/错误码,由 Controller 统一处理。

3. Mapper 层(最右侧)

职责:纯粹的 SQL 交互,只负责把数据拿出来,不做任何业务判断。

  • 1. select * from employee
    Mapper 接口和 XML/注解里只写一条 SQL:sql复制SELECT * FROM employee WHERE username = #{username}MyBatis 会把结果映射成 Employee 实体。
  • 2. 数据库
    指真正的 RDBMS(MySQL、PostgreSQL …)。SQL 发到库后返回一行记录(或空)。
  • 3. 返回结果
    Mapper 把结果塞到实体类里回传给 Service。

纵向看三条“1-2-3”线

  • 第一条 1-2-3:Controller 的全部生命周期
  • 第二条 1-2-3:Service 的全部生命周期
  • 第三条 1-2-3:Mapper 的全部生命周期

这样就把一次 HTTP 请求在 Java 后端的三层结构中完整地串了起来。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇