Я новичок в Spring3.x, я изучаю поддержку DAO Spring. Я хочу знать разницу между NamedParameterJdbcTemplate и JdbcTemplate. Какой из них является лучшим с точки зрения производительности. И когда пойти на NamedParameterJdbcTemplate и когда нужно перейти на JdbcTemplate. Ваш ответ поможет многим начинающим, как я.
NamedParameterJdbcTemplate vs JdbcTemplate
Ответ 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 - это удобство, позволяющее использовать именованные параметры. Если вам действительно любопытно взглянуть на исходный код, который легко доступен для загрузки. Я считаю, что чтение исходного кода дает мне больше уверенности в ответах, которые я получаю на форумах.