Является ли Spring JdbcTemplate быстрее, чем Spring Data Jpa?

Наш клиент заставляет нас использовать JdbcTemplate вместо Spring Data Jpa для разработки проекта Spring. Однако приложение не является критичным с точки зрения скорости и доставки ответов (это внутреннее веб-приложение для конечных пользователей клиента). Мы хотели бы использовать Spring Data Jpa.

Вопрос: Есть ли объективная причина использовать JdbcTemplate из-за скорости работы приложения? С моей точки зрения, будут разные узкие места.


person Artegon    schedule 06.11.2019    source источник
comment
Этот вопрос кажется актуальным stackoverflow.com/questions/4573975/   -  person Jens Schauder    schedule 06.11.2019
comment
Также: stackoverflow. ком/вопросы/42470060/   -  person Jens Schauder    schedule 06.11.2019


Ответы (1)


На вопрос, что быстрее, невозможно ответить без указания конкретного варианта использования.

JdbcTemplate, скорее всего, будет быстрее, когда речь идет о чистом выполнении запросов, потому что реализация JPA будет делать больше:

  • Разобрать JPQL (при условии, что вы его используете)
  • создание SQL-запроса из этого
  • выполнение его
  • преобразование результата в объекты

В то время как шаблон будет (почти) просто:

  • выполнить запрос
  • передать вам результат как вызов ResultSetMapper или аналогичный.

Конечно, JPA делает все это не просто так.

  • он предлагает разумную степень независимости базы данных.
  • он отслеживает ваши изменения и генерирует правильные операторы обновления для их сохранения.
  • он допускает ленивую загрузку, поэтому вам не нужно думать о том, что загружать заранее (конечно, вам все равно придется это делать, если вы заботитесь о производительности).

И эти вещи имеют затраты помимо производительности.

Абстракция, которую предлагает JPA, на самом деле очень сложна и негерметична, и большинство разработчиков, использующих ее, не понимает ее должным образом. Хотя я считаю, что во многих случаях использование JPA вполне разумно, я также могу относиться к людям, запрещающим его использование в своих проектах. Разговоры о производительности абсолютно слишком ограничены, чтобы принимать взвешенное решение по этому поводу.

person Jens Schauder    schedule 06.11.2019
comment
Вы правы в том, что Spring Data JPA должен делать дополнительные вещи по сравнению с простым JdbcTemplate, однако большая часть времени, скорее всего, будет потрачена на ввод-вывод (общение с БД) и ожидание выполнения БД запроса, поэтому дополнительные то, что делает JPA, скорее всего, не имеет значения. - person Jesper; 06.11.2019