#java #hibernate #jpa #jdbc #mybatis
#java #спящий режим #jpa #jdbc #mybatis
Вопрос:
Вопрос в том, что я не понимаю, как orm получают доступ к базе данных. С помощью JDBC мы создаем соединение, пишем инструкции и получаем результат. Но orm?
Я имею в виду — что Mybatis или Hibernate или другие orm используют для получения доступа к базе данных и выполнения запросов? Реализация JPA? JDBC? Что находится под их колпаками? Они используют драйверы базы данных?
Мне очень любопытно
Ответ №1:
JDBC — это низкоуровневый механизм взаимодействия с базой данных, но он является основой любого взаимодействия с базой данных Java. JDBC не предлагает никакой интеграции с управлением транзакциями, поскольку он позволяет вам реализовывать только локальные транзакции (на основе текущей фиксации / отката подключения к базе данных). Он также подробный, и в больших корпоративных приложениях с тысячами запросов добавление нового столбца в базовую таблицу вызывает просто боль, поскольку вам придется обновлять миллионы существующих запросов.
Помимо возможности объектно-реляционного сопоставления, инструменты ORM имеют множество других полезных функций:
- оптимистичная блокировка сложных деревьев сущностей
- полиморфные запросы
- интеграция управления локальными и XA транзакциями
- генерация схемы
- базовые запросы, не зависящие от базы данных, и DML
Но вам не обязательно использовать только инструмент ORM. На самом деле это анти-шаблон для больших приложений.
Обычно вы смешиваете Hibernate с собственными запросами или JOOQ, Чтобы воспользоваться специфическими функциями базы данных (оконные функции, общие табличные выражения и т. Д.)
Лучший подход — использовать подход стека уровня данных, где вы выбираете и смешиваете лучшее из Hibernate / JDBC / JOOQ.
Комментарии:
1. Спасибо, я рад, что вам нравятся мои ответы.
Ответ №2:
Реализации JPA, такие как Hibernate и EclipseLink, используют JDBC для подключения и выполнения SQL, который, в свою очередь, использует драйвер БД.
Это одна из целей спецификации JPA — абстрагироваться от подключения к БД, генерации и выполнения SQL из кода вашего приложения.
Комментарии:
1. Итак, в основном JDBC везде?
2. Да — детали JDBC, которые JPA считает несущественными, скрыты, но они все равно выполняют свою работу (и иногда возникают проблемы с утечкой).