Mapstruct 遇坑 ---更改类里字段并不会重新生成实现类

mapstruct 是目前最为常用的对象属性转换利器,因为我们日常在CURD时,会写很多关于PO转VO、VO转DTO或Req相关的代码。

具体如何使用,网上教程太多了。

对象属性转换利器 mapStruct - 简书

这里主要记录下遇到的坑,这个坑就是当我们去增加、删除、修改entity(或者称dto)的字段时,它并不会生成新的实现类,导致在启动项目或者代码运行过程中出错。

解决方案:将生成的实现类删除,然后执行maven clean,再编译maven compile ,这样才能重新生成实现类。

### 使用MapStruct生成器进行对象映射 #### 添加Maven依赖 为了在项目中使用MapStruct,需引入相应的Maven依赖。这可以通过编辑`pom.xml`文件来完成。 ```xml <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.5.0.Final</version> </dependency> <!-- 需要添加处理器用于编译时生成实现 --> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.5.0.Final</version> <scope>provided</scope> </dependency> ``` 上述配置确保了MapStruct能够在编译阶段处理注解生成必要的映射代码[^2]。 #### 定义映射接口 创建一个简单的接口用来描述两个型的转换逻辑: ```java import org.mapstruct.Mapper; import org.mapstruct.Mapping; @Mapper(componentModel = "spring") // 如果希望与Spring集成,则可以指定此参数 public interface CarMapper { @Mapping(source = "manufacturer", target = "brand") CarDto carToCarDto(Car car); } ``` 这定义了一个名为`CarMapper`的接口,其中包含了将`Car`实体转化为`CarDto`数据传输对象的方法。注意这的`componentModel="spring"`属性使得这个映射器可以在Spring环境中作为组件被自动装配和管理。 当构建应用程序时,MapStruct将会根据这些接口定义自动生成具体的实现类将其放置于目标目录下以便后续调用[^3]。 #### 应用场景实例 假设存在如下两个结构: ```java // Source class class Car { private String manufacturer; private int seatCount; // getters and setters... } // Target DTO class class CarDto { private String brand; private Integer numberOfSeats; // getters and setters... } ``` 此时利用之前定义好的`CarMapper`就可以轻松地把`Car`实例转成对应的`CarDto`表示形式了。由于MapStruct会在编译期检查字段名称匹配情况,所以即使将来修改了任一方的数据模型也必担心运行时报错的问题发生[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值