MapStruct使用

一、MapStruct是什么?

MapStruct是一种实体类映射框架,能够通过Java注解将一个实体类的属性安全地赋值给另一个实体类。有了mapstruct,只需要定义一个映射器接口,声明需要映射的方法,在编译过程中,mapstruct会自动生成该接口的实现类,实现将源对象映射到目标对象的效果。当系统使用领域驱动(DDD)或者有着明确分层时,在不同层级会使用PO、DTO、VO等不同类,那么类之间相互转换就是会经常遇到的问题,MapStruct就是为此出现的。

二、优势

  1. 效率高。当有大量数据需要进行转换时,相较于常用的BeanUtils有明显的性能优势。这里直接使用别人的测试结果。
    在这里插入图片描述
  2. 无侵入。使用中只需要声明相应映射器接口即可,对原有代码无侵入性,具体可以看后续使用。
  3. 对于转换时,属性名称不一致、对象类型不同等问题有较好支持。

三、使用步骤

1.添加依赖

		<dependency>
		    <groupId>org.mapstruct</groupId>
		    <!-- jdk8以下就使用mapstruct -->
		    <artifactId>mapstruct-jdk8</artifactId>
		    <version>1.2.0.Final</version>
		</dependency>
		<dependency>
		    <groupId>org.mapstruct</groupId>
		    <artifactId>mapstruct-processor</artifactId>
		    <version>1.2.0.Final</version>
		</dependency>

2.构建需要转换的实体

在这里插入图片描述
在这里插入图片描述

2.构建Mapper

在这里插入图片描述

3.实测

在这里插入图片描述

user = {"address":{"addressDetail":{"num":233,"street":"昌华街道"},"city":"榆林市","district":"横山区","province":"陕西省"},"age":26,"birthday":1653621195045,"company":{"name":"qax"},"nicknames":["aa","vv","bb"],"personList":[{"name":"qq","relationship":"哥哥"},{"name":"pp","relationship":"弟弟"}],"userId":"1111","username":"anne"}

userVO = {"address":{"addressDetailVo":{"number":233,"street":"昌华街道"},"city":"榆林市","district":"横山区","province":"陕西省"},"age":26,"birthdayStr":"2022-05-27 11:13:15","company":{"name":"qax"},"nicknames":["aa","vv","bb"],"persons":[{"namea":"qq","relationship":"哥哥"},{"namea":"pp","relationship":"弟弟"}],"userId":"1111","username":"anne"}

3.使用细节

  • source、target属性名称相同,可以直接转换(如果是对象,那么对象内部自己的属性名称也需要相同)

  • source、target基属性名称不同,需要在Mapper进行声明
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 上面转换集合类型,如果集合中对象属性名称不同,则需要声明
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • source、target对象嵌套属性名称不一致,只需要声明一次
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 日期类型转换过程进行格式化
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • source与target反向转换,可以重新声明,也可以引用正向转换方法
    在这里插入图片描述


总结

以上就是今天要讲的内容,本文仅仅简单介绍了mapstruct的使用,如需进一步了解,请移步官网学习MapStruct官网

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值