POJO(Plain Ordinary Java Object)
简单的Java对象,POJO类中有属性和get、set方法,但是没有业务逻辑。有时可以作为VO(value-object)或DTO(Data Transfer Object)来使用。
JavaBean
JavaBean是一种Java语言写成的可重用组件,是符合一定规范编写的Java类,不是一种技术,而是一种规范。javaBean可以使应用程序更加面向对象,可以把数据封装起来,把应用的业务逻辑和显示逻辑分离开,降低了开发的复杂程度和维护成本。
POJO和JavaBean的区别
POJO就是比JavaBean更纯洁的简单类或接口,POJO严格遵循简单对象的概念,而JavaBean往往会封装一些简单逻辑。
POJO主要用于数据的临时传递,它只能装载数据, 作为数据存储的载体,而不具有业务逻辑处理的能力。
Entity
实体bean,一般是用于ORM对象关系映射,一个实体映射成一张表,一般无业务逻辑代码。
负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个EntityBean对象相当于创建一条记录,删除一个EntityBean对象会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。
DTO(Data Transfer Object)数据传输对象
举个例子
比如我们一张表有100个字段,那么对应的PO就有100个属性。
但是我们界面上只要显示10个字段,
客户端用service来获取数据,没有必要把整个PO对象传递到客户端,
这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构。
PO(persistant object)持久对象
为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。
VO(Value Object、View Object)值对象或者View对象
为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。
BO(Business Object)业务对象
POJO在业务层的体现,对于业务操作来说,更多的是从业务上来包装对象,如一个User的BO,可能包括name, age, sex, privilege, group等,这些属性在数据库中可能会在多张表中,因为每一张表对应一个PO,而我们的BO需要这些PO组合起来(或说重新拼装)才能成为业务上的一个完整对象。
DAO(data access object)数据访问对象
主要用来封装对数据的访问,DAO中包含了各种数据库的操作方法。
举例
POJO到PO:
@GetMapping(value="/adduser")
public void addUser() {
User user = new User(); //初始化一个POJO,或者entity
user.setUsername("张三");
user.setAddress("北京");
user.setBirthday(new Date());
user.setIsDelete("0");
user.setSex("M");
userMapper.insert(user); //调用insert方法进行持久化,保存进数据库,变为PO,代表一条表数据
}
POJO到VO:
@RequestMapping(value = "/mainpage")
public String mainPage(Model model){
User user = userMapper.selectByPrimaryKey(1); //调用DAO层的方法拿到一个POJO
model.addAttribute("userInfo", user); //绑定到userInfo,变为一个VO
return "index";
}
DTO:
@Data
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
private String isDelete;
}
DAO:
public interface UserMapper {
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
}