ОСНОВЫ HIBERNATE


1. Базовые принципы: создание классов, связывание с БД, отправка и обработка запросов, mapping связей
2. Профессиональные принципы: оптимизация, разработка слоя DAO, ленивая загрузка, кеширование и пр.
3. Готовая БД: таблицы в PostgreSQL и проект "Планировщик дел" из этого курса - сразу начнете использовать для Hibernate

Что такое Hibernate

Hibernate - один из самых популярных Java - фреймворков. На протяжении многих лет его используют как новички, так и профи.

Используется практически в любом среднем или крупном Java приложении, часто требуется при приеме на работу.

Главная его цель - создание объектного слоя между вашим кодом и БД. Вы сможете работать с таблицами как с объектами.


Нужен ли Hibernate новичку?

Если коротко - да. Сейчас уже другое время, нежели год-два назад. Новичкам очень сложно.

Чтобы создавать проекты на любом языке и фреймворке – нужно иметь фундамент профессионального программиста.

В этот фундамент входит и Hibernate (помимо других технологий). Вы должны уметь работать с Hibernate хотя бы на элементарном уровне.


Как правильно подойти
к изучению Hibernate?

Самый правильный вариант - изучать отдельно от всего.
Но сначала - получить фундамент разработки на Java и БД.

Сначала нужно получить фундамент разработки любого Java проекта

ООП - уже должны знать

Понимание основных принципов разработки приложения на Java, ООП, абстракция-реализация, созданий JavaSE приложений.

Подробно проходили в курсе: Профессиональный код на Java с полного нуля

После фундаментам Java - научиться правильно работать с БД

Работа в СУБД (MySQL, PostgreSQL, любая другая) - уже должны знать

Создание и связывание таблиц, внешний и первичный ключи, элементарные действия - чтобы для вас не было сюрпризом, как создаются простые таблицы в СУБД.

Подробно проходили в курсе: Cоздание и работа с базами данных

Теперь уже можно изучать, т.к. есть нужный фундамент

Hibernate ORM

Создание консольных JavaSE приложений без привязки к сложным технологиям (Spring, веб) - чтобы не запутаться в самом начале пути.

Самое главное - не пытаться сразу сделать сложный проект или связать со множеством технологий - вы просто запутаетесь.

Многие новички
допускают большую ошибку

Одна из главных проблем новичков заключается в том, что они пытаются изучить Hibernate сразу вместе с другими технологиями (веб, spring и пр.) и в конечном итоге путаются что к чему.

Самый простой и правильный вариант - изучать его отдельно от всего. А потом уже совмещать с другими технологиями.

Даже, если вы НЕ знаете веб разработку или Spring - вы все равно можете научиться работать с Hibernate.

Этот курс позволит вам без знаний других фреймворков - научиться использовать Hibernate в своих проектах.

В интернете сейчас много платных и бесплатных курсов Hibernate


Но почему-то они учат только базовым вещам, которые можно изучить самому при желании.
Но самое сложное начинается дальше, когда после базовых действий - нужно научиться правильно строить проект, оптимизировать связи, настраивать запросы и многое другое. Этого часто нет в курсах.

Поэтому чтобы восполнить этот пробел - я создал новый курс для новичков, в котором постарался уместить как базовый необходимый фундамент, так и продвинутые темы: как правильно строить проект с учетом ООП, оптимизировать, проставлять методы-связи и многое другое.

Это уже профессиональный подход к Hibernate.

Чему вы научитесь в данном курсе



Фундамент
Вы получите фундаментальные знания по Hibernate/JPA, которые затем можно будет применять в любом типе проектов (веб, десктоп). Без этих знаний идти дальше смысла нет, т.к. у вас не будет фундамента.

Профессиональные аспекты
Также изучите многие профессиональные темы, без которых будет сложно в крупных проектах - это построение проекта, оптимизация, работа с запросами, проверка данных и многое другое.

Пошаговые действия
Вы будете выполнять последовательно несложные шаги и получать результат, т.к. курс рассчитан как раз для новичков. Принцип - от простого к сложному.

Основные темы курса

Какие направления изучите

Базовая настройка Hibernate
Entity классы для работы с БД
Структура классов и интерфейсов
Логирование и настройка вывода
Запросы с помощью Criteria API
Запросы с помощью языка HQL
Запросы с помощью Native SQL
Связи объектов (внедрение ссылки)
Ленивая загрузка коллекций и объектов
Кеширование 1го и 2го уровней
Уровень доступа к данным (DAO)
Рефакторинг и оптимизация
Это обязательные шаги в любом Hibernate приложении.

Особенно упор идет на оптимизацию работы, связей, запросов - чтобы приложение работало быстро.

Также в дополнение - вы узнаете некоторые более продвинутые "фишки", которые профессионалы применяют в крупных проектах.

Естественно, мы не сможем пройти досконально каждый раздел Hibernate, потому что это невозможно.

Сам фреймворк просто огромный, но вы можете получить прочный фундамент, а после этого уже изучать детали по мере необходимости.

Подробнее: список уроков

Весь список уроков и тем можно
посмотреть в демо версии курса

  • Перед началом Подготовка среды окружения и проекта - чтобы начать работу с Hibernate, минимальные требования
  • Что такое JPA Чтобы не работать с БД напрямую с помощью JDBC – придумали более высокоуровневое решение JPA (Java Persistence API), где за вас пишутся все запросы, а вы только работаете с объектами.
  • Что такое Hibernate Это RI (Reference Implementation – образцовая реализация) спецификации JPA. Обычно применяется в Jakarta EE (JavaEE) – корпоративные веб проекты.
  • Другие реализации Каждая реализация добавляет в стандартные возможности JPA еще и свои, новые функции. Поэтому так полезно иметь под рукой полную документацию – там описаны ВСЕ возможности.
  • Создание проекта Hibernate Сначала нужно подключить ядро Hibernate для нового проекта - для импорта зависимостей
  • Добавление БД Будете использовать готовую БД, которую разрабатывали в отдельном курсе (советую сначала пройти курс по БД, если у вас имеются пробелы в этих темах)
  • Описание БД Основной функционал – это хранение задач пользователя (todo) с категориями, приоритетами, ролями.
  • Открытие БД в IDEA В этом курсе вы не будете использовать UI (user interface, внешний вид), чтобы не отвлекаться на другие темы.
  • Файл настроек hibernate.cfg.xml Базовый разбор файла - далее будем усложнять и дорабатывать теги для настроек
  • Настройки БД для Hibernate В зависимости от БД – нужно подключить для нее JDBC драйвер (через gradle/maven).
  • Запуск проекта Hibernate Т.к. мы запускаем проект в JavaSE (обычное консольное приложение) – то код инициализации должны добавлять вручную.
  • Диалект запросов Чтобы Hibernate правильно формировал SQL запросы – нужно указывать dialect – это специальный класс из пакета Hibernate, который является прослойкой (адаптером) между Hibernate и SQL запросами.
  • Возможные API в Hibernate Доступно 2 варианта работы с Hibernate:  JPA API и Hibernate API - вы сами решаете какой использовать
  • Entity класс User Для того, чтобы JPA/Hibernate мог отправлять запросы в БД – нужно создать специальные классы, которые называют entity-классы.
  • Добавление Lombok Для упрощения работы с entity классами – будем использовать библиотеку Lombok - ускорение работы в несколько раз
  • Разбор entity класса Аннотации указывают Hibernate как именно обработать поле, соответствие со столбцом таблицы и т.д.
  • Добавление нового объекта User Все операции над изменением БД должны выполняться в открытой сессии, иначе будет ошибка Session/EntityManager is closed
  • Изучение базовых интерфейсов Из чего состоит структура Hibernate классов-интерфейсов, чем отличается от JPA и других реализаций
  • Кодировка при компиляции Решение проблем при отображении русских символов в консоли IDEA
  • Состояние объекта Все объекты в Hibernate в разное время работы имеют разные состояния. Это важно понимать, чтобы знать, какие действия вам доступны, почему возникают разные ошибки.
  • Примеры состояний в коде Разбор в режиме Debug в коде - какие состояния бывают у объектов в зависимости от действий
  • Логирование в Hibernate Процесс вывода информации в консоль (файл, сеть и пр.) – особенно полезно на этапе разработки (но для production лучше отключать, оставив только вывод самой необходимой информации).
  • Логирование с помощью Lombok Использование логировщика в собственных классах - чтобы выводить любую информацию
  • Выделение запроса цветом С помощью плагина Grep Console – можно выделять цветом сообщения в консоли (например, чтобы быстро находить SQL запросы)
  • API для получения данных Варианты запросов для получения (выборки) данных с помощью Hibernate - какой выбрать зависит от ситуации
  • Выборка данных с помощью Criteria Вы можете создавать запросы без написания SQL запросов (только с помощью объектов).
  • Условия в Criteria Добавление условия в запросы Criteria API - без использования SQL запросов или Native
  • Удаление с помощью Criteria Добавление операций удаления с помощью Criteria API - работа только с объектами
  • Обновление с помощью Criteria Чаще всего – для простых запросов обычно не используется Criteria API.Он используется, когда много “динамики”, условий, параметров.
  • Чекпоинт по Criteria API Краткие выводы о пройденных темах - чтобы можно было вернуться и освежить в памяти
  • SELECT объектов с помощью HQL Более упрощенный и сокращенный вариант стандартного синтаксиса SQL
  • Параметры и условия в HQL В HQL запросе не нужно заботиться о типе параметра, не нужно добавлять кавычки и пр. (как это делается в стандартном SQL запросе)
  • Постраничный вывод в HQL Более подходящий вариант для веб приложений, где нужно выводить информацию порционно
  • Получение одного объекта в HQL Самый простой запрос на HQL для получения единичного объекта
  • Функция агрегации в HQL Возвращает не объект, не коллекцию, а конкретное значение (например, Long). Можно использовать все стандартные функции из SQL (avg, count, max, min, sum)
  • Выборка нескольких полей Вы можете получить из БД несколько полей и “обернуть” их в нужный тип (User) – таким образом экономите трафик.
  • Native SQL Вы пишете SQL запрос с учетом конкретной СУБД (должны понимать какие возможности поддерживаются)
  • Выборка любых данных из таблиц Вы можете получать любые данные (столбцы) в любом порядке (не обязательно только User и его поля).
  • Чекпоинт по HQL/Native Краткие выводы о пройденных темах - чтобы можно было вернуться и освежить в памяти
  • Получение объекта по ID Как легко и быстро получить только 1 объект из БД без написания запроса
  • Получение данных @OneToMany Можно связать объекты по связям “один к одному” или “много к одному” – таким образом получение одного объекта повлечет за собой получение других.
  • Как работает Lazy Ленивая загрузка - только по требованию. Не всегда и везде нужно ставить LAZY (как многие делают) – все зависит от задачи и как работают ваши бизнес процессы.
  • Несколько Lazy ссылок Не нужно бездумно всегда сразу загружать связанные объекты, а нужно смотреть по задаче – от этого уже думать, какие выставлять параметры.
  • Получение данных @ManyToOne Еще один тип связи с обратной стороны @OneToMany - если требуется двусторонняя связь
  • Получение данных @OneToOne Строгая связь, когда один объект связан с другим - на примере готовой БД
  • Получение данных @ManyToMany Самая сложная связь из всех возможных - нужно правильно связать через третью таблицу
  • Связи объектов Аннотации нужно проставлять согласно реальным связям между таблицами БД (а не “с потолка” придумывать).
  • Методы equals и hashCode Почему нужно обязательно определять эти методы и как правильно это делать
  • Кэширование entity объектов Hibernate может кэшировать (копировать) загруженные entity объекты, чтобы обращаться к ним, вместо выполнения запроса в БД.
  • Кеш первого уровня Включен автоматически и не требует настройки (не может быть отключен) - работает во всех проектах Hibernate
  • Кеш второго уровня Нужно включать отдельно (подключать библиотеку и прописывать настройки) - работает только по требованию
  • Стратегия кеширования Как правильно настроить ваши entity классы, чтобы не было фантомных данных или ошибочных.
  • Выбор стратегии кеширования Обычно стратегии кеширования устанавливают после некоторого нагрузочного тестирования, чтобы увидеть баланс между производительностью и синхронизацией данных в кеше.
  • Статистика сессии и кеша Контроль и статистика работы кеша - особенно важно при выявлении проблем с производительностью
  • Удаление объекта Способы удаления объектов совместно с кешированием, особенности работы контейнеров
  • Транзакция, flush, commit Объединение нескольких запросов в одну операцию по принципу “все или ничего”. Если возникнет ошибка – все запросы “откатятся” (отменятся)
  • Lazy для @OneToOne Не всегда и везде нужно ставить LAZY (как многие делают) – все зависит от задачи и как работают ваши бизнес процессы.
  • Проверка работы всех связей Оптимизация работы всех проставленных связей - проверка работы в режиме runtime
  • Оптимизация связей Чаще всего при работе с entity объектом – более правильный и оптимизированный вариант – это не использовать связанные объекты (OneToMany, OneToOne и пр.), а вынести их получение в отдельные методы сервисов.
  • Удаление лишних связей Нужно сопоставить требования по бизнес-процессам приложения и получаемые данные. Затем удалить лишние связи внутри entity объектов – таким образом оптимизируем работу Hibernate.Каскадное сохранение связанных объектов
  • Слой доступа к данным Обычно большие приложения делятся на уровни (слои). Каждый слой занимается своими делами и не лезет в дела других. Каждый слой содержит свой API, который могут использовать другие слои.
  • Добавление DAO в проект Как правильно добавить слой доступа к данным в свое приложение, чтобы ничего не поломалось
  • Правильное обновление User без "глюка" Решаем проблему – когда выполняется лишний запрос на удаление объекта. Этот “глюк” появляется когда мы хотим обновить пользователя или удалить – выполняется лишний запрос.
  • Остальные методы DAO Добавление всех нужных методов DAO согласно требованиям к проекту, ТЗ, сценариям
  • Проверка (сценарии) работы DAO Прогон основных операций проекта с применением DAO и Hibernate
  • DAO для других объектов Как добавлять любые новые объекты в общую структуру DAO с проверкой работы
  • Рефакторинг и оптимизация DAO Каркас приложения согласно паттерну проектирования, ограничений на действия, расширение возможностей

Мало научиться применять базовые принципы - нужно еще уметь внедрять их в проекты и оптимизировать работу Hibernate - на это будет уделено отдельное внимание в курсе


Какие инструменты
будете использовать?

Какие фреймворки и инструменты помогут вам при изучении курса

IntelliJ IDEA

Версия IntelliJ IDEA Ultimate, которая является в данный момент самой популярной средой разработки для новичков и профессионалов

Gradle

Универсальный сборщик, который позволит вам подключать все нужные зависимости Hibernate, настраивать проект и многое другое.

PostgreSQL

Все таблицы будут находиться в этой СУБД, структура (дамп) будет предоставлена вам в готовом виде. Визуальный редактор - pgAdmin

Hibernate ORM

Основной фреймворк, с которым идет работа в курсе. Нужен для создания объектного слоя между кодом и БД.

Lombok

Библиотека для упрощения разработки - не нужно писать лишний код и отвлекаться на второстепенные действия. Применятся в любом крупном проекте.

log4j2

Библиотека для логирования, выделения сообщений, проверки работы кода и многое другое. Многие новички не пользуются логами, что сильно затрудняет разработку.

Не обязательно знать ВЕБ разработку

Вам необязательно уметь разрабатывать веб приложения или использовать Spring.

Вы сможете научиться использовать Hibernate с минимальными знаниями. Такой подход позволяет не отвлекаться на сложные технологии и изучать только самое нужное.

Затем вы можете начать изучение web/Spring и там уже будете сразу использовать Hibernate.

Это также относится и к мобильным приложениям, там тоже везде используется ORM библиотеки.

Пример проекта IntelliJ IDEA, который разработаете с нуля

Какой проект создадите

Вы создадите JavaSE проект на основе готовой БД (которую разработали в предыдущем курсе).

В основе проекта - слой доступа к данным с готовым API (уровень DAO), транзакциями, JPA/Hibernate аннотациями и многое другое.

Этот проект будете развивать дальше в следующих курсах (web, react, spring и пр.)

Какую СУБД будете использовать?

Бесплатная (свободная) СУБД для любых проектов – на основе нее можно создавать и свои реализации, т.к. исходный код открыт для всех.

Поддерживает почти все операционные системы и “архитектуры процессоров“: x86, x86_64, IA64, PowerPC, PowerPC 64, S/390, S/390x, Sparc, Sparc 64, ARM, MIPS, MIPSEL, and PA-RISC 

Готовая БД для работы в курсе

Откуда будете брать данные?

Вы получите в готовом виде все таблицы и тестовые данные - около 50000 записей (создавали в предыдущем курсе).

Если захотите - сможете использовать любые свои данные - просто нужно будет правильно повторять все действия из уроков.

Пошаговое создание с нуля

Материалы построены специально для новичков - чтобы вы не запутались и дошли без проблем он начала до конца.

Самое главное - нет усложнения и смешивания с другими комплексными технологиями (Spring, web) - это лучше изучать в отдельном курсе.

Не допускайте ошибку новичков - не пытайтесь прыгнуть выше головы. Из-за этого многие останавливаются на полпути.

Демо версия
с бесплатными уроками

Вы можете попробовать первые бесплатные уроки из курса, чтобы понимать как подается информация, какие требования и многое другое.

Для прохождения - потребуется регистрация (если ранее еще не проходили).

  • Первые бесплатные уроки
  • Другие бесплатные курсы

Вопросы читателей

Самые частые вопросы по курсу

Примерно 3 недели - это время, чтобы получить главный фундамент и далее его развивать. Чтобы стать действительно профи - нужно около полугода активного использования Hibernate. Но без фундамента - дальше двигаться не сможете.

Материалы будут идти по нарастающей сложности. Сами темы - "от простого к сложному" - в конце уже будете применять многие профессиональные принципы.

Да, сможете изучать на любом компьютере, независимо от операционной системы. Можно даже смотреть видео на мобильных устройствах, но сам код придется создавать на компьютере/ноутбуке.

Все исходные коды есть, по каждому уроку можно будет открывать в IntelliJ IDEA. Но я рекомендую все равно набирать весь код вручную, чтобы лучше запомнить его.

Если вы только начинаете изучать Hibernate, тогда поможет. Потому что сначала нужно заложить правильные основы Hibernate, потому уже интегрироваться с другими фреймворками. Не нужно пытаться одновременно изучать несколько технологий, можно запутаться.

Нет, для этого будут отдельные курсы.

Доступ к материалам и поддержке - неограничен. Можете изучать и возвращаться к урокам в любое время.

Да, особенно если покупаете по акции со скидкой - многие так делают. Изучение курса можете начинать в любое время. Вопросы сможете задавать также в любое время.

Да. Периодически выходят различные дополнения, связанные с решением недочетов или ошибок, обновляется исходный код. Вся информация будет в личном кабинете для каждого урока.

Можно, но не сильно долго. Чтобы не забыть пройденное. А так конечно, заранее нужно просто сообщить и ставим на паузу.

Вам нужно выбрать комплект курса, нажать кнопку покупки и ввести свои данные. На последнем шаге вы сможете выбрать любой удобный способ оплаты, в том числе из Украины.

Это все похожие языки-конкуренты для создания backend-frontend приложений. Можно использовать и их. Просто нужно исходить из потребностей рынка, а там сейчас пока царят эти технологии (Java, React, Spring и пр.)

Стоимость и оплата

1. Выбираете нужную версию обучения
2. Оплачиваете удобным способом
3. Получаете доступ в личном кабинете

Только 1 этот курс

Получаете доступ к материалам текущего курса в личном кабинете.

Можно задавать вопросы под каждым уроком, в телеграм группе, на форуме.

Курс доступен без ограничений по времени, поддержка также без ограничений.

5 000 р

FULLSTACK WEB - полный комплект из всех курсов

Если вы хотите изучить не только этот курс, но и весь fullstack веб разработчика - вы можете это сделать со скидкой (чтобы не покупать каждый курс по отдельности)

Многим этот вариант подходит больше, потому что вы проходите всю программу целиком.

Личный кабинет для изучения курсов

После оплаты вам открывается курс в кабинете.
Доступ - без ограничений по времени.

Служба поддержки       Личный кабинет

© Copyright 2021 JavaBegin. Все права защищены.