引入mapstruct实现类的转换

问题

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方法

相关推荐
码小凡2 小时前
优雅!用了这两款插件,我成了整个公司代码写得最规范的码农
java·后端
星星电灯猴2 小时前
Charles抓包工具深度解析:如何高效调试HTTPHTTPS请求与API接口
后端
isfox3 小时前
Hadoop 版本进化论:从 1.0 到 2.0,架构革命全解析
大数据·后端
normaling3 小时前
四、go语言指针
后端
yeyong3 小时前
用springboot开发一个snmp采集程序,并最终生成拓扑图 (二)
后端
掉鱼的猫4 小时前
Solon AI 五步构建 RAG 服务:2025 最新 AI + 向量数据库实战
java·redis·后端
HyggeBest4 小时前
Mysql之undo log、redo log、binlog日志篇
后端·mysql
java金融4 小时前
FactoryBean 和BeanFactory的傻傻的总是分不清?
java·后端
独立开阀者_FwtCoder4 小时前
Nginx 部署负载均衡服务全解析
前端·javascript·后端