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 用于继承配置

参考资料

推荐一个 Java 实体映射工具 MapStruct

对象属性转换利器 mapStruct

mapstruct使用详解

 

posted @   zhegeMaw  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示