Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
10 Июл 2023
2 мин
230

Как выводить SQL-запросы с параметрами в Hibernate

Одной из типичных проблем, с которой сталкиваются начинающие разработчики, работающие с Hibernate, является необходимость отслеживания генерируемых

Одной из типичных проблем, с которой сталкиваются начинающие разработчики, работающие с Hibernate, является необходимость отслеживания генерируемых SQL-запросов. В логах Hibernate эти запросы обычно отображаются с вопросительными знаками вместо реальных значений параметров, что затрудняет отладку.

SELECT * FROM user WHERE name = ? AND age = ?

В этой статье рассмотрим, как можно настроить Hibernate для вывода SQL-запросов с реальными значениями параметров.

Настройка Hibernate

В Hibernate нет прямого способа для замены вопросительных знаков на реальные значения, но это можно обойти, используя функциональность, предоставляемую библиотекой P6Spy.

P6Spy — это прокси для базы данных, которое позволяет перехватывать и изменять SQL-запросы перед их выполнением.

Сначала необходимо добавить зависимость P6Spy в файле pom.xml:

<dependency>
  <groupId>p6spy</groupId>
  <artifactId>p6spy</artifactId>
  <version>3.8.6</version>
</dependency>

После этого нужно изменить конфигурацию Hibernate, заменив URL подключения к базе данных на прокси-URL P6Spy.

<property name="hibernate.connection.url" value="jdbc:p6spy:mysql://localhost:3306/mydb"/>

Также необходимо указать com.p6spy.engine.spy.P6SpyDriver в качестве драйвера JDBC:

<property name="hibernate.connection.driver_class" value="com.p6spy.engine.spy.P6SpyDriver"/>

Настройка P6Spy

P6Spy предоставляет возможность настройки через файл spy.properties.

Для вывода SQL-запросов с реальными значениями параметров необходимо установить следующие свойства:

logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(currentTime)|%(executionTime)|%(category)|connection%(connectionId)|%(sqlSingleLine)

Теперь, при выполнении SQL-запросов через Hibernate, в логах будут отображаться запросы с реальными значениями параметров, что значительно упростит процесс отладки.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий