Что такое JDBC?
JDBC (Java Database Connectivity) – это технология, которая обеспечивает доступ Java API к реляционным базам данных. Благодаря этому, наши Java-приложения могут выполнять SQL-запросы и взаимодействовать с базами данных (далее – БД), котрые поддерживают SQL.
JDBC является крайне гибкой и позволяет нам писать приложения, которые не зависят от конкретной платформы и могут взаимодействовать с различными СУБД без каких либо изменение в программном коде.
Какие плюсы даёт нам JDBC:
- Простая и понятная обработка SQL-запросов
- Крайне убдобна для небольших приложений
Простой и понятный синтаксис
Какие минусы JDBC:
- Сложно использовать и поддерживать в больших проектах
- Большое количество кода
- Сложно реализовывать концепцию MVC.
Что такое ORM (Object Relational Mapping)?
Когда мы создаём приложение на Java и хотим сделать так, чтобы наше приложение получило доступ к информации, которая хранится в БД, мы должны понимать крайне важную деталь.
Сущействует огромная разница между объектной моделью и реляционной.
СУБД даёт нам информацию в табличном формате, в то время, как Java даёт нам информацию в виде некоего графа объектов.
Представим ,что у нас есть класс Developer, который представляет разработчика:
Класс Developer.java
package net.proselyte.hibernate.intro;
public class Developer {
private int id;
private String firstName;
private String lastName;
private String specialty;
private String salary;
public Developer() {
}
public Developer(int id, String firstName, String lastName, String specialty, String salary) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.specialty = specialty;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getSpecialty() {
return specialty;
}
public void setSpecialty(String specialty) {
this.specialty = specialty;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
}
И есть таблица в БД, которая также представляет разработчика:
Таблица HIBERNATE_DEVELOPER:
create table HIBERNATE_DEVELOPERS (
id INT NOT NULL auto_increment,
first_name VARCHAR(50) default NULL,
last_name VARCHAR(50) default NULL,
specialty VARCHER(50) default NULL,
salary INT default NULL,
PRIMARY KEY (id)
);
Допустим, что после того, как мы создали и java-класс и таблицу в БД, нам необходимо изменить нашу БД, у нас сразу же возникает проблема.
К тому же, когда мы записываем или читаем данные в/из БД, у нас есть 5 проблем, которые связаны с разницей между объекто-ориентированной (далее – ОО) моделью и реляционной моделью:
- Наследование
В реляционной модели нет никакого понятия, похожего на наследование, которое является одним из ключевых принципов ООП. - Идентификация
Для БД есть только одна сущность, по которому объект может быть идентифицирован – это Первичный Ключ (Primary Key). В то время, как в Java у нас есть такие вещи, как (entity1 == entity2) и (object1.equals(object2)). - Ассоциации
В Java мы используем ссылки на объекты для ассоциации, а в реляционной модели – Внешний Ключ (Foreign Key). - Доступ
В Java и в реляционной БД абсолютно разные способы получения доступа в объекту. - Инкапсуляция
Крайне часто, при разработке приложений ,вы будете сталкиваться (или уже сталкивались) с тем, что наша ОО модель имеет больше классов, чем таблиц в нашей БД.
Отсюда возникает проблема: как сделать так, чтобы Java приложение получало доступ к БД и могло корректно интерпретировать эту информацию.
Другими словами, нам нужно создать связь между Объектом и реляционной сущностью, иначе говоря Объектно-Реляционное-Связывание или же – ORM (Object-Relational Mapping).
ORM – это техника программирования, которая служит для того, чтобы обеспечивать преобразование данных при их обмене между реляционной базой данных и (в нашем случае) Java.
Так какие же преимущества нам даёт ORM в сравнение с JDBC?
- Позволяет нашим бизнес методам обращаться не к БД, а к Java-классам
- Ускоряет разработку приложения
- Основан на JDBC
- Отделяет SQL-запросы от ОО модели
- Позволяет не думать о реализации БД
- Сущности основаны на бизнес-задачах, а не на стуктуре БД
- Управление транзакциями
ORM состоит из:
- API, который реализует базовые операции (СОЗДАНИЕ, ЧТЕНИЕ, ИЗМЕНЕНИЕ, УДАЛЕНИЕ) объектов-моделей.
- Средства настройки метаданных связывания
- Технику взаимодействия с транзакциями, которая позволяет реализовать такие функции, как dirty checking, lazy association fetching и т.д.
А самыми распрастранёнными ORM фреймворками являются:
- Hibernate (который мы и будем изучать в этом цикле статей)
- EJB
- JDO
- Spring DAO
- TopLink