1、背景
业务中的枚举类在保存到数据库时,需要进行数据转换(例如导入导出时需要字符串到数字的枚举转换)
2、实现
定义枚举:
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
/**
* @create: 2024-05-13 18:08
**/
@Getter
public enum FundingArrivalMethodEnum {
YIN_CHENG((byte) 0, "银承"),
CASH((byte) 1, "现金"),
;
public final byte code;
public final String name;
public static FundingArrivalMethodEnum getByCode(byte code){
FundingArrivalMethodEnum[] values = FundingArrivalMethodEnum.values();
for (FundingArrivalMethodEnum businessType : FundingArrivalMethodEnum.values()){
if(businessType.getCode()==code){
return businessType;
}
}
return null;
}
public static FundingArrivalMethodEnum getByName(String methodName){
if(StringUtils.isEmpty(methodName)){
return null;
}
FundingArrivalMethodEnum[] values = FundingArrivalMethodEnum.values();
for (FundingArrivalMethodEnum businessType : FundingArrivalMethodEnum.values()){
if(methodName.equals(businessType.getName())){
return businessType;
}
}
return null;
}
FundingArrivalMethodEnum(byte code, String name) {
this.code = code;
this.name = name;
}
}
定义mapper,并在mapper中定义转换方法
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import java.util.List;
/**
* 参数转换
*
* @since 2024-05-13
*/
@Mapper(componentModel = "spring")
public interface FinancialLeasingFundingSummaryConvert {
@Mappings({
@Mapping(target = "fundingArrivalMethod", expression = "java(mapFundingArrivalMethodToCode(bankLoanSummaryImportBO.getFundingArrivalMethod()))"),
@Mapping(target = "paymentMethod", expression = "java(mapPaymentMethodToCode(bankLoanSummaryImportBO.getPaymentMethod()))"),
})
FinancialLeasingFundingSummary convertPO(FinancialLeasingFundingSummaryImportBO bankLoanSummaryImportBO);
default Byte mapFundingArrivalMethodToCode(String name) {
FundingArrivalMethodEnum fundingArrivalMethodEnum = StringUtils.isEmpty(name) ? null : FundingArrivalMethodEnum.getByName(name);
return fundingArrivalMethodEnum == null ? null : fundingArrivalMethodEnum.getCode();
}
default Byte mapPaymentMethodToCode(String name) {
FundingArrivalMethodEnum fundingArrivalMethodEnum = StringUtils.isEmpty(name) ? null : FundingArrivalMethodEnum.getByName(name);
return fundingArrivalMethodEnum == null ? null : fundingArrivalMethodEnum.getCode();
}
}