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

相关推荐
我叫黑大帅12 小时前
为什么TCP是三次握手?
后端·网络协议·面试
我叫黑大帅12 小时前
如何排查 MySQL 慢查询
后端·sql·面试
techdashen12 小时前
Rust项目公开征测:Cargo 构建目录新布局方案
开发语言·后端·rust
消失的旧时光-194312 小时前
Spring Boot 实战(五):接口工程化升级(统一返回 + 异常处理 + 错误码体系 + 异常流转机制)
java·spring boot·后端·解耦
Rust研习社12 小时前
Rust 智能指针 Cell 与 RefCell 的内部可变性
开发语言·后端·rust
夕颜11113 小时前
Skill 机器人 vs Hermes Agent:两种「AI 越用越聪明」的路径
后端
IT_陈寒14 小时前
SpringBoot自动配置把我都整不会了
前端·人工智能·后端
覆东流15 小时前
第1天:Python环境搭建 & 第一个程序
开发语言·后端·python
码事漫谈15 小时前
Token成本失控?两大开源方案如何重构AI编程成本结构
后端
橙露15 小时前
SpringBoot 全局异常处理:优雅封装统一返回格式
java·spring boot·后端