MapStruct屬性對映

zhegeMaw發表於2024-07-31

實體類屬性對映外掛,自動實現屬性轉換。(物件與物件之間的互相轉換,就需要有一個專門用來解決轉換問題的工具,畢竟每一個欄位都 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);

參考資料

推薦一個 Java 實體對映工具 MapStruct

物件屬性轉換利器 mapStruct

mapstruct使用詳解

相關文章