mirror of
https://gitee.com/easii/mapstruct-plus.git
synced 2025-12-06 17:18:43 +08:00
2.5 KiB
2.5 KiB
title, order
| title | order |
|---|---|
| Mapper 接口生成约定 | 7 |
Mapper 接口生成约定
Mapper 接口包名
Mapper 接口包名按照如下规则获取:
- 转换对象所在模块中,配置的
@sMapperConfig中指定的mapperPackage属性 - 如果没有指定,则会取
@AutoMapper类的包名
Mapper 接口命名
Mapper 接口命名规则如下:源类名 + To + 目标类名 + Mapper
例如,在 User 类上指定 @AutoMapper(target = UserDto.class),则生成的 Mapper 接口类名为:UserToUserDtoMapper
自动生成相反类型转换及 @AutoMapping 继承
假如,在 User 类上指定 @AutoMapper(target = UserDto.class),同时如果没有在 UserDto 上标注 @AutoMapper(target = User.class) 的话,除了会生成 UserToUserDtoMapper 接口,默认也会生成 UserDtoToUserMapper 接口。
即,同时会生成两个类的相互转换接口。所以快速开始中才可以由 UserDto 转为 User 对象。
但是,具体属性上面的 @AutoMapping 注解,不能够完全继承。
例如,User 中的 Date 类型的属性,在 @AutoMapping 中指定了 dateFormat 时间格式,当反过来时,却不能这样子用,因为 dateFormat 只能应用于 String 类型。
由于这个原因,默认情况下生成反向转换 Mapper,@AutoMapping 的部分属性是不能够继承的。
目前,反向转换 Mapper 中,支持继承的 @AutoMapping 属性有如下:
target:目标属性为当前源对象的标注@AutoMapping的属性ignore:忽略当前属性的转换
例如:
定义 User 类如下:
@AutoMapper(target = UserDto.class)
public class User {
private String username;
private int age;
private boolean young;
@AutoMapping(target = "educations", ignore = true)
private List<String> educationList;
@AutoMapping(target = "birthday", dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date birthday;
@AutoMapping(target = "assets", numberFormat = "$0.00")
private double assets;
}
当在 User 类上没有定义 @AutoMapper 注解时,会按照默认规则进行生成。
相当于:
@AutoMapper(target = User.class)
public class UserDto {
private String username;
private int age;
private boolean young;
@AutoMapping(target = "educationList", ignore = true)
private List<String> educations;
@AutoMapping(target = "birthday")
private Date birthday;
@AutoMapping(target = "assets")
private double assets;
}