文章目录
一、MapStruct使用
1.引入依赖
<dependency>
<groupId>org.mapstruct</groupId>
<!-- jdk8以下就使用mapstruct -->
<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>
2.使用思路
1. 创建一个接口 并且定义转换规则 (核心)
2.将接口交给Sping容器管理 通过@Autowire 等注解实现依赖注入
3.调用j接口中对应的转换方法
MapStruct会自动根据接口定义得规则生成一个实现类,
3.具体实现
业务逻辑说明:转换后 userDTO.name=user.name+user.id (使用了StructTransferUtil工具类实现)
1.定义接口
@Mapper(componentModel = "spring",imports = {StructTransferUtil.class})
/**
* 转换成 InterviewCandidateBaseInfo
* @param user
* @return
*/
@Mappings({
@Mapping(target = "name",expression = "java(StructTransferUtil.strName(user.getName(),user.getId()))")
})
UserDTO toInterviewCandidateBaseInfoList( User user);
}
2.交给Spring管理
@Autowired
CandidateMapper candidateMapper;
3.调用接口实现转换
User user = new User();
user.setName("张三");
user.setId(10);
user.setPosition("程序员");
UserDTO userDTO = candidateMapper.toInterviewCandidateBaseInfoList(Uuser);
/*
UserDTO 属性
name position
*/
4. 接口注解功能讲解
- @Mapper(componentModel = “spring”,imports = {StructTransferUtil.class})
componentModel = “spring” 是将该接口的实现类交给 SprIng管理 以后只需要通过依赖注入就可以使用该注解
imports = {StructTransferUtil.class} 引入工具类,通过工具类的方法实现类如:身份证加密解密,信息脱敏,日期格式化,类型转换等
存在的BUG
StructMap中Mapper注解和Mybatis的注解是一样的 注意在Mybatis扫描包的时候不要放在一起不然容易引起错误:会说实现类找不到
- @Mappings({
@Mapping(target = “name”,expression = “java(StructTransferUtil.strName(user.getName(),user.getId()))”)
})
Mapping 转换规则
target: 目标类中的属性 (前端展示的数据DTO)
expression:自定义转换规则 (一般定义规则和目标类属性后 如果名称一样可以省略 source)
source: 资源类
如果需要多个类转换成同一个类 需要指定类中的属性 例如user.name teacher.name