依赖mapstruct:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
<scope>compile</scope>
</dependency>
官网实例:mapstruct-examples;以下实例,省略部分代码,结合Spring;ConvertVOMapper跟普通Springbean一样注入即可使用。
package com.xxx.app.mapstruct;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
// 不用接口,采用抽象类,可以结合Spring
@Mapper(componentModel="spring")
public abstract class ConvertVOMapper {
@Autowired
protected ConvertVOExpressionService convertVOExpressionService;
@Mappings({
@Mapping(target = "type" ,expression="java(convertVOExpressionService.getSuperRebateConfigType(superRebateConfig))"),
@Mapping(target = "ghName" ,expression="java(convertVOExpressionService.getGhName(superRebateConfig.getGhId()))")
})
public abstract SuperRebateConfigRespVO convertToSuperRebateConfigVO(SuperRebateConfig superRebateConfig);
public abstract List<SuperRebateConfigRespVO> convertToSuperRebateConfigVO(List<SuperRebateConfig> superRebateConfig);
}
package com.xxx.app.mapstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Map;
// 参数替换
@Component
public class ConvertVOExpressionService {
@Autowired
CommonService commonService;
/**
* SuperRebateConfigRespVO.type 0:已下线 1:上线中 2:过期
* @param apSuperRebateConfig
* @return
*/
public int getSuperRebateConfigType(SuperRebateConfig apSuperRebateConfig){
if(apSuperRebateConfig.getValidate() == 1){
long ttl = apSuperRebateConfig.getDateEnd().getTime() - new Date().getTime();
if(ttl < 0) return 2;
}
return apSuperRebateConfig.getValidate();
}
public String getGhName(String ghId){
Map<String,String> map = commonService.getGhIdMap();
return map.get(ghId);
}
}
package com.xxx.app.mapstruct;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 数据库表映射
* @author
*/
@Data
public class SuperRebateConfig implements Serializable {
private Integer idSuperRebateConfig;
private String name;
private String ghId;
/**
* 是否有效
*/
private Integer validate;
/**
* 活动开始时间
*/
private Date dateStart;
/**
* 活动结束时间
*/
private Date dateEnd;
/**
* 活动添加时间
*/
private Date dateAdd;
/**
* 活动最后更新时间
*/
private Date dateUpd;
private static final long serialVersionUID = 1L;
}
package com.xxx.app.mapstruct;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
/* *
* description:
* 返回参数
*/
@Getter
@Setter
public class SuperRebateConfigRespVO implements Serializable {
/**
* 活动id
*/
private Integer idSuperRebateConfig;
/**
* 活动名称
*/
private String name;
private String ghId;
private String ghName;
/**
* 类型 0:已下线 1:上线中 2:过期
*/
private Integer type;
/**
* 活动开始时间
*/
private Date dateStart;
/**
* 活动结束时间
*/
private Date dateEnd;
}
其他:字段名和类型不一致