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

相关推荐
码事漫谈6 小时前
C++ 多线程开发:从零开始的完整指南
后端
9ilk6 小时前
【C++】--- 特殊类设计
开发语言·c++·后端
码事漫谈6 小时前
十字路口的抉择:B端与C端C++开发者的职业路径全解析
后端
提笔了无痕7 小时前
git基本了解、常用基本命令与使用
git·后端
java1234_小锋7 小时前
Spring IoC的实现机制是什么?
java·后端·spring
喵个咪8 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:JWT 集成指南
后端·go
绝不收费—免费看不了了联系我8 小时前
Fastapi的单进程响应问题 和 解决方法
开发语言·后端·python·fastapi
喵个咪8 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:OPA 集成指南:从原理到实践
后端·go
Victor3569 小时前
Netty(11) Netty的心跳机制是什么?为什么需要它?
后端
Victor3569 小时前
Netty(12)Netty支持哪些协议和传输方式?
后端