JPA или JDBC, как они отличаются?

Я изучаю Java EE, и я загрузил затмение с помощью стеклянной рыбы для того же самого. Я видел несколько примеров, а также читал документы Oracle, чтобы узнать все о Java EE 5. Подключение к базе данных было очень простым. Я открыл динамический веб-проект, создал сеанс EJB, я использовал EntityManager и с помощью методов get мог получить доступ к таблице сохраненных данных.

В моем следующем проекте я создал простой класс, а затем получил доступ к некоторой таблице DB. Первая проблема, с которой я столкнулся, заключалась в том, что атрибут PersistenceUnit будет распознаваться только EJB, Servlet и т.д., А не простой класс java. Итак, я не мог использовать способ EntityManager (или я могу?)

Меня попросили пройти через "JDBC". Первой проблемой, с которой я столкнулся, было подключение к БД. Кажется, все это должно быть жестко запрограммировано. У меня был persistence.xml, с которым я мог легко настроить соединение с базой данных. Даже настроить драйвер для БД было легко. Также нет методов get/set в JDBC для доступа к объектам таблиц.

Как я понимаю JPA и постоянство в отношении JDBC? О чем думала JPA? Почему существуют методы set/get? Может кто-то пролить свет на суть этих двух и какие плюсы и минусы без "жаргонов"? Пожалуйста, также предложите некоторые ссылки. Простой поиск Google различий JPA и JDBC привел меня к некоторым сайтам, полным "терминологии", за которыми я не мог следовать: (

Ответ 1

Условия Layman:

  • JDBC является стандартом для доступа к базе данных
  • JPA является стандартом для ORM

JDBC является стандартом для непосредственного подключения к БД и выполнения SQL против него - например, SELECT * FROM USERS и т.д. Наборы данных могут быть возвращены, которые вы можете обрабатывать в своем приложении, и вы можете делать все обычные вещи, например INSERTS, DELETES, запускать хранимые процедуры и т.д. Это одна из основных технологий, лежащих в основе большинства доступа к базе данных java (включая поставщиков JPA).

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

JPA является стандартом для реляционного сопоставления объектов. Это технология, которая позволяет вам сопоставлять объекты в кодах и таблицах баз данных. Это может "скрыть" SQL от разработчика, так что все, с чем они имеют дело, - это классы Java, и поставщик позволяет вам сохранять их и загружать их магически. В основном, файлы сопоставления XML или аннотации на геттерах, сеттерах могут использоваться, чтобы сообщить провайдеру JPA, какие поля на вашей карте объектов, в какие поля в БД. Самый известный поставщик JPA - Hibernate, поэтому это хорошее место для конкретных примеров.

http://www.hibernate.org/

Другие примеры включают OpenJPA, toplink и т.д.

Под капотом, Hibernate и большинство других провайдеров JPA записывают SQL и используют JDBC для чтения и записи в БД.

Ответ 2

Основное различие между JPA и JDBC является уровнем абстракции.

JDBC - это стандарт низкого уровня для взаимодействия с базами данных. JPA - это стандарт более высокого уровня с той же целью. JPA позволяет использовать объектную модель в своем приложении, которая может сделать вашу жизнь намного проще. JDBC позволяет вам делать больше вещей с базой данных напрямую, но это требует большего внимания. Некоторые задачи не могут быть эффективно решены с использованием JPA, но могут быть решены более эффективно с JDBC.

Ответ 3

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

Теперь, чтобы понять и использовать JDBC, важно, чтобы у вас было некоторое понимание и знание SQL. С этим также возникает необходимая информация о том, что такое реляционная база данных, как вы работаете с ней и такие понятия, как таблицы, столбцы, ключи и отношения. Если у вас нет хотя бы базового понимания баз данных, SQL и моделирования данных, вы не сможете много использовать JDBC, поскольку на самом деле это всего лишь тонкая абстракция поверх этих вещей.

Ответ 4

JDBC является предшественником JPA.

JDBC - это мост между миром Java и миром баз данных. В JDBC вам нужно выставить все грязные данные, необходимые для операций CRUD, такие как имена таблиц, имена столбцов, а в JPA (который использует JDBC), вы также указываете эти детали метаданных базы данных, но с использованием аннотаций Java.

Итак, JPA создает для вас запросы обновления и управляет сущностями, которые вы искали или создавали/обновляли (это также делает больше).

Если вы хотите сделать JPA без контейнера Java EE, тогда Spring и его библиотеки могут использоваться с теми же аннотациями Java.