日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一款IDEA插件神器,帮你一键转换DTO、VO、BO、PO、DO

發布時間:2025/3/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一款IDEA插件神器,帮你一键转换DTO、VO、BO、PO、DO 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今日推薦

推薦一個 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,代碼就生成好了

復雜對象轉化展示

代碼展示:

@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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。