当前位置: 首页 > news >正文

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

通过分层设计,系统更易维护、扩展和测试。

相关文章:

  • 十一、Hive JOIN 连接查询
  • OpenCV 背景建模详解:从原理到实战
  • 【基础】Windows开发设置入门4:Windows、Python、Linux和Node.js包管理器的作用和区别(AI整理)
  • Spring Boot三层架构设计模式
  • 【设计模式】- 结构型模式
  • 从另一个视角理解TCP握手、挥手与可靠传输
  • UWB定位方案在水力发电站人员安全的应用推荐
  • Python字符串常用方法详解
  • 目标检测指标计算
  • 【MySQL】项目实践
  • 【Python 操作 MySQL 数据库】
  • SQL Server权限设置的几种方法
  • 排序算法之线性时间排序:计数排序,基数排序,桶排序详解
  • 游戏引擎学习第285天:“Traversables 的事务性占用”
  • Detected for tasks ‘compileDebugJavaWithJavac‘ (17) and ‘kspDebugKotlin‘ (21).
  • pytorch 15.1 学习率调度基本概念与手动实现方法
  • 以Linux内核为基础的 Linux发行版有哪些
  • 如何使用 4 种方法安全地将 Windows 7恢复出厂设置
  • LabVIEW图像粒子处理
  • ubuntu 20.04 更改国内镜像源-阿里源 确保可用
  • 一个留美学生的思想转向——裘毓麐的《游美闻见录》及其他
  • 新华时评:博物馆正以可亲可近替代“高冷范儿”
  • 上海比常年平均时间提前12天入夏,明天最高气温可达33℃
  • 中欧互动中的合作与分歧:务实需求将克服泛安全化的“政治钟摆”
  • 国家卫生健康委通报关于肖某引发舆情事件调查处置进展情况
  • 湃书单|澎湃新闻编辑们在读的14本书:后工作时代