如何优雅的转换Bean对象?

文章讲述了在Java开发中如何使用MapStruct工具来优雅地进行Bean转换,避免手动编写繁琐的setter代码。MapStruct通过注解定义转换规则,自动生成转换逻辑,解决了BeanUtils性能和扩展性的问题。文中通过实例介绍了MapStruct的用法、原理以及优势,包括属性名称不一致、集合类型转换、类型不一致、多对一映射等场景。
摘要由CSDN通过智能技术生成

作者 孤独烟 来自:孤独烟

背景

我们的故事要从一个风和日丽的下午开始说起!

这天,外包韩在位置上写代码~外包韩根据如下定义

  • PO(persistant object): 持久化对象,可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录。
  • VO(view object): 视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
  • BO(business object): 业务对象,主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。
  • DTO、DO(省略......)

将Bean进行逐一分类!例如一个car_tb的表,于是他有了两个类,一个叫CarPo,里头属性和表字段完全一致。另一个叫CarVo,用于页面上的Car显示!但是外包韩在做CarPo到CarVo转换的时候,代码是这么写的,伪代码如下:

CarPo carPo = this.carDao.selectById(1L);
CarVo carVo = new CarVo();
carVo.setId(carPo.getId());
carVo.setName(carPo.getName());
//省略一堆
return carVo;

画外音:看到这一串代码是不是特别亲切,我接手过一堆外包留下的代码,就是这么写的,一坨屎山!一类几千行,一半都在set属性。

恰巧,阿雄打水路过!鸡贼的阿雄瞄了一眼外包韩的屏幕,看到外包韩的这一系列代码!上去进行一顿教育,觉得不够优雅!阿雄觉得,应该用BeanUtils.copyProperties来简化书写,像下面这样!

CarPo carPo = this.carDao.selectById(1L);
CarVo carVo = new CarVo();
BeanUtils.copyProperties(carPo, carVo);
return carVo;

可是,外包韩盯着这段代码,说道:"网上不是说反射效率慢,你这么写,没有性能问题么?"

阿雄说道:" 如果是用Apache的BeanUtil类,确实有很大的性能问题,像阿里巴巴的代码扫描插件,都禁止用该类,如下所示!"

"但是,如果采用的是像Spring的BeanUtils类,要在调用次数足够多的时候,你才能明显的感受到卡顿。"阿雄补充道。

"哇,阿雄真棒!"外包韩兴奋不已!

看着这办公室基情满满的氛围。一旁正在拖地的清洁工------扫地烟,他决定不再沉默。

只见扫地烟扔掉手中的拖把,得瑟的说道"我们不考虑性能。从拓展性角度看看!BeanUtils还是有很多问题的&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值