2016-11-04 5 views
1

При использовании Spring JdbcTemplate с подготовленными операторами мы можем либо установить значения параметров отдельно, либо просто передать массив объектов.Как весна JdbcTemplate распознает типы данных?

jdbctemplate.update(sql, arg1, arg2); 

или

jdbctemplate.update(sql, new Object[]{arg1, arg2}); 

Оба методы работают. Но я хочу знать, как знает jdbctemplate, чтобы данные сопоставлялись с типом столбца базы данных при передаче в виде массива объектов.

И есть ли разница в производительности в двух методах?

Как я могу зарегистрировать окончательный запрос, выполненный в базе данных. Включение журналов DEBUG для пакета org.springframework.jdbc не помогло мне.

ответ

2

Нет разницы между двумя вызовами на JdbcTemplate.update. Фактически оба ваших звонка переходят к одному и тому же методу. Существует только один способ update в JdbcTemplate

Который имеет следующую подпись

public int update(String sql, Object... args) throws DataAccessException 

Как вы можете видеть, что последний аргумент является переменной Довод Java (...) не является массивом. Таким образом, вы можете либо дать отдельные значения, либо массив объектов в один и тот же аргумент Variable Argument.

Для вашего вопроса о том, как JdbcTemplate знает, чтобы бросить данные, чтобы соответствовать с типом данных назначения, он просто создает PreparedStatement и вызывает PreparedStatement.set*** методы, основанные с приказом представляемым переменной Аргументы и значения и фактически только проверяет, является ли заданные значения составляют String, Date или Calendar и звонки PreparedStatement.setString или PreparedStatement.setTimestamp. Для всего остального только PreparedStatement.setObject

+0

Большое спасибо за подробный ответ. Можете ли вы также дать решение моему последнему вопросу относительно ведения журнала? –

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

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