Объектно - ориентированное программирование (лекция 6)

Содержание

Слайд 2

План

Hibernate
Подключение Hibernate
Подключение Java приложения к БД
Создание связи между классом и таблицей
Сохранение Java

План Hibernate Подключение Hibernate Подключение Java приложения к БД Создание связи между
объектов в БД
Генерация значений для столбца Primary Key
Получение Java объектов из БД
Изменение Java объектов в БД
Удаление Java объектов из БД

Слайд 3

Hibernate

Hibernate – это ORM фреймворк, который используется для создания, чтения, редактирования и

Hibernate Hibernate – это ORM фреймворк, который используется для создания, чтения, редактирования
удаления записей из базы данных (CRUD).

Java Application

Hibernate

DB

Слайд 4

Hibernate

Hibernate предоставляет технологию ORM.
ORM или Object-relational mapping (рус. Объектно-реляционное отображение) — это

Hibernate Hibernate предоставляет технологию ORM. ORM или Object-relational mapping (рус. Объектно-реляционное отображение)
технология программирования, которая позволяет преобразовывать несовместимые типы моделей в ООП, в частности, между хранилищем данных и объектами программирования.
ORM используется для упрощения процесса сохранения объектов в реляционную базу данных и их извлечения, при этом ORM сама заботится о преобразовании данных между двумя несовместимыми состояниями.
Большинство ORM-инструментов в значительной мере полагаются на метаданные базы данных и объектов, так что объектам ничего не нужно знать о структуре базы данных, а базе данных — ничего о том, как данные организованы в приложении. ORM обеспечивает полное разделение задач в хорошо спроектированных приложениях, при котором и база данных, и приложение могут работать с данными каждый в своей исходной форме.

Слайд 5

Hibernate

Преимущества и недостатки ORM
Использование ORM в проекте избавляет разработчика от необходимости работы

Hibernate Преимущества и недостатки ORM Использование ORM в проекте избавляет разработчика от
с SQL и написания большого количества кода, часто однообразного и подверженного ошибкам. Весь генерируемый ORM код предположительно хорошо проверен и оптимизирован, поэтому не нужно в целом задумывается о его тестировании. Это несомненно является плюсом.
Основной минус — это потеря производительности. Это происходит потому, что большинство ORM предназначены для обработки широкого спектра сценариев использования данных, гораздо большего, чем любое отдельное приложение когда-либо сможет использовать. Вопрос о целесообразности использования ORM по большому счету затрагивается только в больших проектах, которые сталкиваются с высокой нагрузкой, здесь приходится выбирать что более приоритетно — удобство или производительность? Конечно, работа с БД посредством грамотно написанного SQL-кода будет намного эффективнее, но не стоит забывать и о таком параметре, как время — то, что с легкостью пишется с использованием ORM за неделю, можно реализовывать ни один месяц собственными усилиями. Кроме того, большинство современных ORM позволяют программисту при необходимости самому задавать код SQL-запросов. Без сомнений, для небольших проектов использование ORM будет куда более оправдано, чем разработка собственных библиотек для работы с БД.

Слайд 6

Hibernate

Hibernate регулирует SQL-запросы. Например, при вызове метода save происходит:
сбор данных из полей

Hibernate Hibernate регулирует SQL-запросы. Например, при вызове метода save происходит: сбор данных
объекта;
формирование INSERT выражения для добавления новой строки в таблицу.
При вызове метода get происходит:
формирование SELECT выражения для получения необходимых данных;
создание объекта Java класса и присвоение его полям значений, полученных из базы.

Слайд 7

Hibernate

Использование Hibernate позволяет сократить количество кода (в сравнении, например, с JDBC). На

Hibernate Использование Hibernate позволяет сократить количество кода (в сравнении, например, с JDBC).
самом деле Hibernate сам использует JDBC, являясь таким образом посредником.

Java Application

Hibernate

DB

JDBC

Слайд 8

Подключение Hibernate

Прежде всего необходимо подключить Hibernate к проекту.
Для этого необходимо нажать на

Подключение Hibernate Прежде всего необходимо подключить Hibernate к проекту. Для этого необходимо
папку проекта правой кнопкой мыши и выбрать Add Framework Support.

Слайд 9

Подключение Hibernate

В списке необходимо выбрать Hibernate и поставить галочку напротив Create default

Подключение Hibernate В списке необходимо выбрать Hibernate и поставить галочку напротив Create
hibernate configuration and main class.

Слайд 10

Подключение Hibernate

В папке lib должен появиться jar-файл Hibernate

Подключение Hibernate В папке lib должен появиться jar-файл Hibernate

Слайд 11

Подключение Hibernate

Также будет создан фал конфигурации Hibernate

Подключение Hibernate Также будет создан фал конфигурации Hibernate

Слайд 12

Подключение Hibernate

Также необходимо подключить MySQL JDBC Driver. Его можно скачать на сайте

Подключение Hibernate Также необходимо подключить MySQL JDBC Driver. Его можно скачать на сайте https://dev.mysql.com/downloads/connector/j/
https://dev.mysql.com/downloads/connector/j/

Слайд 13

Подключение Hibernate

Теперь необходимо добавить его в проект.

Подключение Hibernate Теперь необходимо добавить его в проект.

Слайд 14

Подключение Hibernate

После этого необходимо добавить конфигурацию в файл hibernate.cfg.xml

Подключение Hibernate После этого необходимо добавить конфигурацию в файл hibernate.cfg.xml

Слайд 15

Создание связи между классом и таблицей

Конфигурировать связь между классом и таблицей можно

Создание связи между классом и таблицей Конфигурировать связь между классом и таблицей
двумя способами:
С помощью XML-файла (старый способ)
С помощью Java-аннотаций

Слайд 16

Создание связи между классом и таблицей

Hibernate использует концепцию Entity класс.
Entity класс –

Создание связи между классом и таблицей Hibernate использует концепцию Entity класс. Entity
это Java класс, который отображает информацию определенной таблицы в БД.
Другое определение:
Entity класс – это POJO класс, в котором мы используем определенные Hibernate аннотации для связи класса с таблицей в БД.
POJO (англ. Plain Old Java Object) — «старый добрый Java-объект», простой Java-объект, не унаследованный от какого-то специфического объекта и не реализующий никаких служебных интерфейсов сверх тех, которые нужны для бизнес-модели.

Слайд 17

Создание связи между классом и таблицей

Создадим класс Employee

Создание связи между классом и таблицей Создадим класс Employee

Слайд 18

Создание связи между классом и таблицей

Аннотация @Entity говорит о том, что данный

Создание связи между классом и таблицей Аннотация @Entity говорит о том, что
класс будет иметь отображение в БД.
Аннотация @Table говорит о том, к какой именно таблице мы привязываем класс.
Аннотация @Column говорит о том, к какому именно столбцу из таблицы мы привязываем поле класса.
Аннотация @Id говорит о том, что столбец связанный с данным полем является первичным ключом.

Слайд 19

Создание связи между классом и таблицей

JPA (Java Persistence API) – это стандартная

Создание связи между классом и таблицей JPA (Java Persistence API) – это
спецификация, которая описывает систему для управления сохранением Java объектов в таблицы БД.
Hibernate – самая популярная реализация спецификации JPA.

Слайд 20

Сохранение Java объектов в БД

Создадим класс Test1 и создадим в нем SessionFactory

Сохранение Java объектов в БД Создадим класс Test1 и создадим в нем SessionFactory

Слайд 21

Сохранение Java объектов в БД

SessionFactory – это фабрика по производству сессий.
SessionFactory читает

Сохранение Java объектов в БД SessionFactory – это фабрика по производству сессий.
hibernate.cfg.xml после чего SessionFactory узнает как должны создаваться сессии.
В Java приложении достаточно создать SessionFactory один раз, а потом можно его переиспользовать.

Слайд 22

Сохранение Java объектов в БД

Теперь необходимо создать сессию

Сохранение Java объектов в БД Теперь необходимо создать сессию

Слайд 23

Сохранение Java объектов в БД

Session – это обертка вокруг подключения к базе

Сохранение Java объектов в БД Session – это обертка вокруг подключения к
с помощью JDBC.
Она может быть получена с помощью SessionFactory.
Session – это основа для работы с БД. Именно с ее помощью будут выполняться операции добавления, удаления и т.д.
Жизненный цикл сессии, как правило, не велик. Мы получаем сессию, делаем что-то с ее помощью, после чего сессия становится ненужной.

Слайд 24

Сохранение Java объектов в БД

Сохраним сотрудника в базу. Стоит помнить, что при

Сохранение Java объектов в БД Сохраним сотрудника в базу. Стоит помнить, что
работе могут быть выброшены исключения, а фабрику нужно закрыть в любом случае. Поместим закрытие фабрики в блок finally.

Слайд 25

Сохранение Java объектов в БД

После запуска видим:

Сохранение Java объектов в БД После запуска видим:

Слайд 26

Сохранение Java объектов в БД

Структура таблицы:

Сохранение Java объектов в БД Структура таблицы:

Слайд 27

Генерация значений для столбца Primary Key

Столбец Primary Key содержит уникальное значение и

Генерация значений для столбца Primary Key Столбец Primary Key содержит уникальное значение
не может быть null.
Аннотация @GeneratedValue описывает стратегию генерации значений для столбца Primary Key.

Слайд 28

Генерация значений для столбца Primary Key

GenerationType.IDENTITY полагается на автоматичекое увеличение столбца по

Генерация значений для столбца Primary Key GenerationType.IDENTITY полагается на автоматичекое увеличение столбца
правилам, прописанным в БД. Хороший вариант с точки зрения производительности.

Слайд 29

Генерация значений для столбца Primary Key

GenerationType.SEQUENCE полагается на работу sequence, созданного в

Генерация значений для столбца Primary Key GenerationType.SEQUENCE полагается на работу sequence, созданного
БД. Тоже очень эффективная с точки зрения производительности стратегия. В MySQL sequence не поддерживается, но если вы работаете с Oracle, то можете использовать этот способ.
GenerationType.TABLE полагается на значение столбца таблицы БД. Цель такой таблицы – поддержка уникальности значений (при получении значение меняется, например, увеличивается на 1). Устаревший способ, не эффективен по производительности.
GenerationType.AUTO дефолтный тип. Выбор стратегии будет зависеть от типа базы, с которой мы работаем.

Слайд 30

Получение Java объектов из БД

Прежде всего стоит отметить, что мы можем получить

Получение Java объектов из БД Прежде всего стоит отметить, что мы можем
id сохраненного объекта непосредственно после его сохранения.

Слайд 31

Получение Java объектов из БД

Создадим класс Test2
Вывод:

Получение Java объектов из БД Создадим класс Test2 Вывод:

Слайд 32

Получение Java объектов из БД

Рассмотрим ситуацию, когда работника с таким id нет
Вывод:

Получение Java объектов из БД Рассмотрим ситуацию, когда работника с таким id нет Вывод:

Слайд 33

Получение Java объектов из БД

Можно выполнить несколько действий в рамках одной сессии

Получение Java объектов из БД Можно выполнить несколько действий в рамках одной сессии

Слайд 34

Получение Java объектов из БД

Рассмотрим получение не по id. Для этого используется

Получение Java объектов из БД Рассмотрим получение не по id. Для этого
HQL.
HQL (Hibernate Query Language) очень похож на SQL.

Слайд 35

Получение Java объектов из БД

В запрос можно добавить условие
And:

Получение Java объектов из БД В запрос можно добавить условие And:

Слайд 36

Изменение Java объектов в БД

Для изменения поля в записи базы данных мы

Изменение Java объектов в БД Для изменения поля в записи базы данных мы можем использовать setter
можем использовать setter

Слайд 37

Изменение Java объектов в БД

Обновление нескольких записей

Изменение Java объектов в БД Обновление нескольких записей

Слайд 38

Удаление Java объектов из БД

Удаление работника найденного по id. Если работник не

Удаление Java объектов из БД Удаление работника найденного по id. Если работник не найден будет ошибка.
найден будет ошибка.