前言
为什么要实体类之间相互转换呢?
1.防止数据的泄露,比如使用Hibernate查询用户表,用户表有用户的账号和密码,我们后端给前端数据的时候并不希望给前端传递密码这个字段。
2.防止数据过大,前端无法接收,hibernate使用的是关联查询,如果关联的表非常多的话前端接收会报错。
3.更好的前后端分离,前端不用考虑后端的业务逻辑。而后端只需要给出返回的结果是否成功的编码和具体提示内容以及其它信息。
在pom.xml配置文件中添加依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.4-jre</version>
</dependency>
创建第一个实体类School
public class School {
private Integer schoolId;
private String schoolName;
private String name;
//省略方法
}
创建第二个实体类
public class SchoolDTO {
private Integer schoolId;
private String schoolName;
//省略方法
//创建转换方法
public School convertTo() {
OrderConverter convert = new OrderConverter();
return convert.convert(this);
}
public SchoolDTO convertFrom(School order) {
OrderConverter convert = new OrderConverter();
return convert.reverse().convert(order);
}
private static class OrderConverter extends Converter<SchoolDTO, School> {
@Override
protected School doForward(SchoolDTO schoolDTO) {
return null;
}
//具体的转换内容
@Override
protected SchoolDTO doBackward(School school) {
SchoolDTO dto = new SchoolDTO();
dto.setSchoolId(school.getSchoolId());
dto.setSchoolName(school.getSchoolName());
return dto;
}
}
}
创建测试类(一条数据转换)
public class test {
public static void main(String[] args) {
//一条数据转换
School school = new School();
school.setSchoolId(1);
school.setSchoolName("上海理工大学");
school.setName("李四");
SchoolDTO dto = new SchoolDTO().convertFrom(school);
System.out.println(dto);
//Page类型数据转换
//schools.map(s -> new SchoolDTO().convertFrom(s));
}
输入结果:
SchoolDTO{
schoolId=1, schoolName='上海理工大学'}