ddd的工具之三---MapStruct

127 阅读1分钟
  • 这是一个开源的组件,参考官方的说明 mapstruct.org,下面是将官网中的内容翻译出来。
  • MapStruct是什么
    • MapStruct是一个代码生成器,它基于约定优于配置的方法,极大地简化了Java bean类型之间映射的实现。
    • 生成的映射代码是普通常见的方法调用,所以快速、安全并且简单易懂
    • 原理其实同lombok差不多,提前将需要的代码生成。
  • 为什么要用MapStruct
    • ddd的多层结构常常要在不同的对象模型(例如entie和dto)间转换,编写这样的映射代码是一项乏味而且容易出错的任务。MapStruct的愿景是尽可能通过自动化来简化这项任务。
    • 与其它的映射框架相比,MapStruct在编译时生成Bean映射,保证了高性能,使开人员快速得到结果的反馈,也快速完成错误检查。
  • 怎么用
    • MapStruct是一个插入到Java编译器中的注释处理器,可以在命令行构建(Maven、Gradle等)中使用,也可以在您首选的IDE中使用。
    • MapStruct使用合理的默认值,但当涉及到配置或实现特殊行为时,它会避开你的方式。
  • 使用的方法如下
    • 引用pom文件

      <dependency>
          <groupId>org.mapstruct</groupId>
          <artifactId>mapstruct</artifactId>
          <version>1.5.3.Final</version>
      </dependency>
      
    • 转换的代码

      	  @Mapper
      	  public interface MyUserMapper {
      	    MyUserMapper INSTANCE = Mappers.getMapper(MyUserMapper.class);
      	    MyUserPO myuser2PO(MyUserEntity myUser);
      	    MyUserEntity myUserPO2Entity(MyUserPO myUserPO);
                  // list的转换
      	    List<MyUserEntity> myUserPOs2Entity(List<MyUserPO> myUserPO);
      	  }
       
      
    • 实际转换的使用

    • 实际的代码调用

    •   	  public MyUserEntity save(MyUserEntity myUser) {
        	      MyUserPO myUserPO = MyUserMapper.INSTANCE.myuser2PO(myUser);
        	      return MyUserMapper.INSTANCE.myUserPO2Entity(myUserDao.save(myUserPO));
        	  }
        
        
      

备注:

1,这里是有缺陷的,如果实体的对象发生了变化,需要重新再编译这个生成的类。

2,这里的mapstruct版本是<mapstruct.version>1.5.3.Final</mapstruct.version>