实习周记(九):对象转换
对象转换
开发过程中,涉及到较多的对象转换问题,如分页,或者联表查询等,此处仅以开发中遇到例子进行举例,谨慎参考
Mapstruct
项目选用mapstruct进行对象转换
操作步骤
- 引入依赖
<!--mapStruct依赖-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.2.0.CR1</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.2.0.CR1</version>
<scope>provided</scope>
</dependency>
- 使用注解@Mapper完成各对象的转换
@Mapper(componentModel = "spring")
public interface WorkConvert {
WorkDO toWorkDO(WorkDTO workDTO);
}
- 实际使用
@Service
public class WorkMemberRepositoryImpl{
@Resource
private WorkConvert workConvert;
@Override
public WorkDo test(WorkDTO dto) {
return workConvert.toWorkDO(dto);
}
}
- 定制化映射
@Mapper
public interface PersonConverter {
PersonConverter PERSON_CONVERTER = Mappers.getMapper(PersonConverter.class);
@Mappings({
@Mapping(source = "birthday", target = "birth"),
@Mapping(source = "birthday", target = "birthDateFormat", dateFormat = "yyyy-MM-dd HH:mm:ss"),
@Mapping(target = "birthExpressionFormat", ignore = true),
@Mapping(source = "user.age", target = "age"),
@Mapping(target = "email", ignore = true)
})
PersonDTO domain(Person person);
}
stream流
通过流的方式,对数据进行查找、过滤和映射等操作
- 映射
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WorkDTO {
/**
* 姓名
*/
String name;
/**
* 年龄
*/
Integer age;
}
@Data
public class WorkVO {
/**
* 姓名
*/
String name;
/**
* 年龄
*/
Integer age;
/**
* 工号
*/
Integer number;
}
public class StreamTest {
@Test
public void testStream() {
WorkDTO workDTO = new WorkDTO("chenchenchen", 22);
List<WorkDTO> workDTOS = new ArrayList<>();
workDTOS.add(workDTO);
List<WorkVO> workVOS = workDTOS.stream().map(r -> {
WorkVO workVO = new WorkVO();
workVO.setName(r.getName());
workVO.setAge(r.getAge());
workVO.setNumber(9999);
return workVO;
}).collect(Collectors.toList());
System.out.println(workVOS);
}
}
- 去重
workMemberList = workMemberList.stream().filter(r -> r.getName() != null).distinct.collect(Collectors.toList());
通过distinct完成去重功能,会将重复的元素置空
- 过滤
workMemberList = workMemberList.stream().filter(r -> r.getName() != null).collect(Collectors.toList());
项目中存在列表去重问题,如果不将去重后置空的元素过滤,将会报空指针异常