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