mapStruct使用
1.引入依赖
作用对象中指的转换,可转对象和list
<!--mapStruct依赖 高性能对象映射-->
<!--mapstruct核心-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.0.Beta1</version>
</dependency>
<!--mapstruct编译-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.0.Beta1</version>
</dependency>
2. 创建两个对象
@Data
public class Person {
String describe;
private String id;
private String name;
private int age;
private BigDecimal source;
private double height;
private LocalDateTime createTime;
}
@Data
public class PersonDTO {
String describe;
private Long id;
private String personName;
private String age;
private String source;
private String height;
private String createTime;
}
3.创建转换mapper
@Mapper //import org.mapstruct.Mapper;
public interface PersonMapper {
PersonMapper INSTANCT = Mappers.getMapper(PersonMapper.class);
@Mapping(target = "personName", source = "name") //不同名称转换, target 目标字段 source 来源字段
@Mapping(target = "id", ignore = true)// 忽略id,不进行映射
/**
* numberFormat 指定基本数据类型与String之间的转换
* dateFormat 指定Date和String之间的转换
*/
@Mapping(target = "age", numberFormat = "#岁") // 这里 # 表示多个数字, 0 表示一个数字(0-9)
@Mapping(target = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
@Mapping(target = "describe", defaultValue = "设置默认值") //如果describe 为空则使用默认值
PersonDTO conver(Person person);
//list转换 实际遍历调用conver方法 如果有待处理字段在conver方法上处理
List<PersonDTO> toPersonDTOList(List<Person> personList);
}
4.调用测试
@Test
void contextLoads() {
Person person = new Person();
person.setAge(20);
person.setId("1");
person.setHeight(1.8);
person.setName("ss");
person.setCreateTime(LocalDateTime.now());
PersonDTO conver = PersonMapper.INSTANCT.conver(person);
System.out.println(conver);
}
PersonDTO(describe=设置默认值, id=null, personName=ss, age=20岁, source=null, height=1.8, createTime=2022-09-06 17:42:47)
@Test
void toPersonDTOList() {
ArrayList<Person> people = new ArrayList<>();
Person person = new Person();
person.setAge(20);
person.setId("1");
person.setHeight(1.8);
person.setName("ss");
Person person1 = new Person();
person1.setId("2");
person1.setName("hekai");
people.add(person);
people.add(person1);
List<PersonDTO> personDTOS = PersonMapper.INSTANCT.toPersonDTOList(people);
System.out.println(personDTOS);
}
[PersonDTO(describe=设置默认值, id=null, personName=ss, age=20岁, source=null, height=1.8, createTime=null), PersonDTO(describe=设置默认值, id=null, personName=hekai, age=0岁, source=null, height=0.0, createTime=null)]
5.下载idea插件 mapstruct support
- 作用:可以再mapper中点属性跳到对应对象中