• 开发利器mapstruct


    背景:

           在业务代码中,会出现很多dto之间的相互转换,就是两个dto属性的各种get,set,会造成大量的冗余代码,所以出现了一些工具,比如Spring中的beanUtil,但是beanutil是运行时处理的,性能较差,所以出现了一款利器,mapstruct,它是编译生效的,类似lombok,所以性能大大提升

    maven导入:

             <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>1.2.0.Final</version>
            </dependency>
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.2.0.Final</version>
            </dependency>

    建立两个类,一个UserEntity,一个UserDTO

    @Data
    public class UserEntity {
        private String name;
        private String password;
        private Integer age;
        private Date birthday;
        private String sex;
    }
    @Data
    public class UserVO {
        private String name;
        private String age;
        private String birthday;
        private String gender;
    }

    接下来是关键的映射,UserMapper接口

    @Mapper
    public interface UserMapper {
    
        UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
    
        /**
         * 1、entity与vo中属性名相同时候默认映射,(比如name),属性名相同属性类型不同也会映射,(比如birthday,一个Data,一个String)
         * 2、entity与vo中属性名不同的,需要通过@Mapping明确关系来形成映射(如sex对应gender)
         * 3、无映射关系属性被忽略(如UserEntity的password)
         */
        @Mappings({
                @Mapping(target = "gender", source = "sex"),    
        })
        UserVO entityToVO(UserEntity entity);
    
    }

    测试代码

    public class UserTest {
    
        public static void main(String[] args)  {
            UserEntity userEntity = new UserEntity();
            userEntity.setAge(1);
            userEntity.setName("snow");
            userEntity.setPassword("123");
            userEntity.setSex("");
            userEntity.setBirthday(new Date());
    
            UserVO userVO = UserMapper.INSTANCE.entityToVO(userEntity);
            System.out.println(userVO);
            System.out.println("=================");
            System.out.println(userEntity);
    
        }
    }

    结果如下:

    UserVO(name=snow, age=1, birthday=18-5-11 下午9:23, gender=男)
    =================
    UserEntity(name=snow, password=123, age=1, birthday=Fri May 11 21:23:34 CST 2018, sex=男)

    以上是简单举例,参考https://blog.csdn.net/OO570741825/article/details/78530022,在它基础上做了些修正

  • 相关阅读:
    [Algorithms] Insertion sort algorithm using TypeScript
    [Algorithms] Determine if a string is a palindrome
    [Algorithm] Determine if two strings are an anagram
    [Vue + TS] Watch for Changes in Vue Using the @Watch Decorator with TypeScript
    [Vue +TS] Use Two-Way Binding in Vue Using @Model Decorator with TypeScript
    uvc摄像头代码解析7
    并查集
    流程节点多场景多表单
    【图像识别】 图像处理和图像分析(leptonica)leptonica-1.68安装配置 (vs2008)
    Eclipse完美汉化教程
  • 原文地址:https://www.cnblogs.com/team42/p/9026666.html
Copyright © 2020-2023  润新知