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

Is it possible to create a Java Model Object at runtime and map the fields from the Spring Batch Reader dynamically?

我们正在尝试使Spring批处理工作更加通用。在此过程中,我们还希望使在读取器,处理器和写入器之间传递的模型对象具有通用性/动态性。
如果我们将表名,列名,类型名存储在数据库中,并在运行时获取此信息,我们将能够动态创建模型类,映射在读取器中读取的数据并将其传递跟作者在一起?

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

公共类MyRowMapper实现RowMapper {

1
2
3
4
5
6
7
8
9
10
@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>。或者围绕它的一些package类,如果您也需要携带元数据(例如,值为null时的值类型)。

Spring已经可以为您完成此任务。例如。使用JdbcTemplate,而不是调用

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

您可以直接致电

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