
MapStruct 对象间属性复制
发布日期:2025-04-12 00:20:43
浏览次数:8
分类:精选文章
本文共 2463 字,大约阅读时间需要 8 分钟。
在Java项目开发过程中,对象间属性值的拷贝是一个常见需求。虽然Spring和Apache BeatUtils等框架提供了反射机制来实现属性拷贝,但MapStruct提供了一种更简洁高效的解决方案。MapStruct通过代码生成的方式,自动处理对象间属性的映射关系。
以下将从基础用法到高级功能,详细介绍MapStruct的实现步骤。
1. 引入依赖
首先需要在项目的POM文件中引入MapStruct相关依赖:
maven.compiler.source=8maven.compiler.target=8mapstruct.version=1.3.1.Final
org.mapstruct mapstruct ${mapstruct.version} org.mapstruct mapstruct-jdk8 ${mapstruct.version} org.mapstruct mapstruct-processor ${mapstruct.version}
2. 创建POJO
新建两个POJO类,分别表示数据来源和目标对象:
package com.xx.mapstruct;import lombok.Data;@Datapublic class Src { private String name;}
package com.xx.mapstruct;import lombok.Data;@Datapublic class Target { private String name;}
3. 定义转换接口
创建一个转换接口DemoMap
,并利用MapStruct的注解定义映射关系:
package com.xx.mapstruct;import org.mapstruct.Mapper;import org.mapstruct.factory.Mappers;@Mapperpublic interface DemoMap { DemoMap CAR_MAP = Mappers.getMapper(DemoMap.class); Target tar(Src src);}
4. 定义映射方法
在转换接口中添加映射注解,指定属性转换关系:
package com.xx.mapstruct;import org.mapstruct.Mapper;import org.mapstruct.Mapping;import org.mapstruct.factory.Mappers;@Mapperpublic interface DemoMap { DemoMap CAR_MAP = Mappers.getMapper(DemoMap.class); Target tar(Src src); @Mapping(source = "name", target = "name2") Target2 tar2(Src src);}
5. 测试类
编写测试类,验证转换功能:
package com.xx;import com.xx.mapstruct.DemoMap;import com.xx.mapstruct.Src;import com.xx.mapstruct.Target;import org.junit.Test;public class MapStructTest { @Test public void test01() { Src src = new Src(); src.setName("ppp"); Target tar = DemoMap.CAR_MAP.tar(src); System.out.println(tar.getName()); }}
6. 指定源属性与目标属性
当目标对象的属性名与源对象不一致时,可以通过@Mapping
注解手动指定映射关系:
package com.xx.mapstruct;import org.mapstruct.Mapper;import org.mapstruct.Mapping;import org.mapstruct.factory.Mappers;@Mapperpublic interface DemoMap { DemoMap CAR_MAP = Mappers.getMapper(DemoMap.class); Target tar(Src src); @Mapping(source = "name", target = "name2") Target2 tar2(Src src);}
7. 测试类
编写测试类验证具体映射关系:
@Testpublic void test02() { Src src = new Src(); src.setName("ppp02"); Target2 tar = DemoMap.CAR_MAP.tar2(src); System.out.println(tar.getName2());}
8. 实现原理
MapStruct通过Java AbstractProcessor在Javac编译期自动生成处理代码。默认情况下,MapStruct会根据POJO类自动匹配属性名进行映射。如果需要定制映射关系,可以通过注解手动指定。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月29日 10时24分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Mapper映射文件传参(数组/集合)与#{}和${} 区别
2025-04-11
mapping文件目录生成修改
2025-04-11
MapReduce Java API-使用Partitioner实现输出到多个文件
2025-04-11
MapReduce Java API-多输入路径方式
2025-04-11
MapReduce Java API实例-排序
2025-04-11
MapReduce Java API实例-统计出现过的单词
2025-04-11
MapReduce Java API实例-统计单词出现频率
2025-04-11
MapReduce Java API实例-统计平均成绩
2025-04-11
MapReduce Kmeans聚类算法
2025-04-11
MapReduce与HDFS企业级优化
2025-04-11
MapReduce分布编程模型之函数式编程范式
2025-04-11
MapReduce实现二度好友关系
2025-04-11
MapReduce的思想
2025-04-11
MapReduce的模式、算法和用例
2025-04-11
MapReduce的编程思想(1)
2025-04-12
MapReduce程序依赖的jar包
2025-04-12
MapReduce程序(一)——wordCount
2025-04-12
MapReduce编程模型简介和总结
2025-04-12
MapReduce:大数据处理的范式
2025-04-12
MapStruct 对象间属性复制
2025-04-12