'

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

Понравилась презентация – покажи это...





Слайд 0

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


Слайд 1

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


Слайд 2

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


Слайд 3

Отображение таблицы 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)


Слайд 4

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


Слайд 5

Протокол команд 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_


Слайд 6

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


Слайд 7

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


Слайд 8

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


Слайд 9

Реализации 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 …


Слайд 10

Стандарты ORM EJB 1.1 Entity Beans Java Data Object (JDO) JPOX OpenAccess JDO EJB 3.0 Persistence API Hibernate Oracle TopLink


Слайд 11

Литература и ссылки Мартин Фаулер “Архитектура корпоративных программных приложений”. М., “Вильямс”, 2004 http://en.wikipedia.org/wiki/Object-relational_mapping http://www.hibernate.org/hib_docs/reference/ru/html_single/


×

HTML:





Ссылка: