文章目录
- po、vo、dto、request
- Person ->PersonDTO
- 安装插件
- 引入依赖
- Maven项目结构图
- Person 与 PersonDTO
- Converter
po、vo、dto、request
Mapstruct 完成类型转换!
po:数据持久层对象,用于映射数据库中的表
dto:数据传输对象,从数据库中查出来、redis中查出来的数据的封装,后端与后端之间数据传输时使用
vo:视图对象,用于向 前端展示数据时使用
request: 前端发过来的请求
Person ->PersonDTO
安装插件
如果不指定@Mapping
,默认映射name相同的field
如果映射的对象field name不一样,通过 @Mapping 指定。
忽略字段加@Mapping#ignore() = true
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--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>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
Maven项目结构图
Person 与 PersonDTO
Person
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class Person {
String describe;
private String id;
private String name;
private int age;
private BigDecimal source;
private double height;
private Date createTime;
}
PersonDTO
import lombok.Data;
@Data
public class PersonDTO {
String describe;
private Long id;
private String personName;
private String age;
private String source;
private String height;
private String createTime;
}
Converter
import com.example.demo.bean.dto.PersonDTO;
import com.example.demo.bean.po.Person;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
@Mapper(uses = MyUtil.class)
public interface PersonConverter {
PersonConverter INSTANCE = Mappers.getMapper (PersonConverter.class);
// source 是 参数的属性值常量值
@Mapping(target = "personName", source = "name")
@Mapping(target = "id", ignore = true)// 忽略id,不进行映射
@Mapping(target = "createTime", qualifiedByName = "dateToString") // dateToString 与@Named("dateToString")对应
@Mapping(target = "age", qualifiedByName = "ageAdd10")
PersonDTO person2DTO(Person person);
public static void main(String[] args) {
Person person = new Person ();
person.setId ("1");
person.setDescribe ("测试");
person.setAge (18);
person.setName ("张三");
person.setHeight (170.5);
person.setCreateTime (new Date ());
person.setSource (new BigDecimal ("100"));
PersonDTO dto = PersonConverter.INSTANCE.person2DTO (person);
System.out.println (dto);
// PersonDTO(describe=测试, id=null, personName=张三, age=28, source=100, height=170.5,createTime=2022-12-13)
}
}
class MyUtil {
@Named("dateToString")
// 将 参数中的属性值:source传进来
// 然后计算 得到结果赋值给 target
public static String dateToString(Date date) {
return date == null ? "" : new SimpleDateFormat ("yyyy-MM-dd").format (date);
}
@Named("ageAdd10")
// 将 参数中的属性值:source传进来
// 然后计算 得到结果赋值给 target
public static String ageAdd10(int age) {
return String.valueOf (age + 10);
}
}
运行结果: