使用MapStruct进行对象的转换

在 Java 系统工程开发过程中,都会有各个层之间的对象转换,比如 VO、DTO、PO、VO 等,而如果都是手动get、set又太浪费时间,还可能操作错误,
选择一个自动化工具会更加方便。目前市面上有大概12种类型转换的操作,如下:
MapStruct可以直接在编译期间生成get set方法,非常方便快捷,且不耗费性能.

  1. 导包,导入 MapStruct的maven包
            <!-- MapStruct begin -->
            <!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct -->
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>1.4.2.Final</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-processor -->
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.4.2.Final</version>
            </dependency>
            <!-- MapStruct end -->
  1. 新建接口

/**
 * @Name IMapping
 * @Author xiaoLi
 * @Date 2023/12/20 星期三 10:58
 */

@MapperConfig
public interface IMapping<SOURCE, TARGET> {
    /**
     * 映射同名属性
     *
     * @param var1 源
     * @return 结果
     */
    @Mapping(target = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
    TARGET sourceToTarget(SOURCE var1);

    /**
     * 映射同名属性,反向
     *
     * @param var1 源
     * @return 结果
     */
    @InheritInverseConfiguration(name = "sourceToTarget")
    SOURCE targetToSource(TARGET var1);

    /**
     * 映射同名属性,集合形式
     *
     * @param var1 源
     * @return 结果
     */
    @InheritConfiguration(name = "sourceToTarget")
    List<TARGET> sourceToTarget(List<SOURCE> var1);

    /**
     * 反向,映射同名属性,集合形式
     *
     * @param var1 源
     * @return 结果
     */
    @InheritConfiguration(name = "targetToSource")
    List<SOURCE> targetToSource(List<TARGET> var1);

    /**
     * 映射同名属性,集合流形式
     *
     * @param stream 源
     * @return 结果
     */
    List<TARGET> sourceToTarget(Stream<SOURCE> stream);

    /**
     * 反向,映射同名属性,集合流形式
     *
     * @param stream 源
     * @return 结果
     */
    List<SOURCE> targetToSource(Stream<TARGET> stream);
}

  1. 继承这个接口
    定义接口 AwardMapping 继承 IMapping<DrawAwardVO, AwardDTO> 做对象转换操作
    如果一些接口字段在两个对象间不是同名的,则需要进行配置,就像 uId -> userId

/**
 * @Name AwardMapping
 * @Author xiaoLi
 * @Date 2023/12/20 星期三 10:58
 */
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, unmappedSourcePolicy = ReportingPolicy.IGNORE)

public interface AwardMapping extends IMapping<DrawAwardVO, AwardDTO> {
    @Mapping(target = "userId", source = "uId")
    @Override
    AwardDTO sourceToTarget(DrawAwardVO var1);

    @Override
    DrawAwardVO targetToSource(AwardDTO var1);
}

posted @   xiaolifc  阅读(132)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示