使用MapStruct的@Mapper注解实现实体类间的相互转换
创作时间:
作者:
@小白创作中心
使用MapStruct的@Mapper注解实现实体类间的相互转换
引用
CSDN
1.
https://blog.csdn.net/m0_56666971/article/details/141337601
在Java开发中,实体类之间的转换是一个常见的需求。传统的转换方式往往繁琐且容易出错。本文将介绍如何使用MapStruct工具简化实体类之间的转换过程,通过具体的代码示例,展示如何使用@Mapper注解实现高效、便捷的转换。
一、背景
在日常项目开发中,常常需要将POJO(Plain Old Java Object)、PO(Persistent Object)等转换成DTO(Data Transfer Object)或VO(View Object)等情况。传统的做法是通过new一个目标对象,然后通过getter和setter方法读取和写入成员变量值,这种方式不仅笨拙,而且容易出错。
而MapStruct提供的@Mapper注解恰好可以解决这个问题,它能够自动生成实体类之间的转换代码,大大提高了开发效率。
二、简单使用
1. 引入依赖
首先需要在项目中引入MapStruct的相关依赖:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
<scope>provided</scope>
</dependency>
2. 定义通用接口
接下来,为需要相互转换的实体类定义一个Mapper接口:
@Mapper(componentModel = "spring", uses = {}, unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserMapper extends EntityMapper<UserDTO, User> {
}
其中,EntityMapper
是一个通用的映射接口,定义了基本的转换方法:
public interface EntityMapper<D, E> {
/**
* DTO转Entity
*/
E toEntity(D dto);
/**
* Entity转DTO
*/
D toDto(E entity);
/**
* DTO集合转Entity集合
*/
List<E> toEntity(List<D> dtoList);
/**
* Entity集合转DTO集合
*/
List<D> toDto(List<E> entityList);
}
在项目启动后,Spring容器会自动注入UserMapper
,并在target
目录下生成具体的转换实现代码。
3. @Mapping注解
当两个实体类的字段命名不一致时,可以使用@Mapping
注解进行针对性映射。例如:
@Mapper(componentModel = "spring")
public interface UserMapper {
@Mapping(source = "userName", target = "name")
UserDTO toDto(User user);
}
这样就可以将User
类中的userName
字段映射到UserDTO
类的name
字段。
三、总结
MapStruct提供了unmappedTargetPolicy
和unmappedSourcePolicy
两个属性,用于处理未被映射的字段。这两个属性的设置将决定如何处理这些未被使用的源字段。使用的是ReportingPolicy
枚举的几种方式:
IGNORE
:忽略未在映射中使用的源字段,不会生成警告或错误。WARN
:生成警告,指示有未被使用的源字段。ERROR
:产生编译错误,阻止代码编译,直到这些未被使用的源字段得到处理。
热门推荐
口苦怎样调理
野钓鲫鱼技巧全解析:精准抓漂相,提升中鱼率
胃溃疡预防的好方法
木兰诗:巾帼英雄背后的家国情怀与女性力量
15马赫大概是多少公里每小时
儿童适合喝什么牛奶好?你的选择真的对了吗?
无毛猫:探索这个独特猫咪品种的特殊之处
加拿大无毛猫:斯芬克斯猫的全面介绍
猫抓板选购指南:不同种类解析,让你的猫咪更幸福
生态学研究方法有哪些基本步骤?
脾胃虚弱的食疗方法推荐:山药粥、红枣桂圆茶等
如何缓解心情烦躁
民间借贷被诉,子女的权益会受到什么影响?
买射鱼器是否违法?详解射鱼器法律法规及相关风险提示
教你一道简单易做的家常硬菜,色香味俱全!
查尔斯·狄更斯:文学世界中的深刻洞察与独特风格
如何制作美味生鱼片(从选购到切割,掌握制作生鱼片的技巧)
开发商违规销售,投诉开发商最有效的途径是什么
提高自己的表达能力和沟通能力
哪些口才课程培训班适合职场人士?
“马踏飞燕”:一匹承载千年之谜的青铜骏马
洋务运动的启示:失败的教训与历史镜鉴
食物不耐受与过敏:深入解析与应对策略
眼睛里藏着狩猎的秘密
焦点访谈聚焦高额彩礼:江西赣州有婚介所称最高彩礼38万,可分期支付
古诗中的动植物描写探析
项目管理培训价格怎么算
闲鱼转舵,倒向专业卖家
胡麻油是什么油,它对人体有什么好处?
Tether USDT获得泰国SEC监管批准,稳定币迎来新发展