当前位置: 首页 > 后端技术 > Node.js

SpringBoot|集成MapStruct实现Java对象不同类型之间的自动转换

时间:2023-04-03 23:53:27 Node.js

MapStruct引入调用,快速,类型安全,易懂。——引用自MapStruct官网MapStruct是一个开源的代码生成器,大大简化了从一个Java对象到另一个Java对象的转换过程。MapStruct常用注解注解@Mapper用于标记Mapper接口,MapStruct根据接口定义自动生成Mapper实现类。@Mapping用于标记接口方法或参数,表示源属性和目标属性之间的映射关系。可以通过源和目标属性指定源和目标属性的名称。@Mappings用于标记多个@Mapping注解,方便在一个接口方法中定义多个属性的映射关系。@Mapper注解的常用属性:componentModel属性:默认值为default。在Spring项目中通过自动注入使用MapStructMapper类,需要将componentModel属性的属性值改为spring。unmappedTargetPolicyattribute:指定目标对象中未映射属性的处理策略。默认为IGNORE,表示忽略未映射的属性。其他可能的值包括WARN、ERROR和REPORT。集成MapStruct添加MapStruct依赖修改pom.xml文件,添加如下代码:...1.81.18.241.5.3.Final...org.projectlomboklombok${lombok.versionorg.mapstructmapstruct${mapstruct.version}...org.apache.maven.pluginsmaven-compiler-plugin3.8.1<配置><源>${java.version}<目标>${java.version}目标>org.mapstructmapstruct-processor${mapstruct.version}org.projectlomboklombok${lombok.version}org.projectlombok龙目岛-mapstruct-binding0.2.0复制代码说明:mapstruct-processor:MapStruct注解处理器入门示例:属性完全一样1、创建一个实体类——User.javapackagecn.ddcherry.springboot.demo.entity;importlombok.AllArgsConstructor;importlombok.Data;@Data@AllArgsConstructorpublicclassUser{privateStringid;privateStringusercode;privateStringname;}复制代码2.创建DTO类——UserDto.javapackagecn.ddcherry.springboot.demo.dto;importlombok.AllArgsConstructor;importlombok.Data;@Data@AllArgsConstructorpublicclassUserDto{privateStringid;privateStringusercode;privateStringname;}文案说明:实体类和DTO类的属性(类型,名称)完全一致。3、创建一个转换工具类——UserMapper.javapackagecn.ddcherry.springboot.demo.mapper;importcn.ddcherry.springboot.demo.dto.UserDto;importcn.ddcherry.springboot.demo.entity.User;importorg.mapstruct.Mapper;importjava.util.List;@Mapper(componentModel="spring")publicinterfaceUserMapper{UserDtotoDto(Userentity);UsertoEntity(UserDtodto);ListtoDto(ListentityList);ListtoEntity(ListdtoList);}复制代码4、创建一个测试类——UserMapperTest.javapackagecn.ddcherry.springboot.demo;importcn.ddcherry.springboot.demo.dto.UserDto;导入cn.ddcherry.springboot.demo.entity.User;导入cn.ddcherry.springboot.demo.mapper.UserMapper;导入org.junit.jupiter.api.Test;导入org.springframework.boot.test.context.SpringBootTest;importjavax.annotation.Resource;@SpringBootTestpublicclassUserMapperTest{@ResourceprivateUserMapperuserMapper;@TestpublicvoidtestEntityToDto(){Useruser=newUser("001","user-001","快乐王小成");UserDtodto=userMapper.toDto(user);System.out.println(dto);}}复制代码输出结果:UserDto(id=001,usercode=user-001,name=HiPiWangXiaocheng)复制代码程序运行成功后,我们可以在IDEA中打开target目录下的class文件,看看MapStruct自动生成的converter实现作者王晓成截取了toDto(...)和toDtoList(...)这两个方法的实现,如下图所示:简单的封装在SpringBoot项目中,我们可以把Entity和DTO的转换方法抽取出来做一个基本的转换器,其他所有类需要转换Entity,DTO继承这种。转换器基础类——BaseMapper.javapackagecn.ddcherry.springboot.demo.mapper;导入java.util.List;publicinterfaceBaseMapper{DtoDto(Eentity);EtoEntity(Ddto);ListtoDto(ListentityList);ListtoEntity(ListdtoList);}复制代码一个具体的转换器类——UserMapper.javapackagecn.ddcherry.springboot.demo.mapper;importcn.ddcherry.springboot.demo.dto.UserDto;importcn.ddcherry.springboot.demo.entity.User;importorg.mapstruct.Mapper;importorg.mapstruct.ReportingPolicy;@Mapper(componentModel="spring",unmappedTargetPolicy=ReportingPolicy.IGNORE)publicinterfaceUserMapperextendsBaseMapper{}