前言
按标准化领域驱动设计的规范,java项目中Bean,分为 PO(Persistent Object),DO(Domain Object),DTO(Data Transfer Object),VO(View Object)。但是项目中的同事没有遵循这个规范,代码都是把PO直接返还给视图层,这样有2个弊端:
1 返回了许多多余字段,减少了网络传输数据的速率。
2 引起前端人员不满,他们觉得字段多他们自己调试起来也很麻烦,忍不住吐槽。
于是我就担负起了解决这个问题的重任,我在项目中加了一层DTO,精简没必要传给试图层的数据,但是我又不想用set,get这样低级的方法进行转换,也不想用Spring的BeanUtils类进行转换,因为此工具运用反射实现,调用次数多的时候,会有性能问题,于是我在度娘前苦苦求了几天无眠,俗话说念念不忘必有回响:终于找到了一个更好的解决方案,特地分享给大家。
推荐理由
- 开源jar包,使用方便简单
- 复制对象时字段类型不一致可以转换
- 复制对象时字段名称不一致可以转换
- 集合类的复制可以轻松实现
- 不存在性能问题
实践
1 引入jar包
org.mapstruct mapstruct 1.4.1.Final
2 引入编译插件
org.apache.maven.plugins maven-compiler-plugin 3.5.11.81.8org.mapstruct mapstruct-processor 1.4.0.Final
3 创建类 Goods ,Shop, GoodsDTO
4 使用转换
5 执行maven编译,生成实现类
测试
总结: 原理是在编译时,利用插件生成实现类。
致谢
感谢看文章的小伙伴,如果有疑问欢迎交流,如果能加下关注就更好了,你们的关注是我持续更新的动力,让我们用好工具,减少打工人的工作时间,有更多的时间陪伴家人和思考这个世界。