Evgeniy Krivosheev Vyacheslav Yakovenko Last update: Feb, 2012 Spring Framework Module 6 – Поддержка ORM
2 Содержание ORM Преимущества в работе с ORM с использованием Spring Обзор ORM модуля Универсальный DAO Библиотеки ORM JPA Инициализация JPA
3 Spring :: ORM ORM - Object-relational mapping связывает базы данных с концепциями объектно-ориентированных языков программирования
4 Spring :: ORM ORM - Object-relational mapping связывает базы данных с концепциями объектно-ориентированных языков программирования
5 Spring :: ORM ORM - Object-relational mapping
6 Spring :: Преимущества в работе с ORM Тестирование ; Обработка исключений ; Управление ресурсами (DataSource, mappings) ; Управление транзакциями ;
7 Spring :: ORM :: Пример BOOK ID: integer TITLE : varchar COMMENT : varchar DATE_RELEASE : timestamp AUTHOR_ID: integer
8 Spring :: ORM :: Пример Имплементация с помощью Spring JDBC
9 Spring :: ORM :: Пример BOOK ID: integer TITLE : varchar DATE_RELEASE : timestamp
10 Spring :: ORM :: Пример
11 Spring :: ORM :: - для DAO beans оборачивает checked исключения в иерархию DataAccessException <bean class="org.springframework.dao.annotation. – для – для контроллеров Стереотип – аннотация-маркер, сообщающий, для чего предназначен бин, в общей архитектуре приложения. Предназначена для использования в AOP и в различных инструментах.
12 Spring :: ORM :: Пример
13 Spring :: ORM :: Универсальный DAO
14 Spring :: ORM :: Универсальный DAO
15 Spring :: ORM :: JPA Java Persistence API (JPA) API, входящий с версии Java 5 в состав платформ Java SE и Java EE Поддержка сохранности данных, предоставляемая JPA, покрывает области: непосредственно API, заданный в пакете javax.persistence; платформо-независимый объектно-ориентированный язык запросов Java Persistence Query Language; метаинформация, описывающая связи между объектами. генерация DDL для сущностей
16 Spring :: ORM :: JPA
17 Spring :: ORM :: JPA
18 Spring :: ORM :: JPA
19 Spring :: Библиотеки ORM org.springframework.orm org.springframework.orm.hibernate3 org.springframework.orm.hibernate4 org.springframework.orm.ibatis org.springframework.orm.jdo org.springframework.orm.jpa JPA
20 Spring :: Инициализация JPA В данный момент Spring поддерживает три варианта инициализации JPA EntityManagerFactory: Получение EntityManagerFactory из JNDI; Используя LocalEntityManagerFactoryBean: Создает EntityManager, управляемый приложением Используется в небольших приложениях, прототипах и с целью организовать тестирование Нет поддержки глобальных транзакций, невозможно использовать уже существующий JDBC DataSource Используя LocalContainerEntityManagerFactoryBean: Создает EntityManager, управляемый контейнером; Более гибкая конфигурация, глобальные транзакции Конфигурируется под различные серверы приложений (WebLogic, OC4J, GlassFish, Tomcat, Resin, JBoss)
21 Spring :: Инициализация JPA Получение EntityManagerFactory из JNDI:
22 Spring :: Инициализация JPA Используя LocalEntityManagerFactoryBean: -Не поддерживает глобальных транзакций -Небольшое число конфигурационных настроек -Не может ссылаться на существующий JDBC DataSource bean
23 Spring :: Инициализация JPA LocalContainerEntityManagerFactoryBean – фабрика, предоставляющая максимум возможностей: По поведению схож с EntityManagerFactory, который можно получить от сервера приложений через JNDI. -Позволяет конфигурировать dataSource
24 Entity-классы должны были перечислены в META-INF/persistence.xml: Spring :: Инициализация JPA
25 Spring :: Инициализация JPA Однако в Spring 3.1+ можно обойтись без перечисления entity- классов, включив автосканирование всех классов пакета packagesToScan:
26 Пример с инъекцией фабрики EntityManagerFactory: Spring :: Инициализация JPA
27 Spring :: Инициализация JPA Application Managed Entity Manager EntityManager, полученный Используется в JSE приложениях для Java Persistence API (JPA) -не потокобезопасны -создаются каждый раз -должны закрываться после использования -управлять транзакциями надо вручную Container Managed Entity Manager EntityManager, полученный -thread-safe -transactional proxy -Ведет себя, как EntityManager, полученный через JNDI
28 Spring :: Инициализация JPA Пример с инъекцией EntityManager (Container Managed Entity Manager):
29 Упражнения : 7 : «Использование ORM в Spring при работе с данными» – 45 мин – самостоятельная работа; – 15 мин – обсуждение;
30 Вопросы!?