Presentation is loading. Please wait.

Presentation is loading. Please wait.

Современные технологии баз данных Лекция 7. Объектно-реляционное отображение (ORM) Технология отображения объектов какого- либо объектно-ориентированного.

Similar presentations


Presentation on theme: "Современные технологии баз данных Лекция 7. Объектно-реляционное отображение (ORM) Технология отображения объектов какого- либо объектно-ориентированного."— Presentation transcript:

1 Современные технологии баз данных Лекция 7

2 Объектно-реляционное отображение (ORM) Технология отображения объектов какого- либо объектно-ориентированного языка на структуры реляционных баз данных. Поля Отношения

3 Традиционный подход Получение коллекции объектов: 1.Формирование select запроса 2.Выполнение запроса 3.В цикле по курсору заполнение полей объектов Недостатки: – Смешивание логики получения информации из б.д. и логики обработки полученной информации. – У строки SQL-запроса отсуствует семантика. – Проблема рассогласования схемы данных б.д. и структуры классов приложения.

4 Объектно-реляционное отображение (ORM) Основные аспекты: Сохранение Загрузка объектов Выборка объектов

5 ORM. Библиотеки Java: EJB, Hibernate.Net: NHibernate, LINQ Python: SQLAlchemy

6 Hibernate. Пример Схема данных Схема данных

7 Hibernate. Класс автобус package logic; import java.util.Set; import java.util.HashSet; public class Bus { private Long id; private String number; private Set drivers = new HashSet(); private Long route_id; public Bus() { } public void setId(Long id) { this.id = id; } public void setNumber(String number) { this.number = number; } public void setDrivers(Set drivers) { this.drivers = drivers; } public void setRoute_id(Long route_id) { this.route_id = route_id; } public Long getId() { return id; } public String getNumber() { return number; } public Set getDrivers() { return drivers; } public Long getRoute_id() { return route_id; } }

8 Hibernate. Класс водитель package logic; import java.util.Set; import java.util.HashSet; public class Driver { private Long id; private String name; private String surname; private int age; private Set busses = new HashSet(); public Driver() { } public void setBusses(Set busses) { this.busses = busses; } public Set getBusses() { return busses; } public void setId(Long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setSurname(String surname) { this.surname = surname; } public void setAge(int age) { this.age = age; } public Long getId() { return id; } public String getName() { return name; } public String getSurname() { return surname; } public int getAge() { return age; } }

9 Hibernate. Класс маршрут package logic; import java.util.Set; import java.util.HashSet; public class Route { private Long id; private String name; private int number; private Set busses = new HashSet(); public Route(){ } public void setId(Long id) { this.id = id; } public void setName(String name) { this.name = name; } public void setNumber(int number) { this.number = number; } public void setBusses(Set busses) { this.busses = busses; } public Long getId() { return id; } public String getName() { return name; } public int getNumber() { return number; } public Set getBusses() { return busses; } }

10 Hibernate. На классы отображаются таблицы-сущности. Таблицы отношения отображаются на атрибуты коллекции соответствующих классов.

11 Hibernate. Настройка отображения.

12 Hibernate. Настройка отображения

13 Hibernate. Настройка отображения

14 Hibernate. Настройка отображения jdbc:mysql://localhost/autopark com.mysql.jdbc.Driver root 1 thread true org.hibernate.dialect.MySQL5Dialect

15 Hibernate. Интерфейс методов модификации package DAO; import logic.Bus; import logic.Driver; import logic.Route; import java.util.Collection; import java.sql.SQLException; public interface BusDAO { public void addBus(Bus bus) throws SQLException; public void updateBus(Long bus_id, Bus bus) throws SQLException; public Bus getBusById(Long bus_id) throws SQLException; public Collection getAllBusses() throws SQLException; public void deleteBus(Bus bus) throws SQLException; public Collection getBussesByDriver(Driver driver) throws SQLException; public Collection getBussesByRoute(Route route) throws SQLException; }

16 Hibernate. Реализация модификации данных public class BusDAOImpl implements BusDAO { public void addBus(Bus bus) throws SQLException { Session session = null; try { session = HibernateUtil.getSessionFactory().openSession (); session.beginTransaction(); session.save(bus); session.getTransaction().commit(); } catch (Exception e) { …… } finally { if (session != null && session.isOpen()) { session.close(); } } } public void updateBus(Long bus_id, Bus bus) throws SQLException { Session session = null; try { session = HibernateUtil.getSessionFactory().ope nSession(); session.beginTransaction(); session.update(bus); session.getTransaction().commit(); } catch (Exception e) { …. } finally { if (session != null && session.isOpen()) { session.close(); } } }

17 Hibernate. Реализация модификации данных public Collection getAllBusses() throws SQLException { Session session = null; List busses = new ArrayList (); try { session = HibernateUtil.getSessionFactory().open Session(); busses = session.createCriteria(Bus.class).list(); } catch (Exception e) { …. } finally { if (session != null && session.isOpen()) { session.close(); } } return busses; } public void deleteBus(Bus bus) throws SQLException { Session session = null; try { session = HibernateUtil.getSessionFactory().open Session(); session.beginTransaction(); session.delete(bus); session.getTransaction().commit(); } catch (Exception e) { …. } finally { if (session != null && session.isOpen()) { session.close(); } } }

18 Hibernate. Реализация модификации данных public Collection getBussesByDriver(Driver driver) throws SQLException { Session session = null; List busses = new ArrayList (); try { session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Long driver_id = driver.getId(); Query query = session.createQuery( " select b " + " from Bus b INNER JOIN b.drivers driver" + " where driver.id = :driverId " ).setLong(«driverId», driver_id); busses = (List ) query.list(); session.getTransaction().commit(); } finally { if (session != null && session.isOpen()) { session.close(); } } return busses; } public Collection getBussesByRoute(Route route){ Session session = null; List busses = new ArrayList (); try { session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Long route_id = route.getId(); Query query = session.createQuery(«from Bus where route_id = :routeId „).setLong(“routeId», route_id); busses = (List ) query.list(); session.getTransaction().commit(); } finally { if (session != null && session.isOpen()) { session.close(); } } return busses; } }

19 Hibernate. Наследование Реализация отображения наследуемых классов на таблицы

20 Hibernate. Наследование <class name="eg.hibernate.mapping.dataobject.Person" table="TB_PERSON" polymorphism="implicit">

21 Hibernate. Наследование. Запрос HQL

22 Hibernate. Использование хранимых процедур

23 LINQ Language Integrated Query LINQ к SQL LINQ к объектам LINQ к XML

24 LINQ. Выборка данных

25 LINQ

26 LINQ. Определние классов Класс Customer Свойтво Customer для класса Order

27 LINQ. Модификация данных Изменение Удаление

28 LINQ. Сравнение запросов на выборку с SQL SQL LINQ к SQL

29 LINQ. Конструирование запроса

30 LINQ к объектам Подсчет числа строк


Download ppt "Современные технологии баз данных Лекция 7. Объектно-реляционное отображение (ORM) Технология отображения объектов какого- либо объектно-ориентированного."

Similar presentations


Ads by Google