pojo层、dao层、service层、controller层的作用
在Java Web开发中,常见的分层架构(如Spring Boot项目)通常包含POJO层、DAO层、Service层和Controller层,各层职责明确,协同工作。以下是各层的作用及相互关系:
1. POJO层(Model/Entity层)
- 作用:
- 作为普通Java对象(Plain Old Java Object),用于表示业务模型或数据库表映射的实体类。
- 属性与数据库字段一一对应,仅包含私有属性、getter/setter方法及简单构造方法,不包含业务逻辑。
- 在分层架构中作为数据传输载体,例如:
- Controller层接收前端请求时,将JSON数据映射为POJO对象;
- DAO层通过ORM框架(如MyBatis)将数据库记录转换为POJO对象。
- 别称:也称为Model层、Entity层或Domain层。
2. DAO层(Mapper层)
- 作用:
- 数据持久化操作:直接与数据库交互,执行SQL语句(增删改查),通过接口或XML文件定义操作346。
- 原子性操作:仅封装对单表的CRUD操作,不涉及业务逻辑组合。
- 解耦设计:通过接口与实现分离(如MyBatis的XML映射文件),便于更换数据库访问技术。
@Mapper
public interface UserMapper extends BaseMapper<User> { User selectById(Long id); // 根据ID查询用户
}
3. Service层
- 作用:
- 业务逻辑处理:组合多个DAO层操作,实现复杂业务逻辑(如订单创建需同时更新库存和用户积分)。
- 事务管理:通过注解(如
@Transactional
)保证多个DAO操作的原子性。 - 接口与实现分离:通常定义接口(如
UserService
)和实现类(如UserServiceImpl
),便于扩展和测试。
- 示例:
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;public User getUserWithProfile(Long id) {User user = userMapper.selectById(id); // 调用DAO层// 附加业务逻辑(如数据校验、计算)return user;}
}
4. Controller层
- 作用:
- 请求与响应控制:接收前端HTTP请求(如RESTful API),解析参数并调用Service层处理,最终返回JSON或视图。
- 前后端桥梁:例如:
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User getUser(@PathVariable Long id) {return userService.getUserById(id); // 调用Service层}
}
各层协作流程
典型请求处理流程:Controller → Service → DAO → 数据库
- 数据流向:
前端请求 → Controller解析为POJO → Service处理业务 → DAO操作数据库 → 结果逐层返回。 - 分层优势:
- 解耦:各层职责单一,修改业务逻辑无需改动DAO层。
- 可测试性:Mock各层依赖,便于单元测试。
总结
分层 | 核心职责 | 关键技术/注解 |
---|---|---|
POJO | 数据模型定义与传输 | Lombok(简化代码) |
DAO | 数据库原子操作 | @Mapper , MyBatis |
Service | 业务逻辑与事务 | @Service , @Transactional |
Controller | 请求响应控制 | @RestController , @RequestMapping |
通过分层设计,系统更易维护、扩展和测试。