【问题标题】:How to set fields on an existing object only if the corresponding fields on an input object are not null仅当输入对象上的相应字段不为空时,如何在现有对象上设置字段
【发布时间】:2021-08-10 16:55:31
【问题描述】:

如果incoming 字段不为空,我如何才能将值设置到existing 对象中?在提交表单时,在更新数据库保存上的现有对象之前,我会检查传入字段是否不为空。我的字段太多,每个字段的 sn-ps 太多。有没有一种优雅的方法来仅设置 existing 对象上的更新字段?

protected void updateFoo(Foo input, Foo existing) {
    if (input.getEducation() != null) {
        existing.setEducation(input.getEducation());
    }
    ...
}

【问题讨论】:

  • Spring 有一个叫做BeanUtils.copyProperties 的东西,可以配置为跳过空值。这个问题涉及这种情况:stackoverflow.com/questions/19737626/…
  • @Andy 的目的是使用额外的库或其他实用程序或任何构建时间注释来降低 updateFoo 的复杂性。感谢您是否可以提供可能的解决方案,因为属性的数量一直在不断增加,并且增加了更多的维护

标签: java


【解决方案1】:

您可以组合地图中的所有字段。当出现任何新值时,更新子映射并将子映射传输到接收器。

https://www.javatpoint.com/java-map

https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/HashMap.html

https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/SortedMap.html

例子:

your database row

Value: 1  2  3  4  5

您从任何数据库行(可能是第 0 行)中创建一次地图,然后将此地图用作接收方的参考卡。

myMap

Key:   A  B  C  D  E
Value: 1  2  3  4  5

您的数据库更改为:

your database row

Value: 1  2  7  4  9

您创建一个子地图。

mySubMap

Key:   C  E
Value: 7  9

您将该子地图传输到接收器并更新接收器。

本文中存在一些小的逻辑错误,但我希望你能明白。

PS 地图的运行速度比 if...else 快,尤其是在大型数据库中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多