Можно ли создать объект модели Java во время выполнения и динамически отобразить поля из Spring Batch Reader? - PullRequest
0 голосов
/ 04 июня 2019

Мы пытаемся сделать наши весенние пакетные задания более общими.В этом процессе мы хотим сделать объект модели, который передается между читателем, процессором и записывающим устройством, также общим / динамическим.Если мы сохраним имя таблицы, имя столбца, имя типа в базе данных и получим эту информацию во время выполнения, мы сможем создать класс модели на лету, отобразить данные, считанные в считывателе, и передать ихвместе с писателем?

Можно ли создать 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 Ответ

2 голосов
/ 04 июня 2019

сможем ли мы создать класс модели на лету, отобразить данные, считанные в считывателе, и передать их автору записи?

Да, используя библиотеку байт-кода, которую выможет создавать классы во время выполнения, затем присваивать значения, используя отражение, и передавать объект, но в чем будет смысл?

Если ни один код не знает объект заранее, даже кодиспользование данных требует использования отражения для доступа к данным.

Вы также можете просто использовать Map<String, Object>.Или некоторый класс обтекания вокруг этого, если вам нужно также переносить метаданные (например, тип значения, когда значение равно нулю).

Spring уже может сделать это за вас.Например, с JdbcTemplate вместо звонка

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

вы можете просто позвонить

List<Map<String,Object>> queryForList(String sql, Object... args)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...