我是靠谱客的博主 爱撒娇自行车,这篇文章主要介绍一款IDEA插件神器,帮你一键转换DTO、VO、BO、PO、DO,现在分享给大家,希望可以做个参考。

今日推荐

复制代码
1
复制代码
1
复制代码
1
2
3
4
5
6
7
8
9
10
11
推荐一个 Java 接口快速开发框架 干掉Random:这个类已经成为获取随机数的王者 Docker + Intellij IDEA,提升 10 倍生产力! 笑出腹肌的注释,都是被代码耽误的诗人! 同事乱用 Redis 卡爆,我真是醉了... RedisJson 横空出世,性能碾压ES和Mongo!

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,代码就生成好了

7d3633de267b0032d5a64db2aa5fe9f8.png 28e80a47c2a5a912528772ca921ad945.png

复杂对象转化展示

cf79da05e7909edb23f5e869474cd916.png

代码展示:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
@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

6d6e62d8079e5e8682635b93163d4fd3.png

在此推荐其他一个我常用插件:generateAllSetter,搭配食用更佳

4、如何下载

打开idea plugins,切market place 搜索:Simple Object Copy

b129502b0c3ec1437adc871720c6e5ae.png
插件优点:

1、可以节省一个个字段的设置的开发时间

2、避免了漏字段设置,ps:前端同学总是来问为啥字段总是null。

3、而且通过出入参的设计思想去开发,规范了代码,在有特殊请求转化的时候也比较方便。

注意:该插件需要付费,6元(人民币)每年,当然学生、教育机构、公益免费。

来源:juejin.cn/post/7053264631262871583

复制代码
1
复制代码
1
推荐文章
复制代码
1
复制代码
1
2
3
4
5
6
7
8
9
1、一款高颜值的 SpringBoot+JPA 博客项目 2、超优 Vue+Element+Spring 中后端解决方案 3、推荐几个支付项目! 4、推荐一个 Java 企业信息化系统 5、一款基于 Spring Boot 的现代化社区(论坛/问答/社交网络/博客)

最后

以上就是爱撒娇自行车最近收集整理的关于一款IDEA插件神器,帮你一键转换DTO、VO、BO、PO、DO的全部内容,更多相关一款IDEA插件神器内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(100)

评论列表共有 0 条评论

立即
投稿
返回
顶部