Java. Object-oriented mapping. Работаем с чистым Hibernate без прямого использования JDBC.

max аватар
124
Находится в разделах:

Этот пост - продолжение предыдущего. Из него используются таблицы в базе.

 

Если hibernate еще не скачан - делаем это. http://www.hibernate.org/

Настраиваем eclipse, добавляя следующие либы

 

Создаем определения проецирования.

Сперва, попросим Hibernate получить и отправить объект book для нас. Для простоты, проигнорируем таблицы publisher и chapter. Создадим xml файл "Book.hbm.xml". Этот файл ни что иное, как определение проецирования для класса Book. Объекты book именуются "Persistent objects" или "Entites", потому что они могут быть сохранены в базе данных и могут представлять реальные сущности.

Любой хранимый объект должен иметь идентификатор. Он будет использован Hibernate для идентификации того, что объект уникальный. Мы выберем ISBN в роли идентификатора объекта Book.

 

Настройка Hibernate

Сперва необходимо установить настройки приложения. Например, какой тип объектов сохраняется? Какой тип баз данных используется? Как коннектиться к базе?

Перед тем, как использовать Hibernate  для получения и сохранения объектов, сперва необходимо использовать следующий фрагмент кода для построения "session factory". Фабрика сессий - глобальный объект для обслуживания сессий в Hibernate. Сессия - это как подключение к базе для работы с хранимыми объектами.

Вместо использования addResource() для добавления файлов проецирования, можно использовать также addClass() для добавления классов.

Если в приложении содержатся сотни определений проецирования, можно запаковать их в jar файл и добавить в конфигурацию Hibernate. 

 

Конфигурация через XML

Другой вариант настройки Hibernate - использование XML файлов. Мы создаем файл hibernate.cfg.xml в корне проекта.

В таком случае фрагмент кода для построения фабрики сессии может быть упрощен. 

 

Получение и сохранение объектов

Открытие и закрытие сессий.

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

 

Получение объектов

Задав идентификатор (в нашем случае ISBN), можно получить книгу из базы данных. Есть два варианта как это сделать:

или

info picture

Разница между load() и get() заключается в том, что в случае, когда ID не может быть найден, load() выкинет исключение "org.hibernate.ObjectNotFoundException", в то время, как get() просто возвратит null. 

Второе различие состоит в том, что load() возвращает лишь прокси и база данных не будет затронута пока прокси не выполнится. get() затрагивает базу тут же.

Язык. используемый в Hibernate называется Hibernate Query Language (HQL). 

Например, следующий код запрашивает объекты book:

Если Вы уверены, что будет лишь одно совпадение объекта, можно использовать uniqueResult() для получения результата:

 

Транзакции.

Если у вас не одна команда, а набор, в таком случае лучше использовать транзакции. Если что-то пойдет не так во время обновления базы, транзакция откатиться назад и все изменения будут отменены.

Если Вы не хотите определять транзакции в приложении, вы можете установить значение autocommit в true (который по умолчанию false) в XML файле настроек. 

В таком случае, любой апдейт будет вкомичен тут же.

info picture Единственное, что нужно помнить про автокоммиты - это то, что их необходимо сливать перед закрытием сессии. Проблема в том, что Hibernate не записывает изменения в базу сразу же. Вместо этого он выжидает набора команд для повышения производительности.

 

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

Для сохранения новосозданных объектов, можно использовать метод save(). 

Для обновления существующих объектов можно использовать метод update(). 

Для удаления существующего объекта, можно использовать метод delete(). 


Конец
Альберт Эйнштейн хочет заметить, что тот, кто хочет видеть результаты своего труда немедленно, должен идти в сапожники.

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке