全部
常见问题
产品动态
精选推荐

在 Java 分层开发中,PO、BO、DTO、VO 和 POJO 是常见的对象类型

管理 管理 编辑 删除

在 Java 分层开发中,PO、BO、DTO、VO 和 POJO 是常见的对象类型,它们在不同层次中扮演不同的角色,帮助开发者更好地组织代码结构,提高可维护性和可读性。


1. PO(Persistent Object,持久化对象)**

- **定义**:PO 是与数据库表结构一一对应的对象,每个字段映射表中的一列。

- **作用**:用于数据持久化操作,如增删改查(CRUD),通常由 ORM 框架(如 MyBatis、Hibernate)自动生成。

- **示例**:

 ```java

 @Table(name = "t_user")

 public class UserPO {

     @Id

     private Long userId;

     private String userName;

     // 其他字段...

 }

 ```


2. BO(Business Object,业务对象)**

- **定义**:BO 封装业务逻辑,可由多个 PO 组合而成,包含复杂的业务操作(如数据校验、流程控制)。

- **特点**:独立于具体存储方式,可操作数据库、缓存、外部接口等。

- **示例**:

 ```java

 public class OrderBO {

     private OrderPO order;

     private List<ItemPO> items;

     private UserPO user;


     public BigDecimal calculateTotal() {

         // 复杂的计算逻辑...

     }

 }

 ```


3. DTO(Data Transfer Object,数据传输对象)**

- **定义**:DTO 用于不同层之间的数据传输,尤其是 Service 层与 Controller 层的交互。

- **特点**:

 - 可能包含多个 PO 的组合或裁剪后的字段(例如从 30 个字段中选取 10 个传输)。

 - 支持序列化,常用于远程调用(如 RPC、HTTP 接口)。

 - **无业务逻辑**。

- **示例**:

 ```java

 public class UserDTO {

     private String displayName;

     private LocalDateTime registerTime;


     public static UserDTO fromPO(UserPO po) {

         // 转换逻辑...

     }

 }

 ```


4. VO(View Object,视图对象)**

- **定义**:VO 是展示层(前端页面)直接使用的对象,仅包含前端需要展示的数据,通常以 JSON 形式返回。

- **应用场景**:Controller 层将数据封装为 VO 后传递给前端,避免暴露敏感字段(如密码、内部状态)。

- **示例**:

 ```java

 public class UserVO {

     private String formattedDate;

     private String userLevel;

     // 可能包含组合字段...

 }

 ```


5. POJO(Plain Ordinary Java Object,简单 Java 对象)**

- **定义**:POJO 是所有简单 Java 对象的统称,VO、DTO、PO 等均属于 POJO。

- **特点**:仅包含属性及 Getter/Setter 方法,不依赖特定框架。


6. 对比与区别**

| 对象 | 应用场景 | 特点 |

|------|---------|------|

| **PO** | 数据库交互 | 与数据库表严格对应 |

| **BO** | Service 层内部业务逻辑 | 封装复杂业务逻辑,可包含多个 PO 的组合 |

| **DTO** | Service 层与 Controller 层间 | 聚合业务所需数据,可能组合多个 PO |

| **VO** | Controller 层与前端交互 | 按前端需求定制字段 |


7. 关键区别**

- **PO vs DTO**:PO 严格映射数据库表,DTO 可根据业务需求裁剪字段。

- **DTO vs VO**:DTO 关注传输效率,VO 关注展示效果。例如,DTO 可能包含敏感字段(如用户 ID),而 VO 仅展示脱敏后的信息。

- **BO vs PO**:BO 包含业务逻辑,PO 仅存储数据。例如,订单 BO 可能计算总价,而订单 PO 仅记录金额。


请登录后查看

小码二开 最后编辑于2025-05-24 10:35:38

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}}
沙发 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
33
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
{{item.label}} 加精
{{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服