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

高级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对象,没有继承的简单类.
http://www.lryc.cn/news/434957.html

相关文章:

  • MFC读取PC6408板卡输入信号实例
  • @Async的使用说明
  • 经验笔记:SQL调优
  • Selenium使用浏览器用户配置进行测试
  • virsh命令的使用
  • 【来学Vue吧】创建一个Vue项目
  • C#迭代器方法和yield用法
  • 斗破C++编程入门系列之二十六:数组、指针和字符串:动态内存分配和释放(一星斗师)
  • Servlet 和 Spring Boot 的请求处理流程区别和例子
  • C++笔记之map的实用操作
  • Lombok失效:报错 找不到符号 Springboot项目
  • Linux 基础命令-文件与目录操作
  • Delphi 12.1安卓APP开发中获取硬件信息及手机号
  • STM32 - 笔记4
  • 【H2O2|全栈】更多关于HTML(1)HTML进阶(一)
  • 新160个crackme - 053-devilz KeyGen me#3
  • ORA-12514
  • MyBatis-PlusDruid数据源
  • C#中chart绘制曲线
  • c++数据结构算法题讲解
  • 间隙锁在其他数据库管理系统中的类似实现
  • OpenCV 与 YoloV3的结合使用:目标实时跟踪
  • Worse is Better
  • Python Web 框架篇:Flask、Django、FastAPI介绍及其核心技术
  • 【Qt网络编程基础】Tcp服务器和客户端(只支持一对一)
  • 平台开发到落地详解:从食堂采购系统源码到可视化供应链管理数据大屏
  • 静态内部类
  • Vue+SpringBoot+数据库整体开发流程 1
  • 百度Apollo打通与ROS的通信,扩展自动驾驶系统生态
  • Web3 项目安全手册