gpt4 book ai didi

java - 是否可以在运行时创建 Java 模型对象并动态映射 Spring Batch Reader 中的字段?

转载 作者:行者123 更新时间:2023-12-02 01:28:51 25 4
gpt4 key购买 nike

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

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

公共(public)类 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;
}

}

最佳答案

will we be able to create a model class on the fly, map the data read in the reader and pass it along to the writer?

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

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

您不妨只使用 Map<String, Object> 。或者一些围绕它的包装类,如果您也需要携带元数据(例如,当值为 null 时的值类型)。

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

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

你可以打电话

List<Map<String,Object>> queryForList(String sql, Object... args)

关于java - 是否可以在运行时创建 Java 模型对象并动态映射 Spring Batch Reader 中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56435377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com