MapStruct属性映射
用于类之间进行映射转换。(对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具,毕竟每一个字段都 get/set 会很麻烦)
1、添加依赖
<!--实体映射MapStruct--> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>1.3.0.Final</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.3.0.Final</version> </dependency>
2、使用
// @Mapper、@Mapping使用的是org.mapstruct包下的,而不是Mapper层的org.apache.ibatis.annotations @Mapper public interface ConvertUtils { // 1、定义 ConvertUtils INSTANCE = Mappers.getMapper(ConvertUtils.class); // 2、编写转换方法 // 2.1 简单情况 // 属性名称相同,直接转换 (只能多转少) DatasetListResponse datasetListToDatasetListResponse(Dataset dataset); //属性名称不同,source表示源属性,target表示目标属性 @Mapping(source = "itemSpace", target = "bytes") DatasetListResponse datasetListToDatasetListResponse(Dataset dataset); //2.2 List转换 //第一步:正常转换内部类型 @Mapping(source = "itemSpace", target = "bytes") DatasetListResponse datasetListToDatasetListResponse(Dataset dataset); //第二步:写一个同名的方法转换List类型 List<DatasetListResponse> datasetListToDatasetListResponse(List<Dataset> datasetList); //2.3 转换中需要用到自定义的方法 @Mapping(target = "modifyTime",expression = "java(com.xxx.datamanager.util.DateUtil.dateToStr(dataset.getModifyTime()))") DatasetListResponse datasetListToDatasetListResponse(Dataset dataset); } // 3、使用 //service中使用方式如下 List<DatasetListResponse> datasetResponseList = ConvertUtils.INSTANCE.datasetListToDatasetListResponse(datasetList);
@Mapper 只有在接口加上这个注解, MapStruct 才会去实现该接口
componentModel 属性:主要是指定实现类的类型,一般用到两个
default:默认,可以通过 Mappers.getMapper(Class) 方式获取实例对象
spring:在接口的实现类上自动添加注解 @Component,可通过 @Autowired 方式注入
@Mapping:属性映射,若源对象属性与目标对象名字一致,会自动映射对应属性
source:源属性
target:目标属性
dateFormat:String 到 Date 日期之间相互转换,通过 SimpleDateFormat,该值为 SimpleDateFormat 的日期格式
ignore: 忽略这个字段
@Mappings:配置多个@Mapping
@MappingTarget 用于更新已有对象
@InheritConfiguration 用于继承配置
参考资料
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix