分享一下我的开源项目 MapStructPlus,一个更好用的 Java Bean 模型转换工具

查看 88|回复 5
作者:alva0   
MapStructPlus
  • 项目地址 Gitee | GitHub
  • 项目文档 MapStructPlus - Document

    Mapstruct Plus 是 Mapstruct 的增强工具,在 Mapstruct 的基础上,实现了自动生成 Mapper 接口的功能,并强化了部分功能,使 Java 类型转换更加便捷、优雅。
    和 Mapstruct 一样,本质上都是一个基于 JSR 269 的 Java 注释处理器,因此可以由 Maven 、Gradle 、Ant 等来构建触发。
    Mapstruct Plus 内嵌 Mapstruct ,和 Mapstruct 完全兼容,如果之前已经使用 Mapstruct ,可以无缝替换依赖。
    简单示例
    假设有两个类 UserDto 和 User ,分别表示数据层对象和业务层对象:
  • UserDto

    public class UserDto {
        private String username;
        private int age;
        private boolean young;
        // getter 、setter 、toString 、equals 、hashCode
    }
  • User

    public class User {
        private String username;
        private int age;
        private boolean young;
        // getter 、setter 、toString 、equals 、hashCode
    }
    添加依赖
    引入 mapstruct-plus-spring-boot-starter 依赖:
        1.3.6
       
            io.github.linpeilie
            mapstruct-plus-spring-boot-starter
            ${mapstruct-plus.version}
       

       
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                   
                        
                            io.github.linpeilie
                            mapstruct-plus-processor
                            ${mapstruct-plus.version}
                        
                   
                
            
       

    指定对象映射关系
    在 User 或者 UserDto 上面增加注解 —— @AutoMapper,并设置 targetType 为对方类。
    例如:
    @AutoMapper(target = UserDto.class)
    public class User {
        // ...
    }
    测试
    @SpringBootTest
    public class QuickStartTest {
        @Autowired
        private Converter converter;
        @Test
        public void test() {
            User user = new User();
            user.setUsername("jack");
            user.setAge(23);
            user.setYoung(false);
            UserDto userDto = converter.convert(user, UserDto.class);
            System.out.println(userDto);    // UserDto{username='jack', age=23, young=false}
            assert user.getUsername().equals(userDto.getUsername());
            assert user.getAge() == userDto.getAge();
            assert user.isYoung() == userDto.isYoung();
            User newUser = converter.convert(userDto, User.class);
            System.out.println(newUser);    // User{username='jack', age=23, young=false}
            assert user.getUsername().equals(newUser.getUsername());
            assert user.getAge() == newUser.getAge();
            assert user.isYoung() == newUser.isYoung();
        }
    }
    小结
    引入依赖后,使用 MapStructPlus 的步骤非常简单。
    [ol]
  • 给需要转换的类添加 AutoMapper 注解;
  • 获取 Converter 实例,调用 convert 方法即可。
    [/ol]
    该项目开发一段时间了,也逐渐趋于稳定,已在多个项目中正式应用,如果有帮助的话,求 star ~

    user, userdto, mapstruct, private

  • zhouhu   
    其实 我感觉手写更方便,调试也简单。简单项目的话 db model 直接用
    taogen   
    给我的感觉:就这?
    Spring 不是有现成了方法吗。BeanUtils.copyProperties(Object source, Object target)
    至少展示一些亮点出来。
    NASK   
    @taogen 这个好像是 Hutool 的
    huiyadanli   
    @taogen 两者性能不是一个级别的。这个项目是 MapStruct 的易用包装。
    而且 BeanUtils.copyProperties 甚至在有些公司已经被禁止使用了。
    建议先了解下再回复,不然一个“就这?”会让人觉的你无知又狂妄。
    taogen   
    @huiyadanli #4
    禁用的好像是 Apache BeanUtils
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部