标签:
首先是从概念上来说
POJO,全称Plain Ordinary Java Object,我理解为极其单纯的Java对象
一般只有属性字段,无参构造以及get和set方法,也是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。
因此它特别灵活可扩展,可以实现让一个模型贯穿多个层,简单来说可以理解成不包含业务逻辑的单纯用来存储数据的 java类
entity
实体bean,一般是用于ORM对象关系映射,一个实体映射成一张表,一般无业务逻辑代码。
负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个EntityBean对象相当于创建一条记录,删除一个EntityBean对象会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。
关于区分POJO和entity,查了一些资料也没发现有特别大的差别,功能上来说差别不大,只能从含义上大致区分一下。不过现在大都是用entity来作为一个表映射的类。
DTO(Data Transfer Object)数据传输对象
这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,现在多用于展示层与服务层之间的数据传输对象。
那么问题来了,为什么要用DTO呢?为什么不能直接用实体模型呢
首先是效率问题:
因为原始的请求方式带来的缺点有很多,多次请求耗费一定的网络资源,减慢效率。如果一次性返回整个实体类,还可能造成数据库表结构的泄漏。
DTO层可以隔离Domain Model,让DoMain Model的改动不会直接影响到UI;保持Domain Model的安全,并且不暴露业务逻辑。
Domain Model可以理解为 为POJO增加业务逻辑的方法(比如单据审核、转帐……)之后变成。
举个例子
比如我们一张表有100个字段,那么对应的PO就有100个属性。
但是我们界面上只要显示10个字段,
客户端用service来获取数据,没有必要把整个PO对象传递到客户端,
这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.
PO是指持久对象(persistant object持久对象)。
为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。
VO是指值对象或者View对象(Value Object、View Object)。
为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。
还有就是关于持久化就是把你的数据写到文件或数据库保存下来的过程
代码举例
POJO到PO
@GetMapping(value="/addgames")
public void addGames() {
Games game = new Games();//初始化一个POJO,或者entity
//set值作为是持久化处理的过程
game.setId(12);
game.setName("龙珠超宇宙");
game.setType("热血格斗");
game.setSeries("七龙珠");
game.setPrice(10.0);
//调用saveOne方法进行持久化,保存进数据库,变为PO,代表一条表数据
gamesMapper.saveOne(game);
}
POJO到VO
@RequestMapping(value = "/thymeleaf")
public String ThymeleaPage(Model model){
Hero hero = heromapper.getAHeros();//调用DAO层的方法拿到一个POJO
model.addAttribute("heroInfo", hero);//绑定到heroInfo,变为一个VO
return "index";
}
新建DTO,只选择需要传输到前端的字段数据
@Data
public class GamesDTO
{
private Integer id;
private String name;
private String type;
private String image;
}
同样的可以去增加数据绑定。
标签:
来源: https://blog.csdn.net/qq_34532187/article/details/82858782