美文网首页
关于Java 实体映射工具 MapStruct使用

关于Java 实体映射工具 MapStruct使用

作者: Neil_Wong | 来源:发表于2021-09-10 14:56 被阅读0次

为了符合“高内聚,低耦合”思想,现在主流使用三层架构模式,即:表示层(UI)、业务逻辑层(BLL)和[数据访问层,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体。随着一个工程的越来越成熟,模块划分会越来越细,不同层级,不同模块之间实体类的传递和映射就会变得更复杂。

虽然当前BeanUtils.copyProperties(Object source, Object target)可以做到相同属性的映射,但是在不同的业务场景下,需要对不同的属性进行映射时,使用MapStruct就可以很好的解决这个问题。。。

MapStruct官网地址: http://mapstruct.org/

如何使用

  • 工程中引入 maven 依赖
        <!--    MapStruct    -->
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-jdk8</artifactId>
            <version>1.2.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>1.2.0.Final</version>
        </dependency>
  • 创建两个Bean,UserVO和UserDTO
@Data
@Accessors(chain = true)
public class UserVO {

    private String name;
    private String age;
    private Date birthday;
    private String phone;

}
@Data
@Accessors(chain = true)
public class UserDTO {

    private String realName;
    private String realAge;
    private String realBirthday;
    private String photo;

}
  • 写一个 Mapper 接口 PersonConverter,对UserVO和UserDTO做映射。
@Mapper(componentModel = "spring")
public interface UserConverter {
//UserConverter INSTANCE = Mappers.getMapper(UserConverter.class);
    @Mappings({
            @Mapping(source = "name", target = "realName"),
            @Mapping(source = "age", target = "realAge"),
            @Mapping(source = "birthday", target = "realBirthday", dateFormat = "yyyy-MM-dd HH:mm:ss"),
            @Mapping(target = "photo", ignore = true)

    })
    UserDTO VO2DTO(UserVO userVO);
}

Spring 注入的方式:
1、和框架 Spring 结合,在 @Mapper 后面加入 componentModel="spring"
2、通过PersonConverter INSTANCE = Mappers.getMapper(PersonConverter.class)注入。

测试

    @Autowired
    private UserConverter userConverter;

    @Test
    void mapStructTest() {
        UserVO userVO = new UserVO();
        userVO.setAge("11").setBirthday(new Date()).setName("张三").setPhone("120");
        UserDTO userDTO = userConverter.uservo2userdto(userVO);
        System.out.println(userDTO);
    }

输出:

UserDTO(realName=张三, realAge=11, realBirthday=2021-09-10 14:44:27, photo=null)

这里只是一些比较简单的使用,更多的使用方法和功能可以去看官方文档。
http://mapstruct.org/documentation/stable/reference/html/

相关文章

网友评论

      本文标题:关于Java 实体映射工具 MapStruct使用

      本文链接:https://www.haomeiwen.com/subject/bafbwltx.html