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

相关推荐
天天摸鱼的java工程师4 分钟前
2025已过半,Java就业大环境究竟咋样了?
java·后端
货拉拉技术9 分钟前
OceanBase向量检索在货拉拉的探索和实践
后端
转转技术团队27 分钟前
多代理混战?用 PAC(Proxy Auto-Config) 优雅切换代理场景
前端·后端·面试
南囝coding29 分钟前
这几个 Vibe Coding 经验,真的建议学!
前端·后端
阿杆30 分钟前
服务一挂就手忙脚乱?教你用 Amazon Lambda 打造 0 成本服务监控!
后端·自动化运维
德育处主任1 小时前
在亚马逊云上,如何基于 VPC IPAM 的 ALB 公网 IP 预测分配?
后端
不吃肉的羊1 小时前
PHP设置文件上传最大值
后端·php
专注物联网全栈开发1 小时前
ESP32的IRAM用完了怎么优化
后端
雨落倾城夏未凉1 小时前
7.QObject定时器和QTimer定时器的区别
后端·qt
洗澡水加冰1 小时前
RAG系统工程化
后端·aigc