Главная страница
Навигация по странице:

  • Сущействует огромная разница между объектной моделью и реляционной.

  • Developer

  • Таблица HIBERNATE_DEVELOPER

  • ORM (Object-Relational Mapping).

  • Архитектура.

  • Transaction Этот объект представляет собой рабочую единицу работы с БД. В Hibernate транзакции обрабатываются менеджером транзакций.SessionFactory

  • Configuration

  • Руководство по Hibernate. Руководство по Hibernate


    Скачать 186.74 Kb.
    НазваниеРуководство по Hibernate
    Дата25.11.2021
    Размер186.74 Kb.
    Формат файлаdocx
    Имя файлаРуководство по Hibernate.docx
    ТипРуководство
    #282046
    страница1 из 7
      1   2   3   4   5   6   7

    Руководство по Hibernate.

    Введение.

    Что такое JDBC?

    JDBC (Java Database Connectivity) – это технология, которая обеспечивает доступ Java API к реляционным базам данных. Благодаря этому, наши Java-приложения могут выполнять SQL-запросы и взаимодействовать с базами данных (далее – БД), котрые поддерживают SQL.

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

    Какие плюсы даёт нам JDBC:

      • Простая и понятная обработка SQL-запросов

      • Крайне убдобна для небольших приложений

    Простой и понятный синтаксис

    Какие минусы JDBC:

    • Сложно использовать и поддерживать в больших проектах

    • Большое количество кода

    • Сложно реализовывать концепцию MVC.

    Что такое ORM (Object Relational Mapping)?

    Когда мы создаём приложение на Java и хотим сделать так, чтобы наше приложение получило доступ к информации, которая хранится в БД, мы должны понимать крайне важную деталь.

    Сущействует огромная разница между объектной моделью и реляционной.

    СУБД даёт нам информацию в табличном формате, в то время, как Java даёт нам информацию в виде некоего графа объектов.

    Представим ,что у нас есть класс Developer, который представляет разработчика:

    Класс Developer.java
    package net.proselyte.hibernate.intro;
    public class Developer {

    private int id;

    private String firstName;

    private String lastName;

    private String specialty;

    private String salary;
    public Developer() {

    }
    public Developer(int id, String firstName, String lastName, String specialty, String salary) {

    this.id = id;

    this.firstName = firstName;

    this.lastName = lastName;

    this.specialty = specialty;

    this.salary = salary;

    }
    public int getId() {

    return id;

    }
    public void setId(int id) {

    this.id = id;

    }
    public String getFirstName() {

    return firstName;

    }
    public void setFirstName(String firstName) {

    this.firstName = firstName;

    }
    public String getLastName() {

    return lastName;

    }
    public void setLastName(String lastName) {

    this.lastName = lastName;

    }
    public String getSpecialty() {

    return specialty;

    }
    public void setSpecialty(String specialty) {

    this.specialty = specialty;

    }
    public String getSalary() {

    return salary;

    }
    public void setSalary(String salary) {

    this.salary = salary;

    }

    }

    И есть таблица в БД, которая также представляет разработчика:
    Таблица HIBERNATE_DEVELOPER:
    create table HIBERNATE_DEVELOPERS (

    id INT NOT NULL auto_increment,

    first_name VARCHAR(50) default NULL,

    last_name VARCHAR(50) default NULL,

    specialty VARCHER(50) default NULL,

    salary INT default NULL,

    PRIMARY KEY (id)

    );
    Допустим, что после того, как мы создали и java-класс и таблицу в БД, нам необходимо изменить нашу БД, у нас сразу же возникает проблема.
    К тому же, когда мы записываем или читаем данные в/из БД, у нас есть 5 проблем, которые связаны с разницей между объекто-ориентированной (далее – ОО) моделью и реляционной моделью:

    1. Наследование
      В реляционной модели нет никакого понятия, похожего на наследование, которое является одним из ключевых принципов ООП.

    2. Идентификация
      Для БД есть только одна сущность, по которому объект может быть идентифицирован – это Первичный Ключ (Primary Key). В то время, как в Java у нас есть такие вещи, как (entity1 == entity2) и (object1.equals(object2)).

    3. Ассоциации
      В Java мы используем ссылки на объекты для ассоциации, а в реляционной модели – Внешний Ключ (Foreign Key).

    4. Доступ
      В Java и в реляционной БД абсолютно разные способы получения доступа в объекту.

    5. Инкапсуляция
      Крайне часто, при разработке приложений ,вы будете сталкиваться (или уже сталкивались) с тем, что наша ОО модель имеет больше классов, чем таблиц в нашей БД.

    Отсюда возникает проблема: как сделать так, чтобы Java приложение получало доступ к БД и могло корректно интерпретировать эту информацию.
    Другими словами, нам нужно создать связь между Объектом и реляционной сущностью, иначе говоря Объектно-Реляционное-Связывание или же – ORM (Object-Relational Mapping).

    ORM – это техника программирования, которая служит для того, чтобы обеспечивать преобразование данных при их обмене между реляционной базой данных и (в нашем случае) Java.

    Так какие же преимущества нам даёт ORM в сравнение с JDBC?

    • Позволяет нашим бизнес методам обращаться не к БД, а к Java-классам

    • Ускоряет разработку приложения

    • Основан на JDBC

    • Отделяет SQL-запросы от ОО модели

    • Позволяет не думать о реализации БД

    • Сущности основаны на бизнес-задачах, а не на стуктуре БД

    • Управление транзакциями

    ORM состоит из:

    • API, который реализует базовые операции (СОЗДАНИЕ, ЧТЕНИЕ,  ИЗМЕНЕНИЕ, УДАЛЕНИЕ) объектов-моделей.

    • Средства настройки метаданных связывания

    • Технику взаимодействия с транзакциями, которая позволяет реализовать такие функции, как dirty checking, lazy association fetching и т.д.

    А самыми распрастранёнными ORM фреймворками являются:

    • Hibernate (который мы и будем изучать в этом цикле статей)

    • EJB

    • JDO

    • Spring DAO

    • TopLink

    Архитектура.

    Hibernate – это ORM фреймворк для Java с открытым исходным кодом. Эта технология является крайне мощной и имеет высокие показатели производительности.

    Hibernate создаёт связь между таблицами в базе данных (далее – БД) и Java-классами и наоборот. Это избавляет разработчиков от огромного количества лишней, рутинной работы, в которой крайне легко допустить ошибку и крайне трудно потом её найти..

    Схематично это можно изобразить следующим образом:

     



     

    Какие же преимущества даёт нам использование Hibernate?

    • Обеспечивает простой API для записи и получения Java-объектов в/из БД.

    • Минимизирует доступ к БД, используя стратегии fetching.

    • Не требует сервера приложения.

    • Позволяет нам не работать с типами данных языка SQL, а иметь дело с привычыми нам типами данных Java.

    • Заботится о создании связей между Java-классами и таблицами БД с помощью XML-файлов не внося изменения в программный код.

    • Если нам неоходимо изменить БД, то достаточно лишь внести изменения в XML-файлы.

    Hibernate поддердивает все основные СУБД: MySQL, Oracle, PostgreSQL, Microsoft SQL Server Database, HSQL, DB2.
    Hibernate также может работать в связке с такими технологиями, как Maven и J2EE.

    Архитектура

    Приложение, которе использует Hibernate (в крайне поверхностном представлении) имеет такую архитектуру:



    Если мы рассмотрим строение самого Hibernate более подробно, что этот же рисунок будет выглядеть следующим образом:



    Hibernate поддерживает такие API, как JDBC, JNDI, JTA.
    JDBC обеспечивает простейший уровень абстракции функциональности для реляционных БД. JTA и JNDI, в свою очередь, позволяют Hibernate использовать серверы приложений J2EE.

    Давайье рассмотрим отдельно каждый из элементов Hibernate, которые указаны в схеме:

    Transaction

    Этот объект представляет собой рабочую единицу работы с БД. В Hibernate транзакции обрабатываются менеджером транзакций.

    SessionFactory

    Самый важный и самый тяжёлый объект (обычно создаётся в единственном эземпляре, при запуске прилодения). Нам необходима как минимум одна SessionFactory для каждой БД, каждый из которых конфигурируется отдельным конфигурационным файлом.

    Session

    Сессия исползуется для получения физического соединения с БД. Обычно, сессия создаётся при необходимости, а после этого закрывается. Это связано с тем, что эти объекты крайне легковесны. Чтобы понять, что это такое, модно сказать, что создание, чтение, изменение и удаление объектов происходит через объект Session.

    Query

    Этот объект использует HQL или SQL для чтения/записи данных из/в БД. Экземпляр запроса используется для связыания парметров запроса, ограничения количества результатов, которые будут возвращены и для выполнения запроса.

    Configuration

    Этот объект используется для создания объекта SessionFactory и конфигурирует сам Hibernate с помощью конифигурационного XML-файла, который объясняет, как обрабатывать объект Session.

    Criteria

    Используется для создания и выполнения объекто-ориентированных запроса дял получения объектов.
      1   2   3   4   5   6   7


    написать администратору сайта