Возможно, это возможно выполнить как пакетное выполнение, но я не уверен, что это возможно. Я давно не использую iBatis 2.
Я уверен, что каждый оператор SQL будет работать отдельно. При многократном вызове практически нет накладных расходов, если только вы не выполняете тысячи обновлений одновременно. Вы?
Я думаю, вы могли бы вызывать каждый раз, используя класс параметров, например:
class updateDptParams {
String name;
String column;
String value;
// setters & getters omitted for brevity
}
Тогда преобразователь мог бы выглядеть так:
<update id="updateDepartment" parameterClass="updateDptParams">
update Department set ${column}=${value} where department_name=#{name}
</update>
Примечание что column
и value
- это введенные как строки (с использованием ${}
), поскольку они должны иметь типы переменных. Однако name
- это стандартный параметр iBatis JDB C (с использованием #{}
), так как это всегда VARCHAR. Убедитесь, что введенные параметры поступают из известного источника, а не из пользовательского интерфейса или другого внешнего источника; в противном случае ваш код будет уязвим для SQL Injection.
Наконец, если вы обновляете тысячи строк, это решение может быть хорошим. Это может быть улучшенная пакетная обработка обновлений или одновременное выполнение нескольких обновлений с использованием сложных операторов SQL. Однако я не уверен, насколько простой или подверженной ошибкам может быть эта потенциальная оптимизация.