当前位置: 首页 > 网络应用技术

如何复制子弹,老鸟像这样玩!

时间:2023-03-06 16:56:55 网络应用技术

  如今,Springboot Old Bird系列的第四部分被带到了谈论日常开发中对象复制的优雅之处。

  首先,让我们看看为什么需要复制对象?

  如上所述,它是我们通常开发中最常见的三层MVC架构模型。编辑时,控制器层从前端接收DTO对象。它需要转换为服务层,然后保存在数据库中。查询服务层查询DO对象后,需要将对象转换为对象,然后返回到前端以通过控制器层渲染。

  这将涉及大量对象转换。显然,我们不能直接使用对象的副本,看起来太低了。想象一下您的业务逻辑充满了很多。在代码评论中,老鸟将如何嘲笑您?

  因此,我们必须找到第三方工具来帮助我们实施对象转换。

  看到这里的一些学生可能会问,为什么您不能在前后均匀地使用do对象?因此没有对象转换?

  想象一下,如果我们不想定义DTO和VO,请直接使用数据访问层,服务层,控制层和外部访问接口。这次,该表被删除或修改了字段。必须同时修改DO。此修改将影响每一层,这不符合高端和低耦合的原理。通过定义不同的DTO,您可以将不同的属性控制到不同的系统,您还可以通过属性映射实现特定字段名称的隐藏不同的企业使用不同的模型。当企业需要修改该领域时,就无需考虑对其他业务的影响。如果使用相同的对象,则可能会因为“敢于改变”而产生许多无法实现的兼容行为。

  复制了许多类库工具。除了普通的apache,春季,还有重量级组件,

  如果没有特殊要求,则可以直接使用这些工具,除了Apache外,原因是为了追求完美,基础源代码添加了过多的包装,使用大量反射和许多验证,所以表现很差。它被迫在阿里巴巴开发手册上使用Apache Beanutils。

  至于剩余的重量级组件,全面考虑其性能和易于使用,我建议它在此处。Orika的底层使用Javassist类库来生成Bean映射字节代码,然后直接加载通过执行生成的生成的字节模式文件,这比在速度方面使用反射要快得多。

  外国神Baeldung已详细测试了共同的成分表现。您可以通过https://www.baeldung.com/java-performance-mapping-frameworks进行检查。

  使用Orika很简单,只有四个简单的步骤:

  当字段名称与两个实体不一致时,可以通过该方法映射该方法。如果字段名称相同,则可以省略该方法。该方法用于注册相同名称的相同属性。如果您不希望字段参与映射,则可以使用该方法。

  在上述四个步骤之后,我们完成了从Sourceclass到TargetClass的转换。

  看到这一点,必须有粉丝会说:您推荐什么,这个Orika不容易使用。每当您必须先创建此此功能时,都会建立一个字段映射关系以映射映射。

  不用担心,我在这里准备了一个工具课,您可以通过文本末尾的Github仓库获得它。

  它提供了五种公共方法:

  一致:

  接下来,我们将通过单元测试案例介绍此工具类的使用。

  准备两个基本的物理课,学生,老师。

  输出结果:

  目前,由于属性名称不一致,因此无法映射字段。

  输出结果:

  目前,由于该字段的映射,可以将电子邮件映射到emailAddress。请注意,RefMap中的密钥是源实体的属性,并将值放在目标实体的属性上。不要逆转。

  输出结果:

  目前,由于属性名称不一致,该字段无法映射集合中的字段电子邮件。

  输出结果:

  它也可以像这样映射:

  有时我们需要将收集数据映射到实体,例如人类类

  现在,您需要将人类姓名分支的价值映射给学生,您可以做到这一点

  输出结果:

  有时我们需要类对象映射,例如基本培训类

  现在,您需要将基础人员映射到老师

  输出结果:

  有时我们会遇到多个映射,例如映射到

  这个场景有些复杂。学生和老师的属性具有不同的电子邮件字段,需要用于转换映射;Studentrade和Teachtrade中的属性也需要进行映射。

  多个映射方案需要根据情况调用注册字段映射。

  输出结果:

  如果您使用的是mybatis分页组件,则可以这样转换

  在MVC体系结构中,绝对必须使用对象复制和属性转换的功能。借用Orika组件可以简单地实现这些功能。本文根据Orika封装了工具类,这进一步简化了Orika的操作,希望为您提供帮助。

  最后,我是一个朦胧的果酱,是一名建筑师,写了代码,是一个架构的程序员,期待着您的转发和关注,当然,您可以添加我的个人微信Jianzh5,一起谈论技术!

  旧鸟类系列的源代码已上传到GitHub,所需的公共帐户[Java Nikko]回复关键字0923获取