彻底搞懂 bean,pojo(DTO、VO、BO、PO)与Entity的区别
彻底搞懂 bean,pojo(DTO、VO、BO、PO)与Entity的区别
MVC框架
在讲解之前先要了解MVC三层架构。 C:控制层,M:数据层,V:表现层(控制层)

各模块详细标注建议:
- Controller(蓝色框)
接收用户请求(GET/POST)
参数校验/格式化
调用Service层
返回视图路径 - Service层(红色框)
业务逻辑处理
事务管理
调用DAO层
示例方法:login()、logout() - DAO层(橙色框)
JDBC操作
SQL模板处理
连接管理(获取/释放)
对象-关系映射(ORM) - View(绿色框)
JSP/Thymeleaf等模板
数据渲染
用户交互界面 - 数据库(灰色圆柱图标)
表与JavaBean映射
标注示例表:t_user
在前后端分离的情况下,后端三层架构往往会分为Controller控制层,Service服务层,Repository数据访问层。
1、Controller控制层:用于接收前端请求和返回响应。
2、Service服务层:主要用于一些业务逻辑的处理。
2.1:封装业务逻辑。
2.2:协调数据访问:Service层可以调用多个DAO层,对数据访问进行协调,确保数据的完 整性和一致性。
2.3:异常处理:捕获和处理异常情况,提供友好的错误信息给上层处理。
3、Repository数据访问层:对数据进行增删改查,其中增、删、改。对数据库数据进行操作。
了解完三层架构及其数据传输流程后。开始讲解bean,pojo,Entity三者区别。
bean,pojo, entity三者主要是为了更好封装数据以及数据流动,区分各个层级,做到层级分明,各司其职。

bean: javabean
定义:javabean是一种Java语言编写的可重用组件。它的方法命名,构造及行为必须符合特定的约定:
- 这个类必须有一个公共的缺省构造函数。
- 这个类的属性使用getter和setter来访问,其他方法遵从标准命名规范。
- 这个类应是可序列化的。Serialization接口。
- 因为这些要求主要是靠约定而不是靠实现接口,所以许多开发者把JavaBean看作遵从特定命名约定的POJO。
JavaBean的任务就是: “Write once, run anywhere, reuse everywhere”,即“一次性编写,任何地方执行,任何地方重用”。
JavaBean可分为两种:一种是有用户界面(UI,User Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。
使用:
点击查看代码
/**
* javaBean
*/
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private Integer age;
public Users() {
}
public Users(Long id,Integer age){
this.id = id;
if (verifyAge(age)) this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
//可以写相对应的业务逻辑
private boolean verifyAge(Integer age){
return age > 18 ? true : false;
}
}
pojo:Plain Ordinary Java Object:简单的JavaBean对象
定义:
- 实际上是简单的Java对象,实际就是普通JavaBean。
- 不实现任何接口和不继承任何类。
- 在编写POJO类时,通常需要为该类提供无参构造函数,以便在创建对象时进行初始化操作。
- 只能包含getter方法和setter方法,以及Object重写方法(toString,equals,hashCode,clone),不包含业务逻辑。
内容:
Pojo包含 DTO、VO、BO、PO、DO
点击查看代码
/**
* pojo
*/
public class Users {
private String username;
private String password;
public Users() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return super.toString();
}
}
2.1:DTO
定义:
DTO是pojo类中的一种,主要是用于与封装程序传递到后端的数据,以及封装返回的数据给程序。
DTO = Data Transfer Object = 数据传输对象。
Dto作用:
能提高数据传输的速度(减少了传输字段)
能隐藏后端表结构
例如:数据库字段有:username,password,Id_number,gender,address。
程序只需要 username,gender,address
点击查看代码
/**
* pojo:DTO
*/
public class UsersDto {
private String username;
private String gender;
private String address;
public UsersDto() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
2.2:VO:用于封装后端返回给前端的数据
定义:
VO是pojo类中的一种,封装后端返回给前端的数据。
VO = value object。
VO对象在控制层与视图层进行传输交换。
作用:
前端展示的数据,在接口数据返回给前端的时候需要转成VO
个人理解使用场景,接口层服务中,将DTO转成VO,返回给前台
2.3:BO:用于后端Service服务端数据处理逻辑
business object业务对象,即Service层
主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。
比如一个用户,有基本信息、工作经历、 人员关系等等。
我们可以把基本信息对应一个PO,工作经历对应一个PO, 人员关系对应一个PO。
建立一个对应简历的BO对象处理简历,每个BO包含这些PO。
这样处理业务逻辑时,我们就可以针对BO去处理。
一个BO对象可以包含多个PO对象
点击查看代码
/**
* pojo:BO
*/
public class UsersBO {
private String username;
private String gender;
//用户地址PO对象
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public UsersBO() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
PO:Persistent Object持久化对象
定义:
出现位置为数据库数据,用来存储数据库提取的数据
只存储数据,不包含数据操作
个人理解使用场景,在数据库层中,获取的数据库数据存储到PO中,然后转为BO返回到服务层中,服务层通过BO对象处理。
作用:
PO对象与Entity,DAO对象作用相同,跟数据库导入记录数据一一对应的映射关系。
一个PO对象就是一条数据库对应的数据。

点击查看代码
/**
* pojo:Po
*/
public class UsersPo {
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Entity:
定义:
实体bean,一般是用于ORM对象关系映射,一个实体映射成一张表,一般无业务逻辑代码。
负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个EntityBean对象相当于创建一条记录,删除一个EntityBean对象会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。
作用:
与PO对象相同,都是用于与数据库字段一一对应。例子与PO相同
DAO:用于处理数据访问层的,作用与PO相同。
来源于:
链接:https://juejin.cn/post/7444047947250565171
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
浙公网安备 33010602011771号