跳转至

三层架构用到的注解总结

三层架构用到的注解总结


🏗 三层架构 + 注解示意图

┌────────────────────────────────────┐
│           Controller 层            │
│  - 接收请求,返回响应(JSON)         │
│                                    │
│  @RestController                   │
│  @RequestMapping("/users")          │
│   ├─ @GetMapping("/{id}")           │
│   │    @PathVariable Long id        │
│   ├─ @PostMapping                   │
│   │    @RequestBody UserDTO dto     │
│   └─ @CrossOrigin                   │
└────────────────▲────────────────────┘
                 │ 调用 Service
┌────────────────┴────────────────────┐
│             Service 层              │
│  - 业务逻辑,事务控制                │
│                                    │
│  @Service                          │
│  @Transactional                    │
│   ├─ 调用 DAO 层                    │
│   ├─ 封装业务规则                   │
│   └─ 组合多个数据操作                │
└────────────────▲────────────────────┘
                 │ 调用 DAO
┌────────────────┴────────────────────┐
│           DAO / Mapper 层           │
│  - 操作数据库                        │
│                                    │
│  MyBatis:                          │
│   @Mapper / @Repository             │
│   @Select("SELECT * FROM user")     │
│   @Param("id") Long id              │
│                                    │
│  JPA:                              │
│   @Repository                       │
│   @Entity @Table(name="user")       │
│   @Id @GeneratedValue               │
│   @Column(name="username")          │
└────────────────────────────────────┘

✅ 一句话总结

  • Controller 层:负责 请求/响应@RestController@RequestMapping@RequestBody@PathVariable
  • Service 层:负责 业务逻辑和事务@Service@Transactional
  • DAO 层:负责 数据库操作(MyBatis:@Mapper@Select;JPA:@Repository@Entity

三层架构(Controller → Service → DAO/Mapper)在 Spring Boot + MyBatis/JPA 项目里,常用的注解可以分层总结如下:


🌐 Controller 层(表现层 / Web 层)

主要负责接收请求、参数校验、返回响应。

  • @RestController = @Controller + @ResponseBody,返回 JSON 数据。
  • @Controller 传统 MVC 控制器,返回页面或 JSON。
  • @RequestMapping 定义类或方法的请求路径,可细化为:

  • @GetMapping / @PostMapping / @PutMapping / @DeleteMapping

  • @RequestParam 绑定 URL 查询参数,如 ?id=1
  • @PathVariable 绑定路径参数,如 /user/{id}
  • @RequestBody 接收 JSON 格式请求体并转换为对象。
  • @ResponseBody 将返回值序列化为 JSON(通常用 @RestController 替代)。
  • @CrossOrigin 解决跨域请求问题。
  • @Validated / @Valid 参数校验(配合 Bean Validation 注解如 @NotNull、@Size)。

⚙️ Service 层(业务逻辑层)

负责业务逻辑编排、事务控制。

  • @Service 标识业务逻辑组件,注册到 Spring 容器。
  • @Autowired / @Resource / @Inject 依赖注入(常用在注入 DAO 或其他 Service)。
  • @Transactional 声明式事务控制,可配置:

  • rollbackFor = Exception.class(遇到受检异常也回滚)

  • propagation(事务传播行为)
  • @Value 注入配置文件中的属性值。

🗄 DAO/Mapper 层(数据访问层)

直接操作数据库。

如果用 MyBatis:

  • @Mapper 标识 MyBatis 的 Mapper 接口。
  • @Repository 可选,标识持久层组件。
  • @Select / @Insert / @Update / @Delete 写在接口方法上的 SQL 注解。
  • @Results / @Result 字段和属性映射。
  • @Param 给方法参数命名,便于 SQL 占位符引用。

如果用 Spring Data JPA:

  • @Repository 标识持久层。
  • @Query 自定义 JPQL/SQL 查询。
  • @Modifying 配合 @Query 做更新/删除操作。
  • @Entity 标识一个持久化对象(表对应的实体类)。
  • @Table 指定表名。
  • @Id 主键。
  • @GeneratedValue 主键生成策略。
  • @Column 指定字段名。

✅ 总结(常见组合)

  • Controller:@RestController + @RequestMapping + @RequestBody/@PathVariable
  • Service:@Service + @Transactional
  • DAO:@Mapper/@Repository + @Select/@Insert...

这样分层之后,三层架构的职责清晰:

  • Controller 只管请求/响应
  • Service 管逻辑和事务
  • DAO/Mapper 管数据库