MapStruct 实用java实体映射工具

实体映射工具

maven依赖:

  <dependency>
  <groupId>org.mapstructgroupId>
  <artifactId>mapstruct-jdk8artifactId>
  <version>${org.mapstruct.version}version>
 dependency>

  <dependency>
    <groupId>org.mapstructgroupId>
    <artifactId>mapstruct-processorartifactId>
    <version>${org.mapstruct.version}version>
  dependency>
<properties>
    <org.mapstruct.version>1.3.0.Finalorg.mapstruct.version>
properties>

如何使用

  1. 新建实体DO对象
public class OriginDo {

    private String name;

    private String age;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}
  1. 新建实体DTO对象

    public class TargetDto {
    
        private String name;
    
        private String age;
    
        private String year;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public String getYear() {
            return year;
        }
    
        public void setYear(String year) {
            this.year = year;
        }
    }
    
  2. 新建接口对象类 TransformMapper

    @Mapper
    public interface TestMapper {
    
    
    //    @Mappings({
    //            @Mapping(source = "age", target = "age"),
    //            @Mapping(source = "name", target = "name")
    //    })
    
        /**
         * Do对象转换为Dto对象
         */
        TargetDto entity2Target(OriginDo originDo);
    }
    
  3. 使用

     public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
    
            OriginDo originDo = new OriginDo();
            originDo.setName("1");
            originDo.setAge("1");
            TestMapper mapper = Mappers.getMapper(TestMapper.class);
            TargetDto targetDto = mapper.entity2Target(originDo);
            System.out.println(targetDto.getName());
            System.out.println(targetDto.getAge());
            System.out.println(targetDto.getYear());
    
        }
    

简单探究

IDEA帮忙编译之后,可以在class文件那边可以找到一些蛛丝马迹

在你自己的同名包下 可以找到写的接口类的实现类。
MapStruct 实用java实体映射工具_第1张图片

等于说 mapstruct帮忙生成了一个实现类

点进去看看实现类的代码:

package cn.kingsley.test.bean.compare.bean.copy.mapper;

import cn.kingsley.test.bean.compare.bean.copy.entity.OriginDo;
import cn.kingsley.test.bean.compare.bean.copy.entity.TargetDto;

public class TestMapperImpl implements TestMapper {
    public TestMapperImpl() {
    }

    public TargetDto entity2Target(OriginDo originDo) {
        if (originDo == null) {
            return null;
        } else {
            TargetDto targetDto = new TargetDto();
            targetDto.setName(originDo.getName());
            targetDto.setAge(originDo.getAge());
            return targetDto;
        }
    }
}

可以看到这个里面的逻辑比较简单,相当于我们手写了一边get 、set方法

而且有个细节,它自动帮我们识别了那些字段是可以进行copy的 。 比如 TargetClass类里面的 year字段没有办法进行copy。这个实现类里面就没有对应的处理逻辑。

也可以使用注解 @Mappings进行映射关系解释说明

@Mapper
public interface TestMapper {


    @Mappings({
            @Mapping(source = "age", target = "age"),
            @Mapping(source = "name", target = "name")
    })

    /**
     * Do对象转换为Dto对象
     */
    TargetDto entity2Target(OriginDo originDo);
}

官网链接

MapStruct

你可能感兴趣的:(tools,java,java)