Я узнаю о чудесах JdbcTemplate и NamedParameterJdbcTemplate. Мне нравится то, что я вижу, но есть ли какой-либо простой способ видеть базовый SQL, который он заканчивает тем, что выполнил? Я хотел бы видеть это в целях отладки (чтобы, например, отладить получающийся SQL во внешнем инструменте).
В документации Spring говорится, что они регистрируются на уровне DEBUG:
Весь SQL, выданный этим классом, регистрируется на уровне DEBUG ниже категория , соответствующая полному имени класса экземпляра шаблона (обычно JdbcTemplate, но он может быть другим, если вы используете настраиваемый подкласс класса JdbcTemplate).
В терминах XML вам нужно настроить регистратор примерно так:
<category name="org.springframework.jdbc.core.JdbcTemplate">
<priority value="debug" />
</category>
Однако эта тема обсуждалась здесь месяц назад, и кажется не так легко заставить работать, как в Hibernate, и / или он не возвращает ожидаемую информацию: Spring JDBC не регистрирует SQL с помощью log4j В этом разделе каждого раздела предлагается использовать P6Spy , который также может быть интегрирован в Spring согласно этой статье .
Я не уверен на 100%, что вы получаете, поскольку обычно вы передаете свои SQL-запросы (параметризованные или нет) в JdbcTemplate, и в этом случае вы должны просто регистрировать их. Если у вас есть PreparedStatement
, и вы не знаете, какой из них выполняется, метод toString
должен работать нормально. Но раз уж мы заговорили об этом, здесь есть хороший пакет регистратора Jdbc , который позволит вам автоматически регистрировать ваши запросы, а также каждый раз видеть связанные параметры. Очень полезно. Результат выглядит примерно так:
executing PreparedStatement: 'insert into ECAL_USER_APPT
(appt_id, user_id, accepted, scheduler, id) values (?, ?, ?, ?, null)'
with bind parameters: {1=25, 2=49, 3=1, 4=1}