Подтвердить что ты не робот

NamedParameterJdbcTemplate vs JdbcTemplate

Я новичок в Spring3.x, я изучаю поддержку DAO Spring. Я хочу знать разницу между NamedParameterJdbcTemplate и JdbcTemplate. Какой из них является лучшим с точки зрения производительности. И когда пойти на NamedParameterJdbcTemplate и когда нужно перейти на JdbcTemplate. Ваш ответ поможет многим начинающим, как я.

4b9b3361

Ответ 1

Когда вы используете JdbcTemplate, вы предоставляете ему SQL, у которого есть ? placeholder для каждого параметра, который вы хотите заменить в SQL. Когда вы назначаете параметры в коде, вам нужно передать аргументы в массиве, и они будут использоваться в том порядке, в котором они появляются в массиве, например:

Object[] args = new Object[] {"x", "y"};
String sql = "select * from foo where a = ? and b = ?";
jdbcTemplate.query(sql, args, resultSetExtractor);

так что SQL, который запускается, select * from foo where a = 'x' and b = 'y'.

NamedParameterJdbcTemplate позволяет назначать имена для заполнителей параметров и передавать карту, чтобы шаблон мог сопоставлять имена карт с заполнителями. Таким образом, ваш код будет выглядеть так:

String sql = "select * from foo where a = :mya and b = :myb";
Map<String, Object> argMap = new HashMap<String, Object>();
argMap.put("mya", "x");
argMap.put("myb", "y");
namedParameterJdbcTemplate.query(sql, argMap, resultSetExtractor);

генерирует тот же SQL, что и первый пример (и выполнение запроса - это часть времени, производительность вставки аргумента не является проблемой).

Идея состоит в том, что сопоставление аргументов по имени менее подвержено ошибкам, чем указание их в определенном порядке. В реальном приложении обычно SQL хранится в отдельном файле из кода DAO, и может быть легко случайно получить параметры в неправильном порядке.

Ответ 2

Нет измеримых разностных характеристик. NamedParameterJdbcTemplate - это удобство, позволяющее использовать именованные параметры. Если вам действительно любопытно взглянуть на исходный код, который легко доступен для загрузки. Я считаю, что чтение исходного кода дает мне больше уверенности в ответах, которые я получаю на форумах.