場景
Java中使用MapStruct實現對象轉換/實體屬性賦值/Bean屬性映射,避免大量setter和getter:
Java中使用MapStruct實現對象轉換/實體屬性賦值/Bean屬性映射,避免大量setter和getter_霸道流氓氣質的博客-CSDN博客
上面介紹了mapstruct的簡單使用,某些場景下需要自定義轉換規(guī)則,比如記錄時間字段默認獲取
當前時間、某個屬性需要根據兩個屬性的判定關系轉換。
注:
博客:
霸道流氓氣質的博客_CSDN博客-C#,架構之路,SpringBoot領域博主
實現
1、這是可以通過@Mapping的expression來進行設置。
比如設置某個字段為獲取當前時間。
@Mapping(target = "recordTime",expression = "java(new java.util.Date())")
注意這里的new Date,必須是全路徑的,不能直接寫new Date()
2、如果邏輯較復雜,需要對轉換前的實體的多個屬性進行邏輯判斷,甚至可以
在expression中寫明執(zhí)行某個函數,將實體類作為參數傳遞。
@Mapping(target = "lastLoginTime",expression = "java(DriverNoLoginConvert.getLastLoginTime(busMailList))")
這里轉換接口類就叫DriverNoLoginConvert,然后getLastLoginTime是其靜態(tài)方法,方法實現如下
??? static Date? getLastLoginTime(BusMailList busMailList){
??????? return null == busMailList.getBindingTime()?busMailList.getUpdateTime():busMailList.getBindingTime();
??? }
這里的轉換規(guī)則就是,實體的bindingTime不為空,則用該字段進行轉換,如果為空,則用updateTime字段
進行轉換。文章來源:http://www.zghlxwxcb.cn/news/detail-624408.html
3、完整的轉換接口類實例文章來源地址http://www.zghlxwxcb.cn/news/detail-624408.html
import com.ruoyi.common.core.domain.basicinfomanage.BusMailList;
import com.ruoyi.common.core.domain.reportmanagement.BusDriverNoLoginRecord;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import java.util.Date;
@Mapper
public interface DriverNoLoginConvert {
??? DriverNoLoginConvert INSTANCE = Mappers.getMapper(DriverNoLoginConvert.class);
??? @Mappings({
??????????? @Mapping(source = "carNumber",target = "carNum"),
??????????? @Mapping(source = "driverNumber",target = "lastLoginNumber"),
??????????? @Mapping(target = "id",ignore = true),
??????????? @Mapping(target = "lastLoginTime",expression = "java(DriverNoLoginConvert.getLastLoginTime(busMailList))"),
??????????? @Mapping(target = "recordTime",expression = "java(new java.util.Date())")
??? })
??? BusDriverNoLoginRecord mailList2NoLoginRecord(BusMailList busMailList);
??? static Date? getLastLoginTime(BusMailList busMailList){
??????? return null == busMailList.getBindingTime()?busMailList.getUpdateTime():busMailList.getBindingTime();
??? }
}
到了這里,關于Java中使用MapStruct實現對象轉換時使用@Mapping的expression表達式實現自定義轉換規(guī)則(多對一、獲取當前Date)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!