Содержание

Слайд 2

Взаимодействие между типами баз данных и подходами доступа к данным

Взаимодействие между типами баз данных и подходами доступа к данным

Слайд 3

Примеры реляционной и объектной модели Реляционная модель Объектная модель предметной области

Примеры реляционной и объектной модели

Реляционная модель

Объектная модель предметной области

CATALOG_ITEM отображается на

иерархию классов в зависимости от значения дискриминатора ITEM_TYPE
Слайд 4

Отображение таблицы CATALOG и класса Catalog.java Класс Catalog связан с таблицей

Отображение таблицы CATALOG и класса Catalog.java

Класс Catalog связан с таблицей

CATALOG
Первичный ключ – ID, связан со свойством id (функции getId()/setId())
Для генерации значений первичного ключа ID используется sequence SEQ_ID
Атрибут NAME связан со свойством name (функции getName()/setName())
Объекты Catalog содержат список CatalogItem
связь “один-ко-многим” (@OneToMany),
обязательная (nullable=false)
Внешний ключ, определяющий связь – CATALOG_ID
Список CatalogItem загружаются по-требованию (FetchType.LAZY)
При сохранении объекта Catalog автоматически сохраняются все его items (CascadeType.ALL)
Слайд 5

Работа с Hibernate API Работая с данными в объектно-ориентированном языке, мы

Работа с Hibernate API

Работая с данными в объектно-ориентированном языке, мы

работаем с объектами, заполняя и считывая значения полей, создавая новые или изменяя существующие объекты, определяя зависимости между объектами
При операции save() мы передаем объект типа Catalog, который сохраняется в базу данных по описанным правилам отображения. В том числе сохраняются и все зависимые объекты (CatalogItem)
Составляя запросы к базе данных, мы уже указываем не столбцы таблицы, а свойства объектов
Слайд 6

Протокол команд SQL Oracle Hibernate: select SEQ_ID.nextval from dual Hibernate: select

Протокол команд SQL

Oracle
Hibernate: select SEQ_ID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate:

select SEQ_ID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: select SEQ_ID.nextval from dual
Hibernate: insert into CATALOG (NAME, ID) values (?, ?)
Hibernate: insert into AUTHOR (NAME, BIRTHDATE, id) values (?, ?, ?)
Hibernate: insert into CATALOG_ITEM (NAME, AUTHOR_ID, CATALOG_ID, ISBN, ITEM_TYPE, id) values (?, ?, ?, ?, 'BOOK', ?)
Hibernate: insert into AUTHOR (NAME, BIRTHDATE, id) values (?, ?, ?)
Hibernate: insert into CATALOG_ITEM (NAME, AUTHOR_ID, CATALOG_ID, GENRE, ITEM_TYPE, id) values (?, ?, ?, ?, 'MOVIE', ?)
Hibernate: update CATALOG_ITEM set CATALOG_ID=? where id=?
Hibernate: update CATALOG_ITEM set CATALOG_ID=? where id=?
Hibernate: select catalog0_.ID as ID0_, catalog0_.NAME as NAME0_ from CATALOG catalog0_
SQL Server
Hibernate: insert into CATALOG (NAME) values (?)
Hibernate: insert into AUTHOR (NAME, BIRTHDATE) values (?, ?)
Hibernate: insert into CATALOG_ITEM (NAME, AUTHOR_ID, CATALOG_ID, ISBN, ITEM_TYPE) values (?, ?, ?, ?, 'BOOK')
Hibernate: insert into AUTHOR (NAME, BIRTHDATE) values (?, ?)
Hibernate: insert into CATALOG_ITEM (NAME, AUTHOR_ID, CATALOG_ID, GENRE, ITEM_TYPE) values (?, ?, ?, ?, 'MOVIE')
Hibernate: update CATALOG_ITEM set CATALOG_ID=? where id=?
Hibernate: update CATALOG_ITEM set CATALOG_ID=? where id=?
Hibernate: select catalog0_.ID as ID0_, catalog0_.NAME as NAME0_ from CATALOG catalog0_
Слайд 7

Возможности ORM Загрузка связанных объектов “по требованию” (lazy loading) Обеспечение пессимистической/оптимистической

Возможности ORM

Загрузка связанных объектов “по требованию” (lazy loading)
Обеспечение пессимистической/оптимистической блокировок
Кэширование загруженных

объектов
SQL-подобные запросы по объектной модели
Слайд 8

Преимущества ORM Нет необходимости писать рутинные insert/update/delete/select для CRUD операций Условия

Преимущества ORM

Нет необходимости писать рутинные insert/update/delete/select для CRUD операций
Условия связи между

объектами (строками таблиц) указываются декларативно в одном месте.
Возможность использовать полиморфные запросы для иерархий классов
Высокая степень независимости от конкретной СУБД
Слайд 9

Недостатки ORM Возможны проблемы с производительностью для сложных запросов на объектном

Недостатки ORM

Возможны проблемы с производительностью для сложных запросов на объектном SQL.
Затрудняет

использование специфических конструкций языка SQL конкретной СУБД.
Слайд 10

Реализации ORM Hibernate/NHibernate www.hibernate.org (Java / .NET 1.1,2.0) Oracle® TopLink® (Java)

Реализации ORM

Hibernate/NHibernate www.hibernate.org (Java / .NET 1.1,2.0)
Oracle® TopLink® (Java)
iBatis framework (Java,

.NET) http://ibatis.apache.org/
JPOX Java Data Objects (Java) http://www.jpox.org

Слайд 11

Стандарты ORM EJB 1.1 Entity Beans Java Data Object (JDO) JPOX

Стандарты ORM

EJB 1.1 Entity Beans
Java Data Object (JDO)
JPOX
OpenAccess JDO
EJB 3.0 Persistence

API
Hibernate
Oracle TopLink