MapStruct使用

简介: 背景在一个成熟可维护的工程中,细分模块后,domian工程最好不要被其他工程依赖,但是实体类一般存于domain之中,这样其他工程想获取实体类数据时就需要在各自工程写model,自定义model可以根据自身业务需要而并不需要映射整个实体属性。

背景

在一个成熟可维护的工程中,细分模块后,domian工程最好不要被其他工程依赖,但是实体类一般存于domain之中,这样其他工程想获取实体类数据时就需要在各自工程写model,自定义model可以根据自身业务需要而并不需要映射整个实体属性。
mapstruct这个插件就是用来处理domin实体类与model类的属性映射,定义mapper接口,mapstruct就会自动的帮我们实现这个映射接口,避免了麻烦复杂的映射实现。

如何使用?

1、简单封装


import org.mapstruct.InheritConfiguration;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mappings;

import java.util.Collection;
import java.util.List;

/**
 * @author jack cooper
 * <p></p>
 * 基础转换类,提供基本的几个方法,直接继承就可以,如果有需要写Mappings的写在 {@link #to(Object)} 方法上
 * 并且接口类上一定要加上 {@link org.mapstruct.Mapper} 注解
 * 默认注解,需要单独定义 如 CategoryMapper MAPPER = Mappers.getMapper(CategoryMapper.class); 以此进行实例创建和调用
 * 或者如下
 *
 * @Mapper(componentModel = "spring") 此注解可通过spring进行注入。
 */
public interface BasicObjectMapper<SOURCE, TARGET> {
    /**
     * 如有需要自定义该注解即可
     * 例如:
     *
     * @Mappings({
     * @Mapping(source = "code", target = "categoryCode"),
     * @Mapping(source = "name", target = "categoryName")
     * })
     * <p></p>
     * 重写此注解时一定要注意 返回值(TARGET) 和 参数(SOURCE) 的顺序
     */
    @Mappings({})
    @InheritConfiguration
    TARGET to(SOURCE source);

    @InheritConfiguration
    List<TARGET> to(Collection<SOURCE> source);

    @InheritInverseConfiguration
    SOURCE from(TARGET source);

    @InheritInverseConfiguration
    List<SOURCE> from(Collection<TARGET> source);
}

2、自定义mapper

开发中如需要对象转换操作可直接新建interface并继承BasicObjectMapper<SOURCE,TARGET>,并在新建的接口上加上 @Mapper(componentModel = "spring"),

3、字段不一致地方配置mapping

import com.ampmind.framework.api.base.BasicObjectMapper;
    import com.ampmind.service.skumng.api.protocol.vo.CategoryVo;
    import com.ampmind.service.skumng.domain.ProductCategory;
    import org.mapstruct.Mapper;
    import org.mapstruct.Mapping;
    import org.mapstruct.Mappings;

    /**
    * Created by SongJian on 2017/3/30.
    *
    */
    @Mapper(componentModel = "spring")
    public interface CategoryMapper extends BasicObjectMapper<CategoryVo, ProductCategory> {
    @Mappings({
    @Mapping(source = "code", target = "categoryCode"),
    @Mapping(source = "name", target = "categoryName")
    })
    ProductCategory to(CategoryVo source);
    }

文章参考:

https://blog.csdn.net/jtf8525140/article/details/78130601

https://www.tuicool.com/articles/uiIRjai

相关文章
|
8月前
|
存储 人工智能 自然语言处理
拔俗AI自动化评价分析系统:让数据说话,让决策更智能
在用户体验为核心的时代,传统评价分析面临效率低、洞察浅等痛点。本文基于阿里云AI与大数据技术,构建“数据-算法-应用”三层智能分析体系,实现多源数据实时接入、情感与主题精准识别、跨模态融合分析及实时预警,助力企业提升运营效率、加速产品迭代、优化服务质量,并已在头部电商平台成功落地,显著提升用户满意度与商业转化。
672 0
|
7月前
|
数据采集 存储 调度
定时抓取与更新:用Python爬虫构建自己的新闻简报系统
定时抓取与更新:用Python爬虫构建自己的新闻简报系统
|
人工智能
从零开始学写歌词:关键技巧和方法一网打尽,妙笔生词AI智能写歌词软件
从零开始学写歌词,掌握关键技巧和方法,探索歌词创作的奇妙世界。借助“妙笔生词智能写歌词软件”,利用AI智能生成、优化和解读歌词等功能,轻松找到灵感,提升创作水平,创作出动人的歌词。
|
Java 编译器
Java 泛型详细解析
本文将带你详细解析 Java 泛型,了解泛型的原理、常见的使用方法以及泛型的局限性,让你对泛型有更深入的了解。
563 2
Java 泛型详细解析
|
监控 Java 应用服务中间件
SpringBoot3 快速入门及原理分析
SpringBoot3 快速入门及原理分析
|
监控 安全 网络安全
使用 Scapy 库编写 ICMP 时间戳脚本
使用 Scapy 库编写 ICMP 时间戳脚本
使用 Scapy 库编写 ICMP 时间戳脚本
|
传感器 自动驾驶 算法
本文将探讨无人驾驶汽车如何应对交通拥堵,并指出这种技术可能面临的挑战。
本文将探讨无人驾驶汽车如何应对交通拥堵,并指出这种技术可能面临的挑战。
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
1730 3
|
存储 传感器 监控
物联网设备的远程监控与管理:技术与实践
【7月更文挑战第5天】物联网设备的远程监控与管理技术正逐步成熟,为企业和个人带来了前所未有的便利性和洞察力。通过实现设备的实时监控、远程操作、数据分析等功能,可以显著提高设备的运行效率和安全性。然而,面对系统集成、隐私安全、用户体验等挑战,我们仍需不断探索和创新,以推动物联网技术的持续发展和应用。