文章目录
- 简介
- POJO与ELB的区别
- POJO真正的意思
- 常见的POJO类
- DTO
- DAO
- PO
- VO
- Entity
简介
什么是POJO?POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB(EJB是Enterprise Java Beans技术的简称, 又被称为企业Java Beans。)混淆所创造的简称。POJO是Plain OrdinaryJava Object的缩写,但是它通指没有使用Entity Beans的普通java对象,可以把POJO作为支持业务逻辑的协助类。
POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表,对于广大的程序员,可以很方便的将POJO类当做对象来进行使用,当然也是可以方便的调用其get,set方法。
POJO与ELB的区别
POJO 和 JavaBean 是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Pure Ordinary Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,但是JavaBean则比 POJO复杂很多, Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上讲,任何一个 Java 类都可以是一个 Bean 。
但通常情况下,由于 Java Bean 是被容器所创建(如 Tomcat) 的,所以 Java Bean 应具有一个无参的构造器,另外,通常 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久性。 Java Bean 是不能被跨进程访问的。JavaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被拿去用,这个扳子也提供多种功能(你可以拿这个扳子扳、锤、撬等等),而这个扳子就是一个组件。 一般在web应用程序中建立一个数据库的映射对象时,我们只能称它为 POJO。POJO(Plain Old Java Object) 这个名字用来强调它是一个普通java对象,而不是一个特殊的对象,其主要用来指代那些没有遵从特定的Java对象模型、约定或框架(如EJB)的Java对象。理想地讲,一个POJO是一个不受任何限制的Java对象(除了Java语言规范)
POJO真正的意思
POJO = “Plain Old Java Object”,是 MartinFowler 等发明的一个术语,用来表示普通的Java对象,不是JavaBean, EntityBean 或者 SessionBean。POJO 不担当任何特殊的角色,也不实现任何特殊的Java框架的接口如,EJB,JDBC等等。
即POJO是一个简单的普通的Java对象,它不包含业务逻辑或持久逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。
常见的POJO类
DTO
DTO是用于在不同层之间传输数据的对象。它通常用于将数据从数据库层传输到服务层或传输数据从服务层到表示层。DTO对象包含一些字段,这些字段的类型和名称与源数据对象相对应,但通常不包含业务逻辑。DTO主要用于远程调用等需要大量传输对象的地方。比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果。
DTO可能还需要组合多个表查询到的对象成为一个大对象,以便减少网络的调用,或者给前端传输一些不在数据库中查到的属性,所以需要添加属性。对于不同的客户端展现,可以选择一次封装所有可能的数据组成DTO,也可以为每种展现创建不同的DTO。各有利弊。
- 单个大DTO,减少调用次数,只用创建一次,但是难以掌握传输的数据
- 不同的小DTO,要创建很多DTO,传输数据很清晰
DAO
包含对数据的访问,负责持久层的操作 。通常需要结合PO来访问数据库,主要用来封装对数据的访问,并不转化成其它对象。
public interface BaseDao {
// 通用的增删改查操作
boolean insert(Student student);
User selectById(long id);
}
// 实现
public class StudentDaoImpl implements BaseDao {
@Override
public boolean insertStudent(Student student) {
students.add(student);
return true;
}
······
}
PO
持久化对象,是一种O/R映射关系,可以看成是数据库表到java对象的映射。PO对象应该只包含和数据库表对应的属性。在《阿里巴巴开发手册》中,PO也叫DO(Data Object)数据对象,与数据库表结构一一对应,通过DAO层向上传输数据源对象。
VO
VO(View Object)视图对象,主要用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。VO对象可以包含多个DTO对象,《阿里巴巴开发手册》中建议把输出的显示层对象命名为VO。
public class UserVO {
private final String username;
private final String email;
// Constructor
public UserVO(String username, String email) {
this.username = username;
this.email = email;
}
// Getter methods
public String getUsername() {
return username;
}
public String getEmail() {
return email;
}
}
Entity
实体,和PO的功能类似,和数据表一一对应,一个实体一张表
参考资料
-
EJB百度百科
-
POJO百度百科
-
概念POJO、DTO、DAO、PO、BO、VO、QO、ENTITY详解
-
Java DTO、VO 和 PO 解释与使用示例