POJO转VO,让你不再痛苦
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJO转VO,让你不再痛苦相关的知识,希望对你有一定的参考价值。
参考技术A 导入依赖,一般是结合lombok一起使用,不然略显单调(lombok的使用说明可以查看之前文章):其实还有另外一种方式,就是基于maven插件的做法,就可以不用导入 mapstruct-processor 了。
但是一般还是使用的第一种方式。
然后在idea->settings->annotation processors->启用注解处理
准备一个Goods 对象和User对象:
现在我需要拿到商品和用户信息,只需要新建一个DTO--GoodsInfoDTO:
然后一个一个的set属性吗?NO,来看mapStruct怎么做的。
新建一个converter类,名字随意,我这里叫 GoodsInfoConverter :
其中的 GoodsInfoConverter INSTANCE = Mappers.getMapper(GoodsInfoConverter.class); 必不可少,类似于一个SPI接口,就可以让你再客户端通过GoodsInfoConverter.INSTANCE获取到它的实例。
下面的@Mappings就是对象-DTO之间的映射关系,这里要转换 goods 、 user 对象到DTO,所以传入了两个参数。其中的 source 是需要转换的对象属性,如果有多个对象需要转换,则需要在前面加入对应的对象名,例如 goods.id ,用过hibernate的同学会觉得格外小清新~.其中的 target 是DTO中的属性名,如果需要转换的对象和DTO属性名相同,则不需要配置。还有一些其它参数,我就不一一介绍了。
最重要的一步,就是编译,mvn clean一下:
你会发现在target目录的generated-sources下会生成一个 GoodsInfoConverterImpl :
完全是自动生成的,你不需要管。当我们mvn打包的时候会自动将该文件打包进去。
客户端怎么使用呢?来看一下:
是不是很简单,而且省去了很多事,比bean copy的性能也要好。完全是基于set来实现的。
mapStruct集成lombok时,lombok的版本设置成新版本吧。反正笔者1.16.8的lombok会报错,提示Mappings找不到映射的属性,1.16.18是可以编译通过的。如果你觉得这些还不够用,可以去查看官网,谢谢~
快速理解 POJO,VO,DO,DTO,Entity
项目中总是能看到包名叫 POJO,VO,DO,DTO,Entity的一些包,这些包中的对象是什么用处呢 ?本文可以让你快速理解,适合小白!
先来一张图帮助理解:
POJO
全称:Plain Ordinary Java Object
POJO对象的特点:
- 类型中如果存在成员变量,必须提供
get
,set
方法。 - 提供默认无参构造
- 可以实现
Serializable
,也可以不实现。 - 不能实现容器或者框架所规定的接口。
POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
所以这些都属于POJO
:
VO
全称:Value Object
显示层对象,通常是Web向模板渲染引擎层传输的对象。
用于封装后端给前端返回的出参对象。一般命名为xxxVO
。
对应的入参对象可以封装为xxxParam
。
DTO
全称:Data Transfer Object
数据传输对象,Service或Manager向外传输的对象
例如在Service
中需要请求其他的API
,发起HTTP
请求。这时候API需要有入参,我们就可以用DTO
来封装一个对象作为该API 的入参
。
数据传输对象:xxxDTO
,xxx为业务领域相关的名称。
DO
全称:Data Object
用于封装DAO层中的对象,通过DAO层向上传输数据源对象。
数据对象:xxxDO,xxx即为数据表名。
例如有一个需求需要连接两个表查询,这样就没有一个实体可以接受查询结果了,这种情况下封装一个DO就是很好的解决办法。
Entity
全称:Plain Ordinary Java Object
与数据库中表的字段一一对应,用于接受表中数据的对象
xxxEntity
,用于实体类。
以上是关于POJO转VO,让你不再痛苦的主要内容,如果未能解决你的问题,请参考以下文章