Рубрики
Без рубрики

Начало Работы с Гибернацией

Настройка простого проекта в режиме гибернации без использования какой-либо веб-платформы. Помеченный как hibernate, java, database.

Hibernate – один из самых известных инструментов объектно-реляционного сопоставления (ORM), который позволяет разработчику легко сопоставлять специализированные объекты Java, известные как Сущности, с таблицами базы данных, а также позволяет ему/ей создавать новые строки в таблицах базы данных и/или обновлять существующие с помощью этих объектов Java. Эта возможность значительно сокращает время разработки, поскольку теперь нам не нужно заботиться о каждой сложной детали того, как данные создаются, обновляются и удаляются в базе данных. И нет необходимости говорить, что такой потрясающий фреймворк, как Hibernate, обеспечивает гораздо больше, чем просто это.

В этом посте мы создадим простой Java-проект, чтобы начать работу с Hibernate. Но мы не будем использовать веб-фреймворк MVC, такой как Spring, поверх Hibernate, потому что использование любого другого фреймворка будет отвлекать от понимания самого Hibernate. Итак, мы создадим автономное приложение для гибернации и будем использовать JUnit для модульного тестирования каждой изучаемой нами функции гибернации. В качестве нашего первого примера мы будем вставлять запись в пользовательскую таблицу на локальном сервере MySQL. Так что давайте начнем!

Создайте проект Maven

Начните с создания проекта maven в вашей любимой IDE и отредактируйте pom.xml файл должен иметь следующие зависимости Hibernate, JUnit и MySQL (поскольку мы используем базу данных MySQL). Заключительный pom.xml файл будет выглядеть следующим образом:




  4.0.0
  com.jeetprksh
  hibernate-examples
  1.0-SNAPSHOT
  hibernate-examples

  
    
      junit
      junit
      4.11
      test
    

    
      mysql
      mysql-connector-java
      8.0.11
    

    
      org.hibernate
      hibernate-core
      5.2.10.Final
    
  


Настройка режима гибернации

Любому приложению, находящемуся в спящем режиме, потребуется минимальная конфигурация, указывающая ему, какую базу данных использовать и где ее искать. Мы настраиваем всю эту информацию в hibernate.cfg.xml файл:






    
        com.mysql.jdbc.Driver
        jdbc:mysql://localhost:3306/testDB
        root
        qwerty123
        10
        true
        org.hibernate.dialect.MySQLDialect
        thread

        
    

Помимо наличия сведений о подключении к базе данных, он также содержит сведения о сопоставленных объектах. Нам нужно сохранить этот файл в каталоге ресурсов maven, чтобы он был у нас на пути к классу. Теперь в нашем приложении Java мы прочитаем эту конфигурацию, чтобы создать экземпляр SessionFactory, который будет использоваться для создания сеанса и управления им, который, в свою очередь, предоставляет интерфейс CRUD для сопоставленных объектов. Общий класс конфигурации Java был бы:

public class HibernateConfig {

  private static final SessionFactory sessionFactory;

  private static ServiceRegistry serviceRegistry;

  static {
    try {
      StandardServiceRegistry standardRegistry =
              new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
      Metadata metaData = new MetadataSources(standardRegistry).getMetadataBuilder().build();
      sessionFactory = metaData.getSessionFactoryBuilder().build();
    } catch (Exception e) {
      e.printStackTrace();
      throw new ExceptionInInitializerError(e);
    }
  }

  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }
}

Класс сущности

Класс entity – это специальный класс Java, который представляет таблицу базы данных в нашем приложении Java, и любая операция CRUD, которая нам нужна для этой таблицы базы данных, будет выполняться через этот класс entity. Поскольку нам нужно вставить запись в таблицу пользователя, мы создадим класс сущности пользователя, который будет выглядеть следующим образом:

@Entity
public class User {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;

  private String firstName;

  private String lastName;

  private int age;

  public User(String firstName, String lastName, int age) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
  }

  // getters and setters

}

Обратите внимание, что наш пользовательский класс использует следующие аннотации гибернации:

  • Аннотация уровня класса @Entity , которая делает его Сущностью, сопоставленной с таблицей с аналогичным именем. Если имя класса сущности и имя таблицы должны отличаться, то мы можем указать имя таблицы в необязательном параметре аннотации как @Entity(name) .
  • С помощью @Id аннотации к атрибуту id мы делаем его уникальным идентификатором для объекта User.
  • @GeneratedValue определяет, как будет генерироваться уникальный идентификатор при вставке новых записей в пользовательскую таблицу.

Создание слоя DAO

Объект доступа к данным будет единой точкой контакта для всего приложения для обновления и запроса записей в базу данных и из нее. В нашем случае модульные тестовые примеры будут использоваться в эти дни для того же самого. Поскольку нам нужно вставить пользовательскую сущность, соответствующий UserDao будет выглядеть следующим образом:

public class UserDaoImpl extends CommonDaoImpl implements UserDAO {

  @Override
  public int createUser(User user) throws HibernateException {
    return super.saveEntity(user);
  }

}

Обратите внимание, что UserDao будет иметь только методы доступа к данным, специфичные для объекта User, поэтому, если у нас есть другой объект, скажем Адрес , для этого потребуется свой собственный класс DAO, Адрессдао . Но в наши дни мы зависим от более общего Common Dao , который будет напрямую взаимодействовать с Hibernate для сохранения, запроса и обновления объектов.

public class CommonDaoImpl {

  private SessionFactory sessionFactory;
  private Session session;

  public CommonDaoImpl() {
    this.sessionFactory = HibernateConfig.getSessionFactory();
    this.session = sessionFactory.getCurrentSession();
  }

  protected int saveEntity(Object obj) throws HibernateException {
    Transaction transaction = session.beginTransaction();
    int id = (Integer) session.save(obj);
    transaction.commit();
    return id;
  }
}

Каждый метод в этот ДЕНЬ будет отвечать за запуск транзакции для экземпляра объекта Session , сохранение объекта на том же Сеанс экземпляр, а затем зафиксируйте транзакцию.

Собирая Все Это Воедино

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

public class Tests {

  private static final Logger logger = Logger.getLogger(Tests.class.getName());

  private UserDAO userDao;

  public Tests() {
    this.userDao = new UserDaoImpl();
  }

  @Test
  public void testInsertUser() {
    User user = new User("Robb", "Stark", 17);
    Integer id = (Integer) userDao.createUser(user);
    assertTrue(id instanceof Integer);
  }
}

Обратите внимание, что для модульного тестирования пользователя insert наш модульный тестовый пример сначала создает объект User и передает его на уровень DAO, чтобы он был вставлен в базу данных. Уровень DAO вернет уникальный идентификатор только что вставленной записи, который мы будем использовать в качестве критерия прохождения/неудачи для этого модульного теста.

Код

Рабочий код был зафиксирован в этом репозитории github.

Эта статья уже опубликована в моем личном блоге .

Оригинал: “https://dev.to/jeetprakash/getting-started-with-hibernate-d4p”