Org hibernate cfg configuration java

Пример Hibernate

Рассмотрим разработку Hibernate примера в среде Eclipse. Основная цель, которую будем преследовать в данном Hibernate примере — показать технологию использования библиотеки по записи объектов в таблицу БД, чтению объектов таблицы, поиску объекта по идентификатору записи ID.

На следующем скриншоте представлена структура проекта HibernateExample в среде разработки IDE Eclipse.

Hibernate пример включает :

  • класс тестирования PersonTest.java;
  • объект/класс Person.java;
  • файл описания (mapping) класса person.hbm.xml
  • файл конфигурации hibernate.cfg.xml, включающий описание подключения к серверу БД;
  • библиотеки директории lib.

В качестве СУБД в примере будем использовать MySQL. В БД создадим таблицу «test.person» в схеме «test». Конечно, таблицу можно было бы также создать с использованием Hibernate, но в данном примере мы это не будем рассматривать.

Исходный код примера можно скачать здесь.

Описание таблицы базы данных

CREATE TABLE test.person ( id INT (11) NOT NULL, name VARCHAR (128) NOT NULL, PRIMARY KEY (id) ) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;

Тестовая таблица «person» будет включать два поля : идентификатор записи «id» и имя «name». Записи в таблице будут храниться в кодировке «UTF8».

Исходный код объекта/класса

Создадим класс Person с полями id — идентификатор записи и name — имя. Класс, с которым работает Hibernate, называется сущностью Entity. Для того, чтобы класс Person стал сущностью, добавим аннотацию @Entity. Сущности типа Person будут храниться в таблице, имя которой совпадает с именем класса, т.е. «person». Значения полей сущностей будут храниться в одноименных колонках этой же таблицы. Сущность должна иметь «persistence identity», или идентификатор. Это — ключ, который однозначно её идентифицирует и выделяет среди других сущностей такого же типа. Идентификатор указывается с помощью аннотации @Id. В классе «Person» в качестве идентификатора можно использовать поле id, которое соответствует колонке первичного ключа в таблице «test.person».

import javax.persistence.Entity; import javax.persistence.Id; @Entity public class Person < @Id int id; String name; public Person() <>public Person(int id, String name) < super(); this.id = id; this.name = name; >public int getId() < return id; >public void setId(int id) < this.id = id; >public String getName() < return name; >public void setName(String name) < this.name = name; >public String toString() < return "Person "; > >

Конфигурационный файл объекта

Конфигурационный файл hibernate.cfg.xml

Конфигурационный XML-файл hibernate.cfg.xml определяет параметры СУБД, учетную запись (login, password) подключения к серверу БД, а также дополнительные параметры, которые используются при работе с сервером.

     com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/test root password 1 true org.hibernate.dialect.MySQLDialect thread utf8 utf8 true   

В файле конфигурации hibernate.cfg.xml определена база данных MySQL, пул подключений — 1 соединение. В свойстве «show_sql» устанавливаем истиное значение, чтобы в консоли были отображены генерируемые библиотекой Hibernate SQL-скрипты. Дополнительно устанавливаем кодировку записей UTF8, чтобы можно было бы работать с кириллицей.

Читайте также:  Product program in java

Тестирование Hibernate примера

Создадим класс «PersonTest» для проверки работы библиотеки. В методе main() вызывается конструктор класса, в котором вызывается метод createHibernateSession() для создания сессии Session. Если сессия создана успешно, то в методе recordsAdd() в таблицу БД добавляются два объекта. Подробно о состоянии сущности, сессии Session, ее методах перевода сущности из одного состояния в другое, представлено здесь.

После создания сессии в методе recordsRead() объекты из БД «загружаются» в коллекцию и отображаются в консоли. В заключении программа вызывает метод recordFind(final int id) для поиска в таблице БД объекта по идентификатору записи и завершает работу — закрывает сессию.

import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import net.common.model.Person; public class PersonTest < private Session session = null; private final String[][] persons = , >; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * Процедура создания сессии * @return org.hibernate.Session */ private Session createHibernateSession() < SessionFactory sessionFactory = null; ServiceRegistry serviceRegistry = null; try < try < Configuration cfg = new Configuration(). addResource("person.hbm.xml").configure(); serviceRegistry = new StandardServiceRegistryBuilder(). applySettings(cfg.getProperties()).build(); sessionFactory = cfg.buildSessionFactory(serviceRegistry); >catch (Throwable e) < System.err.println("Failed to create sessionFactory object." + e); throw new ExceptionInInitializerError(e); >session = sessionFactory.openSession(); System.out.println("Создание сессии"); > catch (Exception e) < System.out.println(e.getMessage()); >return session; > //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * Процедура добавления записей в таблицу */ private void recordsAdd() < try < System.out.println("Добавление записи в таблицу БД"); Transaction tx = session.beginTransaction(); for (int i = 0; i < persons.length; i++) < Person person = new Person(); person.setId(Integer.valueOf(persons[i][0])); person.setName(persons[i][1]); session.save(person); >tx.commit(); System.out.println("\tЗаписи добавлены"); > catch (Exception e) < System.out.println(e.getMessage()); >> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * Процедура чтения записей */ private void recordsRead() < System.out.println("\nЧтение записей таблицы"); String query = "select p from " + Person.class.getSimpleName() + " p"; @SuppressWarnings("unchecked") Listlist = (List)session.createQuery(query).list(); System.out.println(list); > //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * Процедура поиска записи */ private void recordFind(final int id) < System.out.println("\nЧтение записи таблицы по ID"); Person person = (Person) session.load(Person.class, id); System.out.println(person); >//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * Конструктор класса */ public PersonTest() < // Создание сессии session = createHibernateSession(); if (session != null) < // Добавление записей в таблицу recordsAdd(); // Чтение записей таблицы recordsRead(); // Поиск записи по идентификатору recordFind(Integer.valueOf(persons[1][0])); // Закрытие сессии if (session.isOpen()) session.close(); >> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public static void main(String[] args) < new PersonTest(); System.exit(0); >>

Для того, чтобы действия над сущностями сохранялись в базе данных, методы для создания, изменения и удаления сущностей должны вызываться в транзакциях. Для открытия и закрытия транзакций используются методы beginTransaction() и commit() объекта Transaction

Читайте также:  Font style all caps html

Следует обратить внимание на то, как объект сохраняется в таблице БД, как читается список объектов и как выполняется поиск объекта по идентификатору.

// сохранение объекта в таблице : recordsAdd() session.save(person); // чтение списка объектов : recordsRead List list = (List)session.createQuery(query).list(); // чтение объекта по идентификатору : recordFind Person person = (Person) session.load(Person.class, id);

В консоли будут отражены следующие результаты работы приложения :

Создание сессии Добавление записи в таблицу БД Hibernate: insert into person (Name, id) values (?, ?) Hibernate: insert into person (Name, id) values (?, ?) Записи добавлены Чтение записей таблицы Hibernate: select person0_.id as id1_0_, person0_.Name as Name2_0_ from person person0_ [Person , Person ] Чтение записи таблицы по ID Person

Автоматически генерируемые библиотекой SQL-скрипты отображены в консоли после ключевого слова «Hibernate». Чтобы блокировать «вывод» SQL-скриптов необходимо свойству «show_sql» в файле конфигурации присвоить значение false.

Пример использования генератора последовательностей Sequence в Hibernate можно увидеть здесь.

Описание аннотаций связей между сущностями с примерами представлено здесь.

Источник

Оцените статью