简单理解使用MapStruct

什么是Mapstruct,以及怎么理解使用??

MapStruct的作用就是将两个相似的对象相互转换,比如有两个类User,UserDTO,但是这两个类的属性虽然一样但是STU2的属性更多更详细,现在你需要将User的数据转换到UserDTO,那么你应该需要写以下代码

public class User {
    private Long id;
    private String name;
    private String email;
    // 省略 getter 和 setter 方法
}

public class UserDTO {
    private Long id;
    private String name;
    private String phone;
    private String sex;
    private String email;
    // 省略 getter 和 setter 方法
}

User user = new User();
user.setId(1L);
user.setName("John Doe");
user.setEmail("[email protected]");

UserDTO userDTO = new UserDTO();
userDTO.setId(user.getId());
userDTO.setName(user.getName());
userDTO.setEmail(user.getEmail());

如果字段很多,这样的代码会很繁琐。MapStruct 可以自动生成这些代码,让你只需要写一个简单的接口。

使用MapStruct前需要导入依赖


    org.mapstruct
    mapstruct
    1.4.2.Final

  • 作用:这是 MapStruct 的核心库,就像是一个“工具箱”,里面装了 MapStruct 的各种工具(比如注解等)。你在代码中使用 MapStruct 的注解(比如 @Mapper),就需要这个依赖。


    org.mapstruct
    mapstruct-processor
    1.4.2.Final

  • 作用:这是 MapStruct 的注解处理器,就像是“说明书”。当你在代码中使用了 MapStruct 的注解后,这个处理器会在编译代码的时候,根据注解生成具体的代码。比如,它会生成把 User 转换成 UserDTO 的代码。

 正确配置方式

为了更高效,我们通常把“说明书”(mapstruct-processor)放在编译阶段使用,而不是让它一直跟着代码运行。在 Maven 中,你可以这样配置:


    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.8.1
            
                
                    
                        org.mapstruct
                        mapstruct-processor
                        1.4.2.Final
                    
                
            
        
    

这样,mapstruct-processor 只会在编译代码的时候被用到,生成需要的代码,而不会出现在最终的运行代码中。

一个简单的例子

假设你有两个类,UserUserDTO,你希望把 User 的数据映射到 UserDTO。你可以这样写:

java复制

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

@Mapper
public interface UserMapper {
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);

    UserDTO userToUserDTO(User user);
}

MapStruct 会在编译的时候,根据这个接口生成一个实现类,这个实现类会包含把 User 转换为 UserDTO 的代码。

然后你可以这样使用:

java复制

User user = new User();
user.setId(1L);
user.setName("John Doe");
user.setEmail("[email protected]");

UserDTO userDTO = UserMapper.INSTANCE.userToUserDTO(user);
System.out.println(userDTO.getName()); // 输出:John Doe

你看,你只需要定义一个接口,MapStruct 就帮你生成了具体的转换代码,你不需要自己手动写那些繁琐的字段复制代码。

总结

  • MapStruct 是一个工具,可以帮你自动完成对象之间的映射。

  • mapstruct 是工具箱,包含 MapStruct 的注解等。

  • mapstruct-processor 是说明书,用来在编译时生成具体的映射代码。

  • mapstruct-processor 放在编译阶段使用,更高效。

  • 使用 MapStruct,你只需要定义一个简单的接口,它会自动生成映射代码,让你的代码更简洁、更高效。

你可能感兴趣的:(java,开发语言)