栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

实体映射工具-MapStruct使用详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实体映射工具-MapStruct使用详解

文章目录
  • 一、引入依赖
  • 二、使用MapStruct
      • 定义一个映射器
      • 有多个源参数的情况
      • 自定义转换方法


当项目膨胀到一定程度,为了提高维护性和扩展性,遵从单一原则、开闭原则,必然会建立很多的实体类来划分边界。如果项目不幸上了DDD,那一连串DO、entity、DTO、VO的数量更是怀疑人生的程度。
这是实体类之间的转换,就不能再靠手写 setter & getter了。
MapStruct就是这么一个代码生成器,来简化不同 Java Bean之间映射的处理。其实 Spring和 Apache也提供了BeatUtils工具,但确实功能不能 MapStruct强大。
另外, BeanUtils使用的反射机制,性能较差,而 MapStruct则通过在代码编译阶段,自动添加赋值方法,非常优雅高效得解决了问题。

参考内容:

  1. 官网
  2. github
  3. 文档
一、引入依赖

    1.4.2.Final


    
        org.mapstruct
        mapstruct
        ${mapstruct.version}
    
    
        org.mapstruct
        mapstruct-jdk8
        ${mapstruct.version}
    
    
        org.mapstruct
        mapstruct-processor
        ${mapstruct.version}
    

二、使用MapStruct

准备几个实体类

  1. User
public class User {
	private Long id;
	private String firstName;
	private String secondName;
	// getter & setter
}
  1. UserDTO
public class UserDTO {
	private String userId;
	private String fullName;
	private String position;
	// getter & setter
}
  1. UserEO
public class UserEO {
	private Long id;
	private String firstName;
	private String secondName;
	// getter & setter
}
  1. Role
public class Role {
	private Long id;
	private String description;
	// getter & setter
}
定义一个映射器

如果你的两个类中的字段名称是一致的,只需要写方法签名即可,不需要写@Mapping注解。
如果参数名称有变化,需要使用@Mapping,source为原参数的名称,target为新参数的名称

// 1. 添加注解
@Mapper
// 2. 新增转换接口
public interface UserMap {
    // 3. 新增转换方法
    User userEO2Entity(UserEO userEO);
}
有多个源参数的情况

比如在UserDTO中,userId来自User中的id,position来自Role中的id

@Mapping(source=user.id, target=userId)
@Mapping(source=role.id, target=position)
UserDTO entity2DTO(User user, Role role);
自定义转换方法

还可以通过指定方法,实现自定义映射,如User中的id为Long型,映射到UserDTO中的userIdString型。

// qualifiedByName的值对应自定义方法的名称
@Mapping(source=id, target,userId, qualifiedByName = "convertId")
UserDTO entity2DTO(User user);

// 新建缺省方法
default String convertId(Long id) {
	return String.valueOf(id);
}

… 待更新

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/344958.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号