MapStruct使用

作者: jackcooper | 来源:发表于2018-07-13 15:08 被阅读228次

    背景

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

    image.png

    如何使用?

    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

    相关文章

      网友评论

        本文标题:MapStruct使用

        本文链接:https://www.haomeiwen.com/subject/jcajpftx.html