Перейти к основному содержимому

Сравнение между JPA и JDBC

· 5 мин. чтения

1. Обзор

В этом руководстве мы рассмотрим различия между API подключения к базе данных Java (JDBC) и API Java Persistence (JPA) .

2. Что такое JDBC

JDBC — это интерфейс уровня программирования для приложений Java, взаимодействующих с базой данных. Приложение использует этот API для связи с менеджером JDBC. Это общий API, который код нашего приложения использует для связи с базой данных. Помимо API, для базы данных, которую мы используем, предоставляется поставляемый поставщиком JDBC-совместимый драйвер.

3. Что такое JPA

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

4. JPA против JDBC

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

4.1. Взаимодействие с базой данных

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

Давайте посмотрим, как мы можем сопоставить класс Employee с таблицей базы данных сотрудников :

@Entity
@Table(name = "employee")
public class Employee implements Serializable {
@Column(name = "employee_name")
private String employeeName;
}

Затем инфраструктура JPA обрабатывает весь трудоемкий и подверженный ошибкам код, необходимый для преобразования между объектно-ориентированным кодом Java и серверной базой данных .

4.2. Управление ассоциациями

При связывании таблиц базы данных в запросе с JDBC нам нужно написать полный SQL-запрос, в то время как с JPA мы просто используем аннотации для создания «один к одному», «один ко многим», «многие к одному» и «многие». - ко многим ассоциациям .

Допустим, наша таблица сотрудников имеет отношение «один ко многим» с таблицей связи :

@Entity
@Table(name = "employee")
public class Employee implements Serializable {

@OneToMany(mappedBy = "employee", fetch = FetchType.EAGER)
@OrderBy("firstName asc")
private Set communications;
}

Владельцем этого отношения является Communication , поэтому мы используем атрибут mappedBy в Employee , чтобы сделать его двунаправленным.

4.3. Зависимость от базы данных

JDBC зависит от базы данных, а это означает, что для разных баз данных должны быть написаны разные сценарии . С другой стороны, JPA не зависит от базы данных, что означает, что один и тот же код может использоваться в различных базах данных с небольшими модификациями (или без них) . ** **

4.4. Обработка исключений

Поскольку JDBC генерирует проверенные исключения, такие как SQLException, мы должны записать его в блоке try-catch . С другой стороны, среда JPA использует только непроверенные исключения, такие как Hibernate . Следовательно, нам не нужно перехватывать или объявлять их в каждом месте, где мы их используем.

4.5. Производительность

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

Честно говоря, когда мы неправильно пишем SQL-запросы, производительность JDBC может быть ужасно низкой. При выборе между двумя технологиями производительность не должна быть предметом спора. Профессиональные разработчики более чем способны создавать Java-приложения, одинаково хорошо работающие независимо от используемой технологии.

4.6. JDBC-зависимость

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

4.7. Управление транзакциями

В JDBC управление транзакциями осуществляется явно с помощью фиксации и отката. С другой стороны, управление транзакциями неявно предусмотрено в JPA .

5. Плюсы и минусы

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

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

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

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

6. Заключение

В этом кратком руководстве мы рассмотрели ключевые различия между JPA и JDBC.

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