У меня есть проблема, которая предполагает, что у меня изначально было 100 записей, и я показал их в пользовательском интерфейсе в виде списка пользователей. Теперь я дал возможность деактивировать числовых пользователей, нажав кнопку «деактивировать», которая размещена напротив каждой отдельной записи, затем я собираю всех «деактивированных» пользователей в список и отправляю его на уровень DAO. [логика деактивации пользователя просто установить для флага «isDeleted» значение true, т.е. мягкое удаление. Так что это так же хорошо, как я обновляю несколько записей, идентификаторы которых я поместил в список]. список-> и для каждой записи запускайте запрос на обновление флага isDeleted до true, но это неосуществимое решение, если у меня есть, скажем, 5000 записей, которые нужно удалить одновременно. Я слышал и реализовал концепцию пакетного обновления для "вставки" нескольких записей одновременно, но я не понимаю, как я могу использовать пакетное обновление для обновления нескольких записей только за один вызов БД. Пожалуйста, помогите, Пакетное обновление код для вставки следующий,
private static final String INSERT_USER_PERMISSION =
"INSERT INTO permission_transaction(permissionId,userId,isDeleted) "
+ "VALUES(?,?,?)";
@Transactional
public void addPermission(final UserVO userVo, final List<PermissionVO> permissionVoList)
throws Exception {
logger.info("Adding user permission, for userId: "+userVo.getUserId());
try {
jdbc.batchUpdate(INSERT_USER_PERMISSION, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
PermissionVO permissionVo = permissionVoList.get(i);
ps.setInt(1, permissionVo.getPermissionId());
ps.setInt(2, userVo.getUserId());
ps.setBoolean(3, false);
}
@Override
public int getBatchSize() {
return permissionVoList.size();
}
});
logger.info("Exiting addPermission, for userId: "+userVo.getUserId());
}catch (Exception e) {
logger.error("Error in adding user permission: " + e.getMessage(), e);
throw e;
}
}