当前位置: 首页 > 后端技术 > Java

DTO、VO、BO、PO、DO

时间:2023-04-02 00:40:27 Java

1的优雅转换。什么是DTO、VO、BO、PO、DO、POJO?VO,BO,PO,DTOVO(viewobject/valueobject)表示图层对象1,界面数据返回给前端时,前端显示的数据需要转换成VO2。个人理解使用场景,在接口层服务中,将DTO转换为VO,返回给前台B0(bussinesobject)业务层对象1.服务内部主要使用的业务对象2.可以包含多个对象,可以是用于对象聚合操作3.个人理解使用场景,服务于服务层其中,从DTO转换为BO再进行业务处理后,转换为DTO返回给接口层PO(persistentobject)persistentobject1.出现的位置是数据库数据,用来存放从数据库中提取出来的数据。2.只存储数据,不包含数据操作3.个人理解使用场景。在数据库层,将获取的数据库数据存储在PO中,然后转换为DTO返回给服务层。DTO(DataTransferObject)数据传输对象1.在服务之间的调用中,传输的数据对象2.个人理解,DTO可以存在于服务的每一层(接口、服务、数据库等)服务之间的交互使用DTO来decoupleDO(domainobject)领域实体对象DO现在主要有两个版本:①阿里巴巴开发手册中定义,DO(DataObject)相当于上面的PO②DDD(Domain-DrivenDesign)领域驱动设计,DO(Domainobject)相当于上面的BO参考文档:https://juejin.cn/post/6952848675924082718https://juejin.cn/post/6844904046097072141https://zhuanlan.zhihu.com/p/2646753952,如何完成插件插件名称的转换:SimpleObjectCopy定义方法入口和出口参数光标定位在方法中,使用快捷键ALT+INSERT(WIN)、command+N(mac),或者右击鼠标选择Generate,弹出生成选项框后,选择genCopyMethod,代码就会生成。复杂对象转换展示@DatapublicclassUserVO{私有字符串名称;私人日期条目日期;私有字符串用户名;私有列表角色列表;私人房间VO房间;publicstaticUserVOconvertToUserVO(UserDTOitem){if(item==null){returnnull;}UserVO结果=newUserVO();结果.setName(item.getName());结果.setEntryDate(item.getEntryDate());结果.setUserId(item.getUserId());ListroleList=item.getRoleList();if(roleList==null){result.setRoleList(null);}else{result.setRoleList(roleList.stream().map(UserVO::convertToRoleVO).collect(Collectors.toList());}result.setRoom(convertToRoomVO(item.getRoom()));返回结果;}publicstaticRoomVOconvertToRoomVO(RoomDTOitem){if(item==null){returnnull;}RoomVOresult=newRoomVO();result.setRoomId(item.getRoomId());}结果.setBuildingId(item.getBuildingId());结果.setRoomName();结果.setBuildingName();返回结果;}publicstaticRoleVOconvertToRoleVO(RoleDTOitem){if(item==null){returnnull;}RoleVO结果=newRoleVO();结果.setRoleId(item.getRoleId());结果.setRoleName(item.getRoleName());结果.setCreateTime(item.getCreateTime());返回结果;}}@Datapublic类UserDTO{私有字符串名称;私人日期条目日期;私有字符串用户名;私有列表角色列表;privateRoomDTOroom;}@DatapublicclassRoleVO{privateStringroleId;私有字符串角色名;privateLocalDateTimecreateTime;}@DatapublicclassRoleDTO{privateStringroleId;私有字符串角色名;privateLocalDateTimecreateTime;}@DatapublicclassRoomVO{privateStringroomId;私有字符串buildingId;私人海峡ing房间名称;privateStringbuildingName;}@DatapublicclassRoomDTO{privateStringroomId;privateStringbuildingId;}三、其他改造方法1、市面上有很多类似的工具,比较常用的有1、SpringBeanUtils(copyProperties)2、CglibBeanCopier(copyProperties)3、ApacheBeanUtils(copyProperties)4、ApachePropertyUtils(copyProperties)5、Dozer6、mapstruct7、JSON序列化和反序列化这些工具,不仅要引入对应的依赖jar包,还要对代码进行入侵,需要调用对应的api方法来转变。一旦类型不一致或者字段名稍有变化,就需要再写一个java代码来补全字段。整体代码非常丑陋。2.与上面的工具类相比,性能优势,要么使用反射,要么使用代理和序列化操作。与纯set方法转换相比,差距不是一个数量级。这次我就不细说了。3、灵活性和兼容性与以上工具相比,插件有很大的优势,这里不再赘述。让我们在下面比较它们。之前用的idea插件generateO2O对比了我们插件的特点。SimpleObjectCopy主要是根据返回值。,根据字段名去匹配,不会导致返回值缺失属性generateO2O以入参为主要匹配字段,如果存在缺失属性,SimpleObjectCopy支持对象转换包含对象,对象包含列表和集合。generateO2O不支持子对象转换,不支持列表泛型转换DifferentSimpleObjectCopy相同的输入输出参数类名,生成全限定类名generateO2O相似名有问题这里推荐另一个我经常用的插件:generateAllSetter,最好是和它一起吃4.idea插件怎么下载打开,切市场搜索:SimpleObjectCopy试用30天,支付宝,微信,PayPal都可以支付。每年6元(RMB),当然学生、教育机构、公益免费。官方邮件会要求你注册一个jb账号并启用账号。你可以在官网上找到你的激活码,然后不用用idea登录就可以使用了。也可以在idea中登录jb账号在线试用。这可能是您的第一个付费插件。谢谢支持,哈哈!如果你没有钱,你也可以给我发邮件。我正在寻找一种免费的方式。下班前中途使用插件1.可以节省字段设置的开发时间2.避免漏掉字段设置,ps:前端同学总是来问为什么字段总是null。3、而且通过输入输出参数的设计思路开发,代码规范,有特殊要求转换时更方便。