MapStructPlus 1.3.6 发布,新增支持内部类转换和继承AutoMapping配置等特性

773 阅读1分钟

MapStruct Plus 是 MapStruct 的增强工具,在 Mapstruct 的基础上,实现了自动生成 Mapper 接口的功能,并强化了部分功能,使 Java 类型转换更加便捷、优雅。

MapStructPlus官网

更新日志

  • 兼容内部类转换

    示例:

    @Data
    @AutoMapper(target = Car.InnerClass.class)
    public class InnerClassTarget {
    
        private String f;
    
    }
    
    @Data
    public class Car {
    
        @Data
        public static class InnerClass {
            private String f;
        }
    
    }
    
    @Test
    public void innerClassTest() {
        Car.InnerClass innerClass = new Car.InnerClass();
        innerClass.setF("1111");
        InnerClassTarget innerClassTarget = converter.convert(innerClass, InnerClassTarget.class);
        Assert.equals(innerClassTarget.getF(), "1111");
        System.out.println(innerClassTarget);
    
        Car.InnerClass innerClass1 = converter.convert(innerClassTarget, Car.InnerClass.class);
        Assert.equals(innerClass1.getF(), "1111");
        System.out.println(innerClass1);
    }
    
  • feature : AutoMapping 注解中的 targetClass 支持配置父类

    AutoMapping 注解中的 targetClass 支持配置父类,当目标类是该配置的子类时,即可应用该规则。

  • issue#I8T7EF : 支持在父类中配置的 AutoMapping 注解

    之前的版本中,在父类中配置的 AutoMapping 注解,并不会生效,在该版本中,解决了这个问题。

    示例:

    • PDto
    @Data
    public class PDto {
    
        @AutoMapping(targetClass = PVO.class, expression = "java(source.getSuccess() ? 1 : 0)")
        private Boolean success;
    
    }
    
    • PVO
    @Data
    public class PVO {
    
        @AutoMapping(targetClass = PDto.class, expression = "java(source.getSuccess().equals(1) ? true : false)")
        private Integer success;
    
    }
    
    • SDto
    @Data
    @ToString(callSuper = true)
    @AutoMapper(target = SVO.class)
    public class SDto extends PDto {
    
        private Long id;
    
    }
    
    • SVO
    @Data
    @ToString(callSuper = true)
    @AutoMapper(target = SDto.class)
    public class SVO extends PVO {
    
        private Long id;
    
    }
    
    • 测试
    @Test
    public void extendTest() {
        SDto sDto = new SDto();
        sDto.setId(111111L);
        sDto.setSuccess(true);
    
        SVO svo = converter.convert(sDto, SVO.class);
        Assert.equals(svo.getId(), sDto.getId());
        Assert.equals(svo.getSuccess(), 1);
        System.out.println(svo);
    
        SDto sDto1 = converter.convert(svo, SDto.class);
        Assert.equals(sDto1.getId(), sDto.getId());
        Assert.equals(sDto1.getSuccess(), sDto.getSuccess());
        System.out.println(sDto1);
    }
    
  • issue#I8QPRO : 框架自动生成的 AutoMapperConfig 和 AutoMapMapper 包和类名支持配置

    增加了三个配置项,支持注解配置和启动参数配置:

    • autoConfigPackage:MapStructPlus 框架自动生成的配置类 --- AutoMapperConfig/AutoMapMapperConfig 所在的包路径
    • autoMapperConfigClassName:MapStructPlus 框架自动生成的的配置类(配置对象之间的转换)类名
    • autoMapMapperConfigClassName:MapStructPlus 框架自动生成的配置类(配置Map与对象之间的转换)类名

    详情可以可以参考MapStructPlus - 指南 - 配置项