高级java每日一道面试题-2024年9月06日-基础篇-Java中的PO、VO、BO、DO、DAO、DTO、POJO是什么意思?

如果有遗漏,评论区告诉我进行补充

面试官: Java中的PO、VO、BO、DO、DAO、DTO、POJO是什么意思?

我回答:

PO持久化对象(Persistent Object)

PO是持久化对象,用于表示数据库中的实体或表的映射
通常与数据库表的结构和字段对应
PO的属性对应数据库表的字段,可以进行持久化操作(新增、查询、更新、删除)
例如:UserPO 中的属性和数据库表中的字段是一一对应的。

// 通常与数据库表对应
public class UserPO {
    private Long id;
    private String username;
    private String password;
}

VO值对象(Value Object)

VO是值对象,用于封装数据
通常是不可变的,用于传递数据而不包含业务逻辑
VO可以用于在不同层之间传递数据,如前端和后端之间,后端的返回的到前端的数据只需要保留必要的字段就可以,将这些必要的字段封装起来就是VO
例如:

// 用于展示,例如给前端的用户视图
public class UserVO {
    private String username;
    private String display_name;
}

BO业务对象(Business Object)

BO是业务对象,用于封装业务逻辑和操作
包含与业务相关的方法和属性,用于实现业务规则和操作
BO通常与领域模型紧密相关,用于表示业务概念和业务流程
例如:UserBO在包含了属性id和username的基础上还包含了对username的验证逻辑

// 包含业务逻辑
public class UserBO {
    private Long id;
    private String username;
    
    public boolean isValid() {
        return username != null && !username.isEmpty();
    }
}

DO数据对象(Data/Domain Object)

DO通常与BO和PO相对应,用于实现领域模型和业务逻辑,用于表示从数据存储中得到的数据
例如:

// 这里的DO和PO非常相似
public class UserDO {
    private Long id;
    private String username;
    private String password;
}

DAO数据访问对象(Data Access Object)

DAO是数据访问对象,用于封装对数据库的访问操作,也就是我们常说的Dao层
提供对数据库的增删改查等操作的接口
DAO可以隐藏底层数据库的具体实现细节,使得业务逻辑层与数据库解耦
例如:UserDao提供了对数据库表user的增删改查操作,这里的UserPO就是我们上面说的用来一一对应接收表中的字段

public interface UserDao {
    UserPO getById(Long id);
    void save(UserPO user);
    void delete(UserPO user);
    List<UserPO> findAll();
}

DTO数据传输对象(Data Transfer Object)

DTO是数据传输对象,用于在不同层之间传输数据
通常用于优化数据传输的性能和减少网络通信的开销。
DTO可以封装多个对象的数据,以减少网络请求次数
如果说VO一般用于前端和后端之后传输数据,那么DTO就是在后端的不同层之间传递数据,例如controller层和service层或者在服务之间结构调用的时候使用DTO
例如:

// 用于API或远程服务间的数据传输
public class UserDTO {
    private String username;
    private String email;
}

POJO普通Java对象(Plain Old Java Object)

POJO是一个简单的Java对象,没有特定的限制和约束
是一种普通的Java类,不依赖于特定的框架或接口
例如:User类是一个普通的java实体类

// 简单的Java对象,不继承或实现任何特殊的类或接口
public class User {
    private Long id;
    private String name;
}

总结

  1. 所有的对象: PO/VO/BO/DO/DTO/POJO, 持久化对象,值对象,业务对象,数据对象,数据传输对象,简单对象
  2. PO: 持久化对象,主要用于数据库交互,通常与数据库表结构对应
  3. VO:值对象主要和前端进行交互,接受前端的数据或返回前端数据
  4. BO:业务对象, 封装业务逻辑, 包含多个VO和DO的组合, 涵盖了业务规则的操作, 对象里会包含其他额外的校验判断逻辑
  5. DO: 数据对象, 强调的是从数据角度描述业务对象, 从数据库表或者是其他存储数据中得到的数据, 例如redis,文本文件.
  6. DTO: 数据传输对象, 分布式系统中服务接口间的数据传输, 后端不同层之间的数据传输
  7. POJO: 简单的java对象,没有继承的简单类.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java我跟你拼了

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值