一款IDEA插件神器,帮你一键转换DTO、VO、BO、PO、DO
今日推薦
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
推薦文章1、一款高顏值的 SpringBoot+JPA 博客項目2、超優 Vue+Element+Spring 中后端解決方案3、推薦幾個支付項目!4、推薦一個 Java 企業信息化系統5、一款基于 Spring Boot 的現代化社區(論壇/問答/社交網絡/博客)總結
以上是生活随笔為你收集整理的一款IDEA插件神器,帮你一键转换DTO、VO、BO、PO、DO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot快速开发利器:Spr
- 下一篇: 优质 Spring Boot 在线教育平