前言
按标准化领域驱动设计的规范,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.Final2 引入编译插件
org.apache.maven.plugins maven-compiler-plugin 3.5.11.81.8org.mapstruct mapstruct-processor 1.4.0.Final3 创建类 Goods ,Shop, GoodsDTO



4 使用转换

5 执行maven编译,生成实现类

测试

总结: 原理是在编译时,利用插件生成实现类。
致谢
感谢看文章的小伙伴,如果有疑问欢迎交流,如果能加下关注就更好了,你们的关注是我持续更新的动力,让我们用好工具,减少打工人的工作时间,有更多的时间陪伴家人和思考这个世界。
Java项目中,按规范有PO、DO、DTO、VO等Bean,但同事未遵循,直接将PO返回视图层有弊端。作者加了DTO层,不想用低级方法和Spring的BeanUtils类转换,找到更好方案。介绍了开源jar包的使用,包括引入jar包、编译插件等步骤,原理是编译时用插件生成实现类。
1364

被折叠的 条评论
为什么被折叠?



