应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

一款IDEA插件帮你优雅转化DTOVOBOPODO

  POJO的定义是无规则简单的对象,在日常的代码分层中pojo会被分为VO、BO、PO、DTO
  VO(viewobjectvalueobject)表示层对象
  1、前端展示的数据,在接口数据返回给前端的时候需要转成VO
  2、个人理解使用场景,接口层服务中,将DTO转成VO,返回给前台
  B0(bussinesobject)业务层对象
  1、主要在服务内部使用的业务对象
  2、可以包含多个对象,可以用于对象的聚合操作
  3、个人理解使用场景,在服务层服务中,由DTO转成BO然后进行业务处理后,转成DTO返回到接口层
  PO(persistentobject)持久对象
  1、出现位置为数据库数据,用来存储数据库提取的数据
  2、只存储数据,不包含数据操作
  3、个人理解使用场景,在数据库层中,获取的数据库数据存储到PO中,然后转为DTO返回到服务层中
  DTO(DataTransferObject)数据传输对象
  1、在服务间的调用中,传输的数据对象
  2、个人理解,DTO是可以存在于各层服务中(接口、服务、数据库等等)服务间的交互使用DTO来解耦
  DO(domainobject)领域实体对象
  DO现在主要有两个版本:
  阿里巴巴的开发手册中的定义,DO(DataObject)这个等同于上面的PO
  DDD(DomainDrivenDesign)领域驱动设计中,DO(DomainObject)这个等同于上面的BO
  参考文档:https:juejin。cnpost6952848675924082718
  https:juejin。cnpost6844904046097072141
  https:zhuanlan。zhihu。comp264675395
  插件名称:SimpleObjectCopy
  1。定义方法出入参
  2。光标定位方法内,使用快捷键ALTINSERT(WIN)、commandN(mac),或者右键鼠标选择Generate,弹出生成选项框后,选择genCopyMethod,代码就生成好了
  需要手写的代码
  一键生成后的展示
  复杂对象转化展示(一键生成后的展示)
  复杂对象转化源码示例:Data
  publicclassUserVO{
  privateStringname;
  privateDateentryDate;
  privateStringuserId;
  privateListRoleVOroleList;
  privateRoomVOroom;
  publicstaticUserVOconvertToUserVO(UserDTOitem){
  if(item){
  return;
  }
  UserVOresultnewUserVO;
  result。setName(item。getName);
  result。setEntryDate(item。getEntryDate);
  result。setUserId(item。getUserId);
  ListRoleDTOroleListitem。getRoleList;
  if(roleList){
  result。setRoleList;
  }else{
  result。setRoleList(roleList。stream。map(UserVO::convertToRoleVO)。collect(Collectors。toList);
  }
  result。setRoom(convertToRoomVO(item。getRoom));
  returnresult;
  }
  publicstaticRoomVOconvertToRoomVO(RoomDTOitem){
  if(item){
  return;
  }
  RoomVOresultnewRoomVO;
  result。setRoomId(item。getRoomId);
  result。setBuildingId(item。getBuildingId);
  result。setRoomName;
  result。setBuildingName;
  returnresult;
  }
  publicstaticRoleVOconvertToRoleVO(RoleDTOitem){
  if(item){
  return;
  }
  RoleVOresultnewRoleVO;
  result。setRoleId(item。getRoleId);
  result。setRoleName(item。getRoleName);
  result。setCreateTime(item。getCreateTime);
  returnresult;
  }
  }
  Data
  publicclassUserDTO{
  privateStringname;
  privateDateentryDate;
  privateStringuserId;
  privateListRoleDTOroleList;
  privateRoomDTOroom;
  }
  Data
  publicclassRoleVO{
  privateStringroleId;
  privateStringroleName;
  privateLocalDateTimecreateTime;
  }
  Data
  publicclassRoleDTO{
  privateStringroleId;
  privateStringroleName;
  privateLocalDateTimecreateTime;
  }
  Data
  publicclassRoomVO{
  privateStringroomId;
  privateStringbuildingId;
  privateStringroomName;
  privateStringbuildingName;
  }
  Data
  publicclassRoomDTO{
  privateStringroomId;
  privateStringbuildingId;
  }
  1。无入侵市面上有很多类似的工具类,比较常用的有
  1、SpringBeanUtils(copyProperties)
  2、CglibBeanCopier(copyProperties)
  3、ApacheBeanUtils(copyProperties)
  4、ApachePropertyUtils(copyProperties)
  5、Dozer
  6、mapstruct
  7、JSON序列化再反序列化
  这些工具,不仅要引入相应的依赖jar包,而且对代码有入侵,要调用对应得api方法才能进行转化,一旦遇到类型不一致,字段名稍有变动,就需要另写java代码补全字段,整体代码非常丑陋。
  举例:
  1。mapstruct
  同样的代码,,不仅要引入依赖、写如下转化mapper,还要,在对应地方调用对应api(代码入侵验证),然而SimpleObjectCopy只需要一键生成。
  RoomDTO中不存在的roomName、buildingName还要mapstruct另写方法,很容易忽略。源实体中不存在的属性,没有提示,小心前端总是问为啥都是。
  在SimpleObjectCopy插件代码生成后,不存在的字段也生成了空方法,直接编译提示补充,不容易忽略
  需要手写的代码:Mapper(componentModelspring,uses{RoleVOMapper。class,RoomVOMapper。class})
  publicstrongtoutiaooriginspaninterfacestrongstrongtoutiaooriginspanUserMapperstrong{
  UserConverterINSTANCEMappers。getMapper(UserConverter。class);
  UserVOtoUserVO(UserDTOuserDTO);
  }
  Mapper(componentModelspring)
  publicstrongtoutiaooriginspaninterfacestrongstrongtoutiaooriginspanRoleMapperstrong{
  RoleVOtoRoleVO(RoleDTOroleDTO);
  }
  Mapper(componentModelspring)
  publicstrongtoutiaooriginspaninterfacestrongstrongtoutiaooriginspanRoomMapperstrong{
  RoomVOtoRoomVO(RoomDTOroomDTO);
  }
  publicstrongtoutiaooriginspanclassstrongstrongtoutiaooriginspanMainstrong{
  strongtoutiaooriginspanpublicstrongstrongtoutiaooriginspanstaticstrongstrongtoutiaooriginspanvoidstrongstrongtoutiaooriginspanmainstrong(String〔〕args){
  UserDTOuser;
  UserVOuserVOUserMapper。INSTANCE。toUserVO(user);
  userVO。getRoomVO。setRoomName(大厅1);
  userVO。getRoomVO。setBuildingName(尚德楼);
  }
  }
  1。BeanUtils
  性能稍差。
  不支持复杂对象还是要写大量代码,代码字段不清晰不易理解,别人接手难。RoomDTO中不存在的roomName、buildingName还要BeanUtils另写方法,很容易忽略。源实体中不存在的属性,没有提示,小心前端总是问为啥都是。
  需要手写的代码Data
  publicstrongtoutiaooriginspanclassstrongstrongtoutiaooriginspanUserVOstrong{
  privateStringname;
  privateDateentryDate;
  privateStringuserId;
  privateListRoleVOroleList;
  privateRoomVOroom;
  publicstaticUserVOconvertToUserVO(UserDTOitem){
  if(item){
  return;
  }
  UserVOresultnewUserVO;
  BeanUtils。copyProperties(item,result);
  ListRoleDTOroleListitem。getRoleList;
  if(roleList){
  result。setRoleList;
  }else{
  result。setRoleList(roleList。stream。map(UserVO::convertToRoleVO)。collect(Collectors。toList);
  }
  result。setRoom(convertToRoomVO(item。getRoom));
  returnresult;
  }
  publicstaticRoomVOconvertToRoomVO(RoomDTOitem){
  if(item){
  return;
  }
  RoomVOresultnewRoomVO;
  BeanUtils。copyProperties(item,result);
  result。setRoomName;
  result。setBuildingName;
  returnresult;
  }
  publicstaticRoleVOconvertToRoleVO(RoleDTOitem){
  if(item){
  return;
  }
  RoleVOresultnewRoleVO;
  BeanUtils。copyProperties(item,result);
  returnresult;
  }
  }
  2。性能优势
  相比上面的工具类,不是使用反射、就是是用代理、序列化操作。相比于纯正的set方法去转化,差距不是一个量级。此次不赘述。
  3。灵活性、兼容性
  跟上述工具类相比插件有很大优势,不再赘述,下面我们比较一下,我之前常用的idea插件generateO2O
  在此推荐其他一个我常用插件:generateAllSetter,搭配食用更佳,
  4。如何下载?
  打开ideaplugins,切marketplace搜索:SimpleObjectCopy
  来源:juejin。cnpost7053264631262871583

又偷了,韩国盯上满汉全席近日,韩国旅游发展官方微博称:来到韩国,怎么能不尝下,韩国宫廷满汉全席一事,引发网友群嘲。网友调侃称:你猜为什么叫满汉全席?韩国有满汉吗?最终,韩国旅游发展官方删除……还记得宝莲灯里的嫦娥吗?45岁长这样?Hio(),小橘子们!还记得《宝莲灯》里温文尔雅的嫦娥吗?近期,颜丹晨参加中国电影大数据盛典,现在的她,面容姣好,气质出众,完全看不出来已经45岁了!颜……Qunnect推出美国首创的GothamQ网络研究中心,推动据美通社4月14日报道,量子安全网络技术公司Qunnect宣布扩建位于布鲁克林海军造船厂的设施。新建的4000平方英尺研发设施和1500平方英尺的GothamQ网络研究中心将支……医护集体违规,院长下令撒谎,其危害甚于庸医误人刘女士万万没有想到,她刚刚生下的婴儿在住院期间,护士竟然将配方奶输进孩子的静脉;刘女士更没有想到,其后医院及主管部门的一系列做法,都出乎她的想象。01刘女士是一名外科医生……防火演练筑平安践行理念护儿童为了进一步建设美丽家园,践行人民至上,生命至上的理念,君安社区特邀塔子湖街道君安社区驻点领导段书记、平安办主任张主任在汉高幼儿园开展针对园内幼儿防火消防知识与演练。202……脱口秀演员庞博能让谁为老牌男装报喜鸟买单?界面新闻记者陈奇锐界面新闻编辑楼婍沁本土男装品牌报喜鸟近日宣布脱口秀演员庞博为代言人,随后上线《庞博入职报喜鸟》宣传短片。该短片由上海创意营销工作室poptag负责……威尔仕健身就转卡理财致歉消费者质疑那到底能不能退卡?近日,威尔仕健身多家门店被曝出销售人员以承诺转卡投资收益等名义,诱导消费者购买超长年限会籍卡。不少威尔仕健身会员向新民帮侬忙反映,他们也遇到类似遭遇。3月16日,威尔仕健身发表……CBA消息网传广东试训2。11米新援霍楠再提林葳往事广东试训2。11米魔兽北京时间3月17日,CBA常规赛第三阶段的比赛正在火热进行中,尽管在赛前朱芳雨曾明确提出暂时不考虑第三外援,但是随着联赛形式的不断变化,广东男篮正在……奇闻异事!一个人竟然吃掉一桌子菜,喝掉一桶白酒,吃掉一盆米饭有一件发生在我身边的非常奇怪的事,至今我都想不清楚为什么?本村有个小伙子,体壮且高大,一天,跟自己媳妇吵架了。媳妇越骂越凶,小伙虽然孔武有力,但嘴皮子功夫实在是不堪一击,……女人35岁以后,每天早晨空腹一勺蜂王浆,身体会发生哪些变化蜂王浆这种自古就被认定的高级食材,对不少人群都可以起到改善身体机能的作用,特别是一些中年女性朋友,由于她们自身的生理情况限制,不少人长期都需要获得更多的营养来支撑自己的身体健康……十大公认音质好的骨传导耳机,分享几款音质表现好的骨传导耳机作为音乐爱好者的我,也一直在寻找一款好的骨传导耳机,听音乐对我来说不仅仅是一种消遣方式,更多是一种对生活、工作上压力和困难的舒缓,所以今天给大家推荐几款骨传导耳机。今天推荐这几……和而泰与博格华纳签订2。46亿欧元长期供应合同3月13日,和而泰公告,公司于近日与国际知名汽车零部件公司博格华纳签订供应合同。根据签署的供应合同约定,公司向博格华纳提供液体加热控制器产品,该项目合同总金额2。46亿欧元(折……
赵今麦这样的女孩子谁能不喜欢,演技好穿搭也是一流,少女感十足今天穿什么冬日生活打卡季在冬末初春的时候,似乎没有什么服装能比得过卫衣的时髦,虽然每次一提起卫衣,都会觉得这并不是什么有亮点的服装,甚至带着一些单调与平常感,可在整体的搭……官方这几款口红,我们真没出过小样!口红没一只是用到空管的,家里满满当当的口红堆在化妆台上,永远喜欢下一只口红!这是不是你的状态!如今众多大牌官方推出口红中小样,mini可爱的外观特别讨喜小小一只有特别方便随身携……壮族三月三临近广西歌圩摆擂台迎客来中新网南宁4月19日电(林洁琪陈沿佑)三月三,八方客人来到壮乡歌圩,这里有五色糯米饭、香醇的米酒,欢迎嘉宾来品尝,我们一起唱山歌4月19日,记者走进广西南宁市大明山风景旅游区,……21!中国国奥遭遇主场哨,裁判拒给点球,下场决战卫冕冠军北京时间3月24日凌晨,迪拜杯青年邀请赛全面开打,中国U23国奥对阵东道主阿联酋U23国奥。最终中国国奥01惜败对手,遭遇开门黑,因净胜球多1个,力压乌兹别克斯坦队排名倒数第二……超模亚历桑德拉安布罗休度假穿印花连体泳衣身材佳?超模亚历桑德拉安布罗休度假穿印花连体泳衣身材佳。亚历桑德拉。安布罗休出生于英国的一个中产阶级家庭,她是一位模特、演员和舞蹈家,同时也从事过服装制作工作。在一次旅行中她发现了一种……WotoKOL卧兔网络卡塔尔世界杯,蒙牛凭什么成为最终赢家?近日,卡塔尔世界杯在全世界的关注下落下帷幕。在这场史诗级的比赛里,有卢塞尔体育场的璀璨烟火,有梅罗决赛会师的无奈遗憾,有群雄决战绿茵场的叱咤风云,有无数球迷的热泪盈眶与此同时,……粤媒卡尔德克归化陷入停顿蒋光太与某中超豪门正商谈转会近期,多名归化球员纷纷返回巴西前景不明,仅有蒋光太1人留在中国。据《广州日报》报道,卡尔德克归化陷入停顿,蒋光太与某中超豪门洽谈转会事宜。文中表示,从2019年以来,国足……JetBrains又出神器啦!Fleet,体验飞一般的感觉简介java开发的同学可能对于JetBrains这家公司并不陌生,因为JetBrains号称拥有世界上最好的JAVA开发工具IDEA。确实IDEA非常好用,它满足了一个j……5千元人民币能兑换8万卢比,在尼泊尔能干啥?导游真的很值很多人会趁着自己年轻气盛,乘坐飞机到喜欢的国家游玩。毕竟年龄大了,腿脚也不方便,出去特别困难。(此处已添加小程序,请到今日头条客户端查看)而我是一个喜欢旅游的人,毕……CBA最新积分榜吉林爆发擒下广厦,北京狂揍四川,福建斩杀青岛北京时间1月21日,CBA常规赛继续进行,在已经结束的三场比赛中,吉林爆冷10194击败广厦,福建116105斩杀青岛,北京9869狂揍四川,目前在最新的积分榜上,广厦两连败跌……老话说一个鸡胗三副药一个猪肚三副药,吃了真实效果如何?不知道大家在日常生活中,有没有听说过这样的俗语一个猪肚三副药、一个鸡胗三副药,关于相同的说法可能还有很多,不过这两个是非常热门且常见。一个鸡胗三副药?很多人的口味比……有了梦想,才能一往无前我有一个梦想,有一天,我们能够实现立国信条,人人生而平等;我有一个梦想,昔年奴隶的儿子能够和奴隶主的儿子坐在一起,亲如手足;我有一个梦想,深谷会弥合,高山将夷平,曲径成通衢,歧……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网