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 не работает наилучшим образом для наших текущих требований к приложению.