我们正在尝试使春季批处理工作更加通用。在此过程中,我们还希望使在读取器,处理器和写入器之间传递的模型对象具有通用性/动态性。 如果我们将表名,列名,类型名存储在数据库中,并在运行时获取此信息,我们将能够动态创建模型类,映射在读取器中读取的数据并将其传递跟作家在一起?
是否可以在运行时创建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;
}
}
答案 0 :(得分:2)
我们将能够即时创建模型类,映射在读取器中读取的数据并将其传递给写入器吗?
是的,使用字节码库,您可以在运行时创建类,然后使用反射分配值,然后将对象传递给周围,但是重点是什么?
如果没有代码提前知道对象,那么即使使用数据的代码也需要使用反射来访问数据。
您也可以只使用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)