mapstruct 使用总结
程序员文章站
2022-03-15 11:22:53
介绍mapstruct 专门用来处理 domin 实体类与 model 类的属性映射的,我们只需定义 mapper 接口,mapstruct 在编译的时候就会自动的帮我们实现这个映射接口,避免了麻烦复杂的映射实现简单说:快捷实现domain 实体与DTO 、VO实体的映射转化。使用引入在pom.xml中引入jar包 org.mapstruct ...
介绍
mapstruct 专门用来处理 domin 实体类与 model 类的属性映射的,我们只需定义 mapper 接口,mapstruct 在编译的时候就会自动的帮我们实现这个映射接口,避免了麻烦复杂的映射实现
简单说:快捷实现domain 实体与DTO 、VO实体的映射转化。
使用
引入
在pom.xml中引入jar包
<!--mapstruct核心-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.3.1.Final</version>
</dependency>
<!--mapstruct编译-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.1.Final</version>
</dependency>
注:mapstruct-jdk8 这种引用方式官方已经废弃
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.3.1.Final</version>
</dependency>
使用方式
spring 中注入:
@Mapper
public interface UserRoleMapper {
/**
* 获取该类自动生成的实现类的实例
* 接口中的属性都是 public static final 的 方法都是public abstract的
*/
UserRoleMapper INSTANCES = Mappers.getMapper(UserRoleMapper.class);
/**
* 这个方法就是用于实现对象属性复制的方法
*
* @Mapping 用来定义属性复制规则 source 指定源对象属性 target指定目标对象属性
*
* @param user 这个参数就是源对象,也就是需要被复制的对象
* @return 返回的是目标对象,就是最终的结果对象
*/
@Mappings({
@Mapping(source = "id", target = "userId"),
@Mapping(source = "username", target = "name"),
@Mapping(source = "role.roleName", target = "roleName")
})
UserRoleDto toUserRoleDto(User user);
@RestController
public class DemoMapstructApplication {
@Autowired
private UserRoleMapper mapper;
@GetMapping("convert3")
public String convertEntity3() {
Role role = new Role(2L, "administrator", "超级管理员");
user = new User(1L, "zhangsan", "12345", "17677778888", "123@qq.com", role);
UserRoleDto userRoleDto = mapper.toUserRoleDto(user);
return userRoleDto.toString();
}
}
javabeen:
@Mapper(componentModel = "spring")
public interface UserRoleMapper {
/**
* 获取该类自动生成的实现类的实例
* 接口中的属性都是 public static final 的 方法都是public abstract的
*/
UserRoleMapper INSTANCES = Mappers.getMapper(UserRoleMapper.class);
/**
* 这个方法就是用于实现对象属性复制的方法
*
* @Mapping 用来定义属性复制规则 source 指定源对象属性 target指定目标对象属性
*
* @param user 这个参数就是源对象,也就是需要被复制的对象
* @return 返回的是目标对象,就是最终的结果对象
*/
@Mappings({
@Mapping(source = "id", target = "userId"),
@Mapping(source = "username", target = "name"),
@Mapping(source = "role.roleName", target = "roleName")
})
UserRoleDto toUserRoleDto(User user);
public static void main(String[] args) {
Role role = new Role(2L, "administrator", "超级管理员");
user = new User(1L, "zhangsan", "12345", "17677778888", "123@qq.com", role);
UserRoleDto userRoleDto = UserRoleMapper.INSTANCES.toUserRoleDto(user);
System.out.println(userRoleDto);
}
问题总结
MapStruct需要Impl类
参考: java - MapStruct需要实现类
没有引入 mapstruct-processor-xx 包导致的
参考
MapStruct超级简单的学习笔记_qq122516902的博客-CSDN博客_mapstruct
本文地址:https://blog.csdn.net/qq_31964019/article/details/110225017