一款IDEA插件神器,帮你一键转换DTOVOBOPODO
Posted Java知音_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一款IDEA插件神器,帮你一键转换DTOVOBOPODO相关的知识,希望对你有一定的参考价值。
点击关注公众号,实用技术文章及时了解
1、什么是DTO、VO、BO、PO、DO、POJO
POJO的定义是无规则简单的对象,在日常的代码分层中pojo会被分为VO、BO、 PO、 DTO
VO (view object/value object)表示层对象
1、前端展示的数据,在接口数据返回给前端的时候需要转成VO
2、个人理解使用场景,接口层服务中,将DTO转成VO,返回给前台
B0(bussines object)业务层对象
1、主要在服务内部使用的业务对象
2、可以包含多个对象,可以用于对象的聚合操作
3、个人理解使用场景,在服务层服务中,由DTO转成BO然后进行业务处理后,转成DTO返回到接口层
PO(persistent object)持久对象
1、出现位置为数据库数据,用来存储数据库提取的数据
2、只存储数据,不包含数据操作
3、个人理解使用场景,在数据库层中,获取的数据库数据存储到PO中,然后转为DTO返回到服务层中
DTO(Data Transfer Object)数据传输对象
1、在服务间的调用中,传输的数据对象
2、个人理解,DTO是可以存在于各层服务中(接口、服务、数据库等等)服务间的交互使用DTO来解耦
DO(domain object)领域实体对象
DO 现在主要有两个版本:
①阿里巴巴的开发手册中的定义,DO( Data Object)这个等同于上面的PO
②DDD(Domain-Driven Design)领域驱动设计中,DO(Domain Object)这个等同于上面的BO
参考文档:
https://juejin.cn/post/6952848675924082718
https://juejin.cn/post/6844904046097072141
https://zhuanlan.zhihu.com/p/264675395
2、插件如何完成转化
插件名称:Simple Object Copy
1、定义方法出入参
2、光标定位方法内,使用快捷键ALT+INSERT(WIN) 、 command + N(mac) ,或者右键鼠标选择Generate,弹出生成选项框后,选择genCopyMethod,代码就生成好了
复杂对象转化展示
代码展示:
@Data
public class UserVO
private String name;
private Date entryDate;
private String userId;
private List roleList;
private RoomVO room;
public static UserVO convertToUserVO(UserDTO item)
if (item == null)
return null;
UserVO result = new UserVO();
result.setName(item.getName());
result.setEntryDate(item.getEntryDate());
result.setUserId(item.getUserId());
List<RoleDTO> roleList = item.getRoleList();
if (roleList == null)
result.setRoleList(null);
else
result.setRoleList(roleList.stream().map(UserVO::convertToRoleVO).collect(Collectors.toList());
result.setRoom(convertToRoomVO(item.getRoom()));
return result;
public static RoomVO convertToRoomVO(RoomDTO item)
if (item == null)
return null;
RoomVO result = new RoomVO();
result.setRoomId(item.getRoomId());
result.setBuildingId(item.getBuildingId());
result.setRoomName();
result.setBuildingName();
return result;
public static RoleVO convertToRoleVO(RoleDTO item)
if (item == null)
return null;
RoleVO result = new RoleVO();
result.setRoleId(item.getRoleId());
result.setRoleName(item.getRoleName());
result.setCreateTime(item.getCreateTime());
return result;
@Data
public class UserDTO
private String name;
private Date entryDate;
private String userId;
private List roleList;
private RoomDTO room;
@Data
public class RoleVO
private String roleId;
private String roleName;
private LocalDateTime createTime;
@Data
public class RoleDTO
private String roleId;
private String roleName;
private LocalDateTime createTime;
@Data
public class RoomVO
private String roomId;
private String buildingId;
private String roomName;
private String buildingName;
@Data
public class RoomDTO
private String roomId;
private String buildingId;
3、其他转化方式
1.无入侵
市面上有很多类似的工具类,比较常用的有
Spring BeanUtils (copyProperties)
Cglib BeanCopier (copyProperties)
Apache BeanUtils (copyProperties)
Apache PropertyUtils (copyProperties)
Dozer
mapstruct
JSON 序列化 再反序列化
这些工具,不仅要引入相应的依赖jar包,而且对代码有入侵,要调用对应得api方法才能进行转化,一旦遇到类型不一致,字段名稍有变动,就需要另写java代码补全字段,整体代码非常丑陋。
2.性能优势
相比上面的工具类,不是使用反射、就是是用代理、序列化操作。相比于纯正的set方法去转化,差距不是一个量级。此次不赘述。
3.灵活性、兼容性
跟上述工具类相比插件有很大优势,不再赘述,下面我们比较一下,我之前常用的idea插件generateO2O
在此推荐其他一个我常用插件:generateAllSetter,搭配食用更佳
4、如何下载
打开idea plugins,切market place 搜索:Simple Object Copy
插件优点:
1、可以节省一个个字段的设置的开发时间
2、避免了漏字段设置,ps:前端同学总是来问为啥字段总是null。
3、而且通过出入参的设计思想去开发,规范了代码,在有特殊请求转化的时候也比较方便。
注意:该插件需要付费,6元(人民币)每年,当然学生、教育机构、公益免费。
来源:juejin.cn/post/7053264631262871583
推荐
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
以上是关于一款IDEA插件神器,帮你一键转换DTOVOBOPODO的主要内容,如果未能解决你的问题,请参考以下文章
idea插件神器教你如何使用IDEA一键set实体类中所有属性