> 文档中心 > 对象转换器mapstruct VS BeanUtils

对象转换器mapstruct VS BeanUtils

官网:https://mapstruct.org/documentation/stable/reference/html/

对象转换器mapstruct

为啥要是用mapstruct?

mapstruct优于BeanUtils,BeanUtils用的是反射,开支比较大.一些公司是不建议使用BeanUtils的.

注意:mapstruct和lombok的版本不可变,否则会出错

1.导入坐标

                    org.mapstruct                        mapstruct-jdk8            1.2.0.Final                            org.mapstruct            mapstruct-processor            1.2.0.Final        ​                            org.projectlombok            lombok            1.16.20        

2.定义一个映射器

注意此处使用的注解全都是org.mapstruct不要引错。

需要使用@Maping注解,source为原参数名称,target为转换后的类的参数名称。

例如:

@Mapperpublic interface CarMap {​    //mapping作用就是两个字段的映射关系    //将car中的make中的值复制到CarDTO中的manufacturer    @Mapping(source = "make", target = "manufacturer")    @Mapping(source = "numberOfSeats", target = "seatCount")    CarDTO carToCarDto(Car car);​    @Mapping(source = "fullname", target = "name")    PersonDTO personToPersonDto(Person person);}

整合Spring

设置componentModel = "spring",需要使用的地方直接通过@Resource注入即可

@Mapper(componentModel = "spring")public interface CarMap {...}

集合映射

@Mapperpublic interface CarMapper {    Set integerSetToStringSet(Set integers);    List carsToCarDtos(List cars);    CarDto carToCarDto(Car car);}

映射map

public interface SourceTargetMapper {    @MapMapping(valueDateFormat = "dd.MM.yyyy")    Map longDateMapToStringStringMap(Map source);}

快速入门:

首先导入坐标:(坐标的版本不要乱动,会出现不兼容问题)

@Datapublic class Student {    private int id;    private int age;    private String name;    private String password;    private String username;}
@Datapublic class StudentDto {    private String password;    private String username;}

对象转换类:

@Mapper(componentModel = "spring")//将此功能加到Springpublic interface StudentMap {        Student dtoToStudent(StudentDto dto);}

实现:

@RestController@RequestMapping("login")public class StudentController {​    @Resource    StudentMap studentMap;​    @GetMapping    public Student getStudent(@RequestBody StudentDto studentDto){​        Student student = studentMap.dtoToStudent(studentDto);        System.out.println(student);        student.setAge(10);        student.setId(10);        student.setName("admin");        return student;​    }​}