Лабораторная работа № 4
ЦЕЛЬ РАБОТЫ
Целью данной лабораторной работы является ознакомление с технологиями ORM и реализация взаимодействия с базой данных посредством ORM Hibernate.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Краткое введение в технологии ORM было осуществлено в первой части учебно-методического пособия. Существует множество реализаций технологии ORM на языке Java. Одна из этих реализаций — это Hibernate. Для того, чтобы использовать функционал hibernate, необходимо иметь:
- — библиотеку ORM Hibernate, ее можно скачать с официального сайта производителя;
- — JDBC (Java Data Base Connectivity) — это библиотека, позволяющая взаимодействие с различными СУБД. JDBC основан на концепции драйверов, позволяющих получить соединение с БД по специальному URL. Каждая БД имеет свою JDBC- библиотеку, которую можно загрузить с официального сайта используемой БД.
Создание конфигурации подключения к БД.
Основным классом hibernate-технологии, позволяющей читать, изменять, добавлять или удалять данные из СУБД, является Session. Для получения сессии необходимо изначально установить конфигурацию соединения с БД и получить с помощью созданной конфигурации фабрику сессий (SessionFactory), которая в итоге будет нам поставлять сессии. Конфигурацию соединения можно прописать двумя способами:
- — через файл hibernate.cfg.xml;
- — через класс org.hibernate.cfg.Configuration.
Сейчас рассмотрим эти два способа на примерах:
Файл hibernate.cfg.xml
- 1.
- 2. "http://www.hibernate.org/dtd/hibernate- configuration-3.0. dtd" >
- 3. < hibernate-configuration >
- 4. < session-factory >
- 5.
jdbc: sqlserver://localhost:1433; database=data_base - 6.
com.microsoft. sqlserver.jdbc.SQLServerDriver - 7.
sa < /property> - 8.
l - 9.
l - 10.
thread < /property > - 11.
update - 12.
true - 13.
org.hibernate.dialect. SQLServerDialect - 14. < /session-factory>
- 15.
Первые две строчки — подключение спецификации (шаблона), с его помощью мы не ошибемся в синтаксисе и будем точно знать, где какой тег должен будет находиться и какие атрибуты он может иметь.
Необходимая информация содержится в строчках с 5 по 13, в них
прописаны непосредственно свойства подключения в БД:
- — connection.url — url-строка подключения к БД. В данном примере осуществляется подключение к MS SQL Server. Разберем строчку детально: jdbc: sqlserver: — это некоторая спецификация, через что мы подключаемся и к какому серверу;: //localhost: 1433 — указываем ip-адресс или доменное имя компьютера с портом, к которому мы будем подключаться; database=data_base— указание, к какой базе мы будем подключаться;
- — connection.driver_class — указание, какой драйвер будет использоваться в качестве связующего звена с СУБД. Здесь указывается класс JDBC-драйвера, который подключен к проекту, в примере указан драйвер MS SQL Server;
- — connection.username — логин зарегистрированного пользователя СУБД;
- — connection.password — пароль;
- — connection.pool_size — данное свойство показывает, сколько соединений к БД может быть одновременно открыто;
- — hbm2ddl.auto — свойство, указывает что нужно сделать со схемой БД при инициализации. Может принимать такие значения:
- • update — сверяет схему БД с имеющимися конфигурациями классов, если были внесены какие-то изменения, они автоматически занесутся в БД. При этом данные, которые были занесены в базу, не изменятся;
- • create — каждый раз при запуске приложения схема БД будет создаваться заново. Все данные, которые были занесены раньше, будут удалены;
- • create-drop — каждый раз при запуске приложения схема БД будет создаваться заново, а при завершении — удаляться. Все данные, которые были занесены во время работы приложения, будут удалены по завершению приложения;
- • validate — при инициализации будет совершена проверка соответствия конфигурации классов и схемы БД. Если мы внесли изменение в конфигурацию какого-то класса, а схема в БД не была изменена, сработает исключение;
- — show_sql — данное свойство указывает, будут ли выводится SQL- запросы на консоль, которые отправляются на СУБД. В процессе отладки это бывает очень удобно;
- — dialect — hibernate может работать с разными БД, и каждая имеет свои особенности (генерация первичного ключа, страничный вывод, функции), нужно указать какой диалект будем использовать для создания запросов. В данном случае — диалект MS SQL Server.
Класс org.hibernate.cfg.Configuration используется для подготовки данных соединения к СУБД.
- 1. public static Configuration getConfiguration (){
- 2. Configuration cfg = new Configuration ();
- 3. cfg.setProperty ("hibernate.connection.url", "jdbc: sqlserver://localhost: 1433; database=data_base");
- 4. cfg.setProperty ("hibernate.connection.driver_class", "com. microsoft.sqlserver.jdbc.SQLServerDriver");
- 5. cfg.setProperty ("hibernate.connection.username","sa");
- 6. cfg.setProperty ("hibernate.connection.password","l");
- 7. cfg.setProperty ("hibernate.connection.pool_size","l");
- 8. cfg.setProperty ("hibernate.current_session_context_ class","thread");
- 9. cfg.setProperty ("hibernate.hbm2ddl.auto","update");
- 10. cfg.setProperty ("hibernate.show_sql","true");
- 11. cfg.setProperty ("hibernate.dialect","org.hibernate.dialect. SQLServerDialect");
- 12. return cfg;
- 13. }
Класс подключения к БД.
Когда создана конфигурация нужно создать класс отвечающий за создание сессий, так называемая фабрика сессий. Пример кода:
- 1. private static SessionFactory sessionFactory = buildSessionFactoryO;
- 2. private static SessionFactory buildSessionFactory () {
- 3. try{
- 4. if (sessionFactory = = null) {
- 5. Configuration configuration = new Configuration ().configure (“HibernateUtil/hibernate.cfg.xml”);
- 6. StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder O.applySettings (configuration. getProperties ());
- 7. sessionFactory = configuration.buildSessionFactory (builder. buildQ);
- 8. }
- 9. return sessionFactory;
- 10. } catch (Throwable ex) {
- 11. System.err.println (“Initial SessionFactory creation failed.” + ex);
- 12. throw new ExceptionlnlnitializerError (ex);
- 13. }
- 14. }
- 15. public static Session getSession () {
- 16. return sessionFactory.openSession ();
- 17. }
В данном примере показано, как можно создать сессию с БД, используя ранее созданные конфигурационные параметры. В пятой строчке происходит использование конфигурационных данных, созданных с помощью файла hibernate.cfg.xml. Для реализации второго способа описания конфигурации можно использовать следующую строчку:
5. Configuration configuration = getConfigurationf);
Метод getSession создает сессию, с помощью которой и будет происходить общение с БД.