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

相关推荐
无风听海15 分钟前
在 ASP.NET Core 开发环境中为自定义域名签发受信任的自签名证书—HSTS 启用后的完整实践
windows·后端·asp.net
无风听海19 分钟前
深入理解 ASP.NET Core 中的UseHsts()
后端·asp.net
学编程的小程20 分钟前
DISTINCT 的“惯性陷阱“:当去重操作沦为性能累赘
后端
雪宫街道1 小时前
SpringBoot 向 IOC 容器注册组件的两种姿势:@Configuration 与 @Import
java·spring boot·后端·spring
techdashen1 小时前
Cargo 1.94 开发周期全解析
开发语言·后端·rust
枕星而眠1 小时前
Linux守护进程完全指南:从原理到实战
linux·运维·服务器·c++·后端
金融支付架构实战指南2 小时前
Milvus 向量检索服务 + SpringBoot 实战:电商商品语义检索与相似商品推荐
spring boot·后端·milvus·向量检索
齐 飞2 小时前
JDK21虚拟线程
java·后端
fox_lht2 小时前
15.4.循环和迭代器的性能比较
开发语言·后端·学习·rust
摇滚侠3 小时前
SpringMVC 入门到实战 HttpMessageConverter 65-74
java·后端·spring·intellij-idea