💡 一则也许对你有用的小广告 🏆

欢迎飞飞程序员   ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论

  • 正在进行中的项目:《FFBlog知识付费博客项目》 正在持续更新中,基于 Spring Boot 3.x + JDK 21...,点击查看 ;
  • 《从零开发:FFBlog知识付费博客项目(全栈开发)》 演示链接: https://ffblog.ffcxy.com/  ;

截止目前, 飞飞  正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, Ai系统, CMS系统,在线商城系统,等等 ,欢迎点击围观

domain 层与 DO 对象

一句话理解

domain(领域层) 是业务架构中的一层,存放业务核心的对象和逻辑DO(Data Object,数据对象) 是这一层里最常见的一类对象,本质就是承载数据的"实体类"

先理清常见分层

一个典型 SpringBoot 项目按职责分层,每一层有自己"专属"的对象:

Controller 层  ←→  VO / DTO(入参、出参)
    ↓
Service 层     ←→  DTO / BO(业务处理)
    ↓
Mapper 层      ←→  DO(对应数据库表)
    ↓
数据库

domain 包 通常就是放这些对象的地方,常见的包名:domainentitymodelpojo

DO 到底是什么

DO = Data Object(数据对象),核心特征:

  • 一对一对应数据库表结构,字段名、类型和表列基本一致
  • 是 Mapper 与数据库交互时"搬运"的数据载体
  • 一般在 domain / entity 包下,配合 @TableName@TableId 注解
// 这个类就是 DO:对应 user 表
@Data
@TableName("user")
public class UserDO {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
}

DO 与其他对象的区别(重点)

图片

一句话区分:DO 跟表走,DTO 跟接口走,VO 跟页面走

为什么要有 domain / DO 这一层

  1. 解耦:数据库字段变化(比如加字段、改列名)只影响 DO,不影响给前端返回的 VO
  2. 安全:DO 里可能有敏感字段(如 password),转成 VO 时可以剔除,不直接暴露给前端
  3. 职责清晰:每层用自己类型的对象,避免"一个实体类贯穿到底"的混乱

简单项目里,很多人会省掉 DO,直接用 entity 包下的实体类(就是你 Mapper 示例里那种),这也是常见做法,不算错——只是规范分层时叫 DO。

上一篇 springboot 框架的 Mapper如何解释?
已是最后一篇

全部评论(0)

头像
😃 😁 😅 😂 😍 😜 😝 🤑 🥵 🥰 😙 😎 😵 😭 😱 😖 🥳 👽 🙈 🤡 😤 💣 💯 💢 ❤️ 👍 👏 👋 👌 🤏 🙏
还没有任何评论哟~