当前位置: 首页 > 知识库问答 >
问题:

是否可以在运行时创建Java模型对象并动态映射Spring批处理读取器中的字段?

尹钱青
2023-03-14

我们正试图使我们的spring批处理作业更加通用。在这个过程中,我们希望使读取器、处理器和写入器之间传递的模型对象也是泛型/动态的。如果我们将表名、列名、类型名存储在数据库中,并在运行时获取这些信息,我们是否能够动态创建一个模型类,映射读取器中读取的数据并将其传递给写入器?

是否可以在运行时创建MyClass并根据配置进行映射?RowMapper不接受泛型?那么,我们如何在代码中指定它而不在运行时实际具有已经编译的类呢?

公共类MyRowMapper实现RowMapper{

@Override
public MyClass mapRow(ResultSet rs, int rowNum) throws SQLException {

    MyClass myClass= new MyClass();
            myClass.setName(rs.getString("Name"));
            myClass.setNumber(rs.getLong("Number"));
    return myClass;
}

}

共有1个答案

房项禹
2023-03-14

我们是否能够在动态中创建一个模型类,映射读取器中读取的数据并将其传递给写入器?

是的,使用字节码库可以在运行时创建类,然后使用反射赋值,并传递对象,但这有什么意义呢?

如果没有代码提前知道对象,即使是使用数据的代码也需要使用反射来访问数据。

您还可以使用映射 。或者,如果您也需要携带元数据(例如,值为空时的值类型),则可以使用一些围绕它的包装类。

Spring已经可以为你做到这一点了。例如。使用jdbctemplate,而不是调用

<T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)

你可以打电话

List<Map<String,Object>> queryForList(String sql, Object... args)
 类似资料:
  • 问题内容: 例如,假设我想“提取” 为三个单独的变量,例如: 我该怎么做,而忽略了 “为什么要这么做呢?” 您可能会被问到这个问题。 之前已经多次问过类似的问题,但是从未给出真正的答案,因为OP真正需要的是使用不同的方法。很好,但这有可能吗? 我看过反射,似乎没有任何方法可以使我甚至向实例添加额外的字段,更不用说动态创建本地了。 问题答案: 是否可以在Java运行时创建变量? 简单回答是不。 Ja

  • 问题内容: 可以说我在代码中的某个位置有一个按钮:“ JButton closeButton”。我不知道它叫“ closeButton”,但这是我想找出的。 在运行时,该按钮将被单击,一旦完成,我就可以通过反射和AWT api找到很多关于它的信息-但是我不能做的就是找出它的位置- 在代码中如何调用它,名字叫什么它声明为(“ closeButton”)。 是否可以从JVM中找到它? 有没有一种方法可

  • 问题内容: 让我们考虑以下情况。有一个,有一个。子窗格将添加到父窗格。考虑到可以动态地添加和删除子窗格而没有任何限制和顺序的情况下,如何才能仅在可见子窗格的情况下使parentPane可见。当然childPane的可见状态也可以随时更改。是否可以创建动态Bindings.OR,以便我可以动态向其添加/删除子可见属性?如果是,那怎么办?如果没有,那么在这种情况下使用什么解决方案? 问题答案: 您可以

  • 嗨,我是新春批。 我有如下Spring批次的情况: 我需要运行所有促销的批处理[促销列表] > 在这里,我想再次从batch中读取上面的动态查询,因为它返回的结果至少为5万条记录。 以下是我所期待的过程,这在Spring批次中是否可行? 阅读促销【读者逐一阅读促销】 创建查询并将其放在上下文中 传递给下一个读者 读取器逐个读取事务 处理交易并计算积分 我这里的问题是不能写嵌套块[一个用于读取提升,

  • 问题内容: 我在以下架构中具有json对象: 在这里,该字段包含一个嵌入的json对象,并且该对象的模式是动态的,并且每次都不同。 的对象是不同的API服务,以及不同的API服务的不同方法获得的原始输出。不可能将其映射到所有可能的值。 是否可能有如下所示的java类: 或者类似的东西,以便我可以接收基本架构并对其进行处理,然后将其发送到相关类,该类将转换为适当的预期类? 问题答案: 使用 您可以从