Hibernate cashe. Part 4 Для студентов старших курсов университетов Ст.преподаватель Дудник О.А.

Презентация:



Advertisements
Похожие презентации
Использование Hibernate Java Persistence. Part 2. Для студентов старших курсов университетов Ст.преподаватель Дудник О.А.
Advertisements

NHibernate что, где, когда Артур Дробинский ЗетаСофт Томск, 2012.
Проф. В.К.Толстых, Технологии разработки Internet- приложений Delphi for.NET примеры: работа с файлами Из цикла лекций «Технологии разработки.
Версия сборки Номер версии сборки имеет формат major.minor.build.revision. Например, Значения major(старший), minor(младший), build (компоновка)
Object Relational Mapping (ORM) Объектно-реляционное отображение.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
1 Методы Java Методы класса – это подпрограммы, присоединенные к конкретным определениям классов. Они описываются внутри определения класса на том же уровне,
Работа с БД в Zend Лекция 4 1.Модель 2.Классы Zend_Db_Table и Zend_Config 3.Запросы 4.Свойства и методы таблицы.
Кафедра ОСУ, Java 2004 Слайд 1 Наследование Наследование позволяет использовать существующий класс для определения новых классов, т.е. способствует.
1 Введение Информационные системы Альтернативы задачи доступа к данным Стандарт JPA и коммерческие ORM имплементации Определение ORM Проблемы полного преобразования.
Object Relational Mapping (ORM) Объектно-реляционное отображение
ORM Паттерны. Repository Repository (хранилище) выступает в роли посредника между слоем домена и слоем отображения данных, предоставляя интерфейс в виде.
Рассматриваемые темы Технология EJB Типы EJB Вызов EJB Сборка и развертывание EJB- приложения 2-1.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
Язык Java. JSP.. Java. Синтаксис. Перевод строчки эквивалентен пробелу Регистр в именах различается // Комментарии до конца строки /* Многострочные комментарии.
Запросы 1 Обзор Решение задач поиска информации Обзор возможностей Java Persistence QL Определение запроса Динамический запросы Named запросы Параметры.
Технология ORM и её реализации. Что такое ORM? ORM (Object-relational mapping) технология программирования, которая связывает базы данных с концепциями.
ПЛИСКО ВЯЧЕСЛАВ. Удобная работа с базой данных в PHP.
Высокоуровневые методы информатики и программирования Лекция 29 Типизированные классы Dataset.
Программная инженерия Дмитриев Андрей Владиславович
Транксрипт:

Hibernate cashe. Part 4 Для студентов старших курсов университетов Ст.преподаватель Дудник О.А.

Hibernate cache Довольно часто в java приложениях с целью снижения нагрузки на БД используют кеш. Прежде всего Hibernate cache это 3 уровня кэширования: Кеш первого уровня (First-level cache); Кеш второго уровня (Second-level cache); Кеш запросов (Query cache);

Кеш первого уровня Кеш первого уровня всегда привязан к объекту сессии. Hibernate всегда по умолчанию использует этот кеш и его нельзя отключить. Давайте сразу рассмотрим следующий код: SharedDoc persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId); System.out.println(persistedDoc.getName()); user1.setDoc(persistedDoc); persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId); System.out.println(persistedDoc.getName()); user2.setDoc(persistedDoc);

Кеш первого уровня В этом примере будет выполнен 1 запрос в базу, несмотря на то, что делается 2 вызова load(), так как эти вызовы происходят в контексте одной сессии. Во время второй попытки загрузить план с тем же идентификатором будет использован кеш сессии. При использовании методов save(), update(), saveOrUpdate(), load(), get(), list(), iterate(), scroll() всегда будет задействован кеш первого уровня.

Кеш второго уровня Кеш второго уровня Кеш второго уровня привязан к объекту- фабрике сессий (Session Factory object). Session session = factory.openSession(); SharedDoc doc = (SharedDoc) session.load(SharedDoc.class, 1L); System.out.println(doc.getName()); session.close(); session = factory.openSession(); doc = (SharedDoc) session.load(SharedDoc.class, 1L); System.out.println(doc.getName()); session.close();

Кеш второго уровня Кеш второго уровня В данном примере будет выполнено 2 запроса в базу, это связано с тем, что по умолчанию кеш второго уровня отключен. Для включения необходимо добавить следующие строки в Вашем конфигурационном файле JPA (persistence.xml):

Кеш второго уровня Кеш второго уровня //или в более старых версиях //

Кеш второго уровня Ну и в завершение еще нужно указать самому хибернейту, что именно кэшировать. К счастью, это очень легко можно сделать с помощью аннотаций, = = CacheConcurrencyStrategy.READ_WRITE) public class SharedDoc{ private Set users; }

Кеш третьего уровня Query query = session.createQuery("from SharedDoc doc where doc.name = :name"); SharedDoc persistedDoc = (SharedDoc) query.setParameter("name", "first").uniqueResult(); System.out.println(persistedDoc.getName()); user1.setDoc(persistedDoc); persistedDoc = (SharedDoc) query.setParameter("name", "first").uniqueResult(); System.out.println(persistedDoc.getName()); user2.setDoc(persistedDoc);

Кеш третьего уровня Результаты такого рода запросов не сохраняются ни кешем первого, ни второго уровня. Это как раз то место, где можно использовать кеш запросов. Он тоже по умолчанию отключен. Для включения нужно добавить следующую строку в конфигурационный файл: А также добавить query.setCacheable(true);