2013-10-04 4 views
2

я видел код для пакетного обновления, как показано ниже, используя ArrayList:пакетного обновления с использованием JdbcTemplate весной

@Override 
public void saveBatch(final List<Employee> employeeList) { 
    final int batchSize = 500; 

    for (int j = 0; j < employeeList.size(); j += batchSize) { 

     final List<Employee> batchList = employeeList.subList(j, j + batchSize > employeeList.size() ? employeeList.size() : j + batchSize); 

     getJdbcTemplate().batchUpdate(QUERY_SAVE, 
      new BatchPreparedStatementSetter() { 
       @Override 
       public void setValues(PreparedStatement ps, int i) 
         throws SQLException { 
        Employee employee = batchList.get(i); 
        ps.setString(1, employee.getFirstname()); 
        ps.setString(2, employee.getLastname()); 
        ps.setString(3, employee.getEmployeeIdOnSourceSystem()); 
       } 

       @Override 
       public int getBatchSize() { 
        return batchList.size(); 
       } 
      }); 

    } 
} 

, но если я использую Hashmap как ниже: HashMap<String, VerifyPaymentRO> verifyPaymentInfoMap

VerifyPaymentRO является Java Bean

Как использовать его для обновления записи?

ответ

1

Просто создайте List<?> из значений карты и вы можете использовать один и тот же код, который вы выложили:

List<VerifyPaymentRO> verifyPaymentList = new ArrayList<>(verifyPaymentInfoMap.values()); 
+0

Он работал хорошо, как я ожидал, как теперь вернуть статус, как будет ли сделано обновление или не смогли?? +1 за ваше сообщение спасибо. –

+0

Ну, если это не удается, будет исключено исключение во время выполнения. Если вы хотите пропустить неудачные партии, вам также нужно будет заботиться о вашей обработке транзакций (т. Е. Каждая партия должна запускаться в своей собственной транзакции, чтобы ее можно было отбросить), проверьте распространение TransactionTemplate и 'REQUIRES_NEW'. –

Смежные вопросы