开发中我们可能使用JPA、通用Mapper或者MyBatis-Plus去查询数据,而这类框架都是返回的实体,实体是和数据库中的表是一一对应的,而作为接口的返回值我们无需把整个实体都暴露给前端,通常会将实体转换成另一个DTO对象来返回,通常有以下转换方式:
-
自己写代码手动转换(这种方式代码量多,而且不优雅)
-
BeanUtils.copyProperties(entity, dto),这种方式是通过反射来实现的,一般反射效率相对有点低
-
使用ModelMapper框架(这种方式是通过反射来实现的,一般反射效率相对有点低)
-
使用MapStruct框架(这种方式是在编译器自动生成转换代码,将原来的手动改为自动,相对于使用反射实现的此种方式效率更好)
综合比较性能、问题排查、文档、成熟度、扩展性等因素来考虑,MapStruct 是一个不错的选择,实体映射转换各个工具比较 https://java.libhunt.com/compare-mapstruct-vs-selma