欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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

相关标签: # springboot