问题
java中经常涉及实体类的转换,例如Entity转为vo等,如果编写一个转换类这种情况是比较麻烦的,使用BeanUtil.copy只能复制字段一样的属性,不能根据特殊字段做映射,例如:id映射成planId字段,这个时候可以引入mapstruct做类之间的映射
步骤
引入jar包
xml
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<scope>provided</scope>
</dependency>
编写工具类
ini
package com.jxctjt.cxkj.pms.util;
import com.jxctjt.cxkj.pms.dto.projectPlan.ProjectPlanDTO;
import com.jxctjt.cxkj.pms.entity.Project;
import com.jxctjt.cxkj.pms.entity.ProjectProblem;
import com.jxctjt.cxkj.pms.entity.ScheduleDetail;
import com.jxctjt.cxkj.pms.entity.SchedulePlan;
import com.jxctjt.cxkj.pms.vo.ProjectProblemVO;
import com.jxctjt.cxkj.pms.vo.projectPlan.PlanDetailVO;
import com.jxctjt.cxkj.pms.vo.projectPlan.ProjectPlanPageVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
/**
* 映射工具类
* @author: xiaYZ 2025/5/29
* @version: 1.0
*/
@Mapper
public interface MappingConvert {
MappingConvert INSTANCE = Mappers.getMapper(MappingConvert.class);
@Mappings({
@Mapping(source = "id", target = "planId")
})
ProjectPlanPageVO schedulePlanToProjectPlanPageVo(SchedulePlan plan);
@Mappings({
@Mapping(source = "id", target = "detailId")
})
PlanDetailVO scheduleDetailToPlanDetailVO(ScheduleDetail scheduleDetail);
@Mappings({
@Mapping(source = "id", target = "projectId"),
@Mapping(source = "name", target = "projectName"),
@Mapping(source = "number", target = "projectNumber")
})
ProjectPlanDTO projectToProjectPlanDTO(Project project);
ProjectProblem toProjectProblem(ProjectProblemVO vo);
}
特殊的字段使用Mappings注解做说明
注意:此处@Mapper注解并不是Mybatis中的Mapper注解,两者不一样
使用

查看源代码

生成的.class方法,会编写对应的set方法