2016-06-23 6 views
0

Целесообразно использовать JDBCTemplate и NamedParameterJdbcTemplate вместе с идеей, что NamedParameterJdbcTemplate используется для вставки/обновления в то время как JdbcTemplate заботится о получении и удаление? Потому что я могу вставлять объекты, используя NamedParameterJdbcTemplate так просто, как показано ниже:Spring JdbcTemplate и NamedParameterJdbcTemplate

public long save(Domain obj) { 

    String sql = "insert into domain(name,password,salt,dnspod_domain_id,status)" + 
      " values(:name,:password,:salt,:dnspodDomainId,:status)"; 

    KeyHolder keyHolder = new GeneratedKeyHolder(); 
    namedJdbc.update(sql, new BeanPropertySqlParameterSource(obj), keyHolder); 

    return keyHolder.getKey().longValue(); 
} 

Если я хочу, чтобы вставить объекты/данные в таблицу с помощью JDBCTemplate, мне придется писать много кода вручную Параметризацию с PreparedStatement .. .

Когда речь заходит о получении, я могу сделать это JDBCTemplate, как показано ниже:

List<User> users = jdbcTemplate.query("SELECT * FROM user", BeanPropertyRowMapper.newInstance(User.class)); 

Нет необходимости использовать ResultSet вместе с RowMapper для извлечения строк.

Я обеспокоен тем, что если есть проблемы с производительностью, используя JDBCTemplate и NamedParameterJdbcTemplate вместе.

+0

Вы можете, конечно. Но почему бы вам не использовать NamedParameterJdbcTemplate для выбора. Он предоставляет тот же метод: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.html#query-java.lang.String-org. springframework.jdbc.core.RowMapper-. Сторона примечания: у редактора вопросов есть кнопка для форматирования кода. Просто используйте его (или просто нажмите Ctrl-K или просто вставьте все строки кода с 4 пробелами). Не используйте HTML. –

+0

@JBNizet Большое спасибо за ваше предложение. –

ответ

0

Вы можете использовать как JdbcTemplate, так и NamedParameterJdbcTemplate всякий раз, когда это необходимо. JdbcTemplate немного подвержен ошибкам, так как порядок «?» заполнители, присутствующие в запросе и порядке параметров, которые вы передаете через массив или прямое задание, имеют значение.

Где NamedParameterJdbcTemplate позволяет присваивать имена параметрам и значениям карты параметрам по имени, не имеет значения, в каком порядке вы устанавливаете значения.

Согласно NamedParameterJdbcTemplate апи документ,

Этот класс делегатов обернутый JdbcTemplate один раз замещении из названных параметров в стиле JDBC «?» заполнители выполняются во время выполнения.

Таким образом, внутри api требуется некоторое дополнительное время для преобразования Именованных параметров в `? ', но это можно игнорировать.

Мое предложение состоит в том, что ваш запрос имеет слишком много параметров, начиная с NamedParameterJdbcTemplate, так как он безопасен и не содержит ошибок, оставайтесь с JdbcTemplate.

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

  • Нет связанных вопросов^_^