Object Relational Mapping (ORM)Объектно-реляционное отображение

Содержание

Слайд 2

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

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

Слайд 3

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

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

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

CATALOG_ITEM отображается на иерархию

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

Слайд 4

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

Класс Catalog связан с таблицей 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 SEQ_ID.nextval from dual
Hibernate: select

Протокол команд SQL Oracle Hibernate: select SEQ_ID.nextval from dual Hibernate: select SEQ_ID.nextval
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)
Обеспечение пессимистической/оптимистической блокировок
Кэширование загруженных объектов
SQL-подобные

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

Слайд 8

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

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

Преимущества ORM Нет необходимости писать рутинные insert/update/delete/select для CRUD операций Условия связи
(строками таблиц) указываются декларативно в одном месте.
Возможность использовать полиморфные запросы для иерархий классов
Высокая степень независимости от конкретной СУБД

Слайд 9

Недостатки ORM

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

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

Слайд 10

Реализации ORM

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

Реализации ORM Hibernate/NHibernate www.hibernate.org (Java / .NET 1.1,2.0) Oracle® TopLink® (Java) iBatis
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
OpenAccess JDO
EJB 3.0 Persistence API
Hibernate
Oracle

Стандарты ORM EJB 1.1 Entity Beans Java Data Object (JDO) JPOX OpenAccess
TopLink
Имя файла: Object-Relational-Mapping-(ORM)Объектно-реляционное-отображение.pptx
Количество просмотров: 158
Количество скачиваний: 0