Как избежать добавления элемента в метод Spring JdbcTemplate batchUpdate при использовании ParameterizedPreparedStatementSetter?

#java #spring #spring-jdbc

#java #spring #spring-jdbc

Вопрос:

Мне нужно пропустить определенный элемент из списка, т.Е. objectlistToprocess, при пакетном обновлении с использованием Spring JdbcTemplate.

  1. один из способов — удалить элементы из списка перед вызовом пакетного обновления и предоставить список. Но для этого потребуется больше итераций по списку, по одному по всему списку для удаления элементов, а затем по пакетному обновлению для установки значений.
  2. избегайте итераций и просто пропустите элемент в методе пакетного обновления (но как).
 
this.getJdbcTemplate().batchUpdate(Query,objectlistToprocess ,batchSize, new 
     ParameterizedPreparedStatementSetter<MyObject>() {
            @Override
            public void setValues(PreparedStatement ps, MyObject) throws SQLException {
               // set all parameterized values
               // SKIP ELEMENT BUT HOW?????
            }
     }

  

Комментарии:

1. Используйте 1. Вероятность существенного влияния на производительность почти равна 0. Или не добавляйте элемент в список в первую очередь.

2. @JBNizet у меня есть более 20 списков с различными размерами, которые могут варьироваться от 10 до 50 в каждом списке. и я должен сначала удалить определенные элементы из списка 20 , поэтому я хочу удалить их в batchUpdate и избежать предварительного удаления с помощью цикла FOR. Для нас даже задержка в 1 секунду при удалении элементов списка является БОЛЬШОЙ проблемой производительности. поскольку нам нужно обрабатывать огромные данные.

3. Хорошо, итак, давайте предположим наихудший случай и скажем, что у вас есть 50 элементов в каждом из ваших 20 списков. 20 * 50 == 1000. Это не так уж и много. Это крошечное. Java не требуется 1 секунда для фильтрации 1000 элементов. Для этого требуется несколько наносекунд или микросекунд. И время, которое требуется по сравнению со временем, необходимым для заполнения инструкции, отправки данных по сети в базу данных, ожидания записи данных на диск и получения результата, совершенно незначительно.

4. Не говоря уже о том, что вам все равно пришлось бы выполнять логику фильтрации для каждого элемента, если вы поместите ее в вызов setValues().

5. Я согласен, что это незначительно, но иметь хорошую логику и минимизировать накладные расходы. мы должны принять этот подход к программированию. Число BTW предназначено только для одного профиля, у меня есть 100 ТЫСЯЧ профилей для обработки, которые содержат этот список. НО как реализовать эту логику пропуска при setValues или пакетном обновлении.?