# mapstruct-convert **Repository Path**: ColorDreams/mapstruct-convert ## Basic Information - **Project Name**: mapstruct-convert - **Description**: 一个基于MapStruct简单封装的Bean Convert/Copy工具包。 A Bean Convert/Copy toolkit based on simple encapsulation of MapStruct. - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-05-18 - **Last Updated**: 2025-07-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 介绍 - 一个基于 [mapstruct](https://github.com/mapstruct/mapstruct) 简单封装的Bean Convert/Copy工具包。 - mapstruct 官方文档:[mapstruct](https://mapstruct.org/documentation/stable/reference/html/#Preface) > 本类库没有对MapStruct进行任何修改,只是做了一层简单薄薄的封装以满足绝大部分的使用场景。 > 如需更多的 mapstruct 高阶用法可以查阅mapstruct官方文档。 ### 使用指南 > 环境要求:JDK ≥ 17 || SpringBoot 3.X 1. 引入依赖 ```xml io.gitee.colordreams mapstruct-convert 3.0.0-RC1 io.gitee.colordreams mapstruct-convert-spring-boot-starter 3.0.0-RC1 ``` 2. 配置 > 原生使用和SpringBoot环境使用已经做好了一些相应的功能实现,在maven编译插件中配置一下mapstruct-processor即可 ```xml org.apache.maven.plugins maven-compiler-plugin 3.8.1 17 17 org.mapstruct mapstruct-processor 以你使用的mapstruct版本为准 ``` > 注意,如果你使用了`Lombok`,你还需要配置一下 `lombok-mapstruct-binding` ```xml org.apache.maven.plugins maven-compiler-plugin 3.8.1 17 17 org.mapstruct mapstruct-processor 以你使用的mapstruct版本为准 org.projectlombok lombok-mapstruct-binding 以你使用的lombok-mapstruct-binding版本为准 ``` 3. 继承通用接口 > 假设有以下实体类 ```java public class User{ private String username; private String password; /** * TODO copy该内容需要深拷贝 */ private List bankCards; /** * TODO DTO中不存在的字段会被自动忽略 */ private String phone; // 省略getter和setter } public class UserDTO{ private String username; private String password; /** * TODO copy该内容需要深拷贝 */ private List bankCards; // 省略getter和setter } public class BankCard{ private String cardNo; private String bankName; // 省略getter和setter } ``` > 你需要实现一个这样的接口 ```java /** * 用户Bean转换 */ @Mapper(mappingControl = DeepClone.class) public interface UserMapper extends SourceTargetMapper,BeanCopyMapper { } ``` > 上述代码中,`mappingControl = DeepClone.class`表示使用深克隆。 > 此外,如果你使用的是SpringBoot环境,还需要在代码中加入以下配置 ```java /** * 用户Bean转换 */ @Mapper(componentModel = MappingConstants.ComponentModel.SPRING,mappingControl = DeepClone.class) public interface UserMapper extends SourceTargetMapper,BeanCopyMapper { } ``` > 其中 `MappingConstants.ComponentModel.SPRING` 本质上是一个字符串常量,你也可以写成 `componentModel = "spring"`。 > 这行配置的意思是生成的 MapperImpl 中,自动帮我们添加上Spring IOC容器的 `@Component` 注解,让Mapper自动注册到IOC容器中。 4. 使用 > 你可以使用类库提供的 BeanConvertUtil 工具类进行对象转换,它内部已经调用了 MapperFactory ,无需再做其它配置。 > 当然,如果你希望使用自己的 MapperFactory ,可以使用 `setMapperFactory` 方法进行替换,也可以继承该工具类扩展更多的方法。 ```java // 1、转换 User user = new User(); // user赋值操作... UserDTO userDTO = BeanConvertUtil.toTarget(UserMapper.class,user); // 2、反转 UserDTO userDTO = new UserDTO(); // userDTO赋值操作... User user = BeanConvertUtil.toSource(UserMapper.class,userDTO); // 3、拷贝 User userCopy = BeanConvertUtil.copy(UserMapper.class,user); // 3、List转换与反转 // 和1、2的使用方法一样,只不过入参和出参是一个列表 List dtoResults = BeanConvertUtil.toTargetList(UserMapper.class,userList); List userResults = BeanConvertUtil.toSourceList(UserMapper.class,UserDtoList); // 除此之外,List转换和反转还提供了一个消费回调函数,每一个子项调用完成之后都会进行回调,方便进行一些值的处理 List dtoResults = BeanConvertUtil.toTargetList(UserMapper.class,userList,userDto ->{ // 进行处理操作 }); ``` 5. 关于Bean与Map转换 > 本类库没有对MapStruct进行任何修改与针对Map进行特殊处理,建议参阅[MapStruct官方文档 Map映射](https://mapstruct.org/documentation/stable/reference/html/#mapping-maps)