что ORM использует для получения доступа к базе данных

#java #hibernate #jpa #jdbc #mybatis

#java #спящий режим #jpa #jdbc #mybatis

Вопрос:

Вопрос в том, что я не понимаю, как orm получают доступ к базе данных. С помощью JDBC мы создаем соединение, пишем инструкции и получаем результат. Но orm?

Я имею в виду — что Mybatis или Hibernate или другие orm используют для получения доступа к базе данных и выполнения запросов? Реализация JPA? JDBC? Что находится под их колпаками? Они используют драйверы базы данных?

Мне очень любопытно

Ответ №1:

JDBC — это низкоуровневый механизм взаимодействия с базой данных, но он является основой любого взаимодействия с базой данных Java. JDBC не предлагает никакой интеграции с управлением транзакциями, поскольку он позволяет вам реализовывать только локальные транзакции (на основе текущей фиксации / отката подключения к базе данных). Он также подробный, и в больших корпоративных приложениях с тысячами запросов добавление нового столбца в базовую таблицу вызывает просто боль, поскольку вам придется обновлять миллионы существующих запросов.

Помимо возможности объектно-реляционного сопоставления, инструменты ORM имеют множество других полезных функций:

  1. оптимистичная блокировка сложных деревьев сущностей
  2. полиморфные запросы
  3. интеграция управления локальными и XA транзакциями
  4. генерация схемы
  5. базовые запросы, не зависящие от базы данных, и DML

Но вам не обязательно использовать только инструмент ORM. На самом деле это анти-шаблон для больших приложений.

Обычно вы смешиваете Hibernate с собственными запросами или JOOQ, Чтобы воспользоваться специфическими функциями базы данных (оконные функции, общие табличные выражения и т. Д.)

Лучший подход — использовать подход стека уровня данных, где вы выбираете и смешиваете лучшее из Hibernate / JDBC / JOOQ.

Комментарии:

1. Спасибо, я рад, что вам нравятся мои ответы.

Ответ №2:

Реализации JPA, такие как Hibernate и EclipseLink, используют JDBC для подключения и выполнения SQL, который, в свою очередь, использует драйвер БД.

Это одна из целей спецификации JPA — абстрагироваться от подключения к БД, генерации и выполнения SQL из кода вашего приложения.

Комментарии:

1. Итак, в основном JDBC везде?

2. Да — детали JDBC, которые JPA считает несущественными, скрыты, но они все равно выполняют свою работу (и иногда возникают проблемы с утечкой).