Използване на Hibernate Java Persistence
Съдържание
Не е тайна, че данните са гръбнакът на почти всеки проект. Въз основа на изискванията към софтуерната система се изгражда модел на данни. В бъдеще с този модел работи програмата, въвежда се информация, правят се изчисления, генерират се отчети и т.н. В процеса на разработване на софтуерни системи са проектирани и използвани различни системи за управление на бази данни (СУБД), йерархични, релационни, обектни и др.
На практика най-голяма популярност придобиха моделите на релационни бази данни, въпреки че обектно-ориентираното програмиране е популярно в съвременните методологии за програмиране. За свързване на тези технологии са разработени много технологии, спецификации и рамки за картографиране на обекти към таблици на релационни бази данни. Има много технологии, достъпни за Java разработчиците за работа с данни, това може да бъде просто сериализиране на обекти, JDBC, JDO и много други. Но всеки от тях има редица предимства и недостатъци.
Таблица 1. Основни технологии за съхранение на данни в java
Java обекти | Яжте | Не | Яжте | Яжте | Яжте | Яжте | Яжте |
Обектно ориентиран подход | Яжте | Не | Яжте | Яжте | Не | Яжте | Яжте |
Танциалност | Не | Яжте | Яжте | Яжте | Яжте | Яжте | Яжте |
Паралелизъм | Не | Яжте | Яжте | Яжте | Яжте | Яжте | Яжте |
Работа с масиви от данни | Не | Яжте | Яжте | Яжте | Яжте | Яжте | Яжте |
Схема на данните | Не | Яжте | Яжте | Не | Яжте | Яжте | Яжте |
Съхраняване на данни в релационни и нерелационни формати | Не | Не | Не | Не | Яжте | Яжте | Не |
Поддръжка на заявки за данни | Не | Яжте | Яжте | Яжте | Яжте | Яжте | Яжте |
Преносимост и строги стандарти | Яжте | Не | Не | Не | Яжте | Яжте | Яжте |
Простота | Яжте | Яжте | Яжте | Яжте | Не | Яжте | Яжте |
Сериализацията е вграден механизъм за съхраняване и предаване на обекти в Java. Но за практическа работа с данни този подход не е много подходящ, тъй като се изисква извличане и съхраняване на цялата графика от обекти, което затруднява работата с големи количества данни.
Java Database Connectivity (JDBC) Интерфейсът за програмиране на приложения (API) е разработен за работа с релационни бази данни. Недостатъкът на тази технология е липсата на механизми за проектиране на релационни данни върху обекти, което значително увеличава количеството код за тази трансформация.
Обектно-релационното картографиране (ORM) е опит на различни доставчици да картографират обекти към релационни данни. Липсата на стандарти доведе до създаването на много реализации на този подход, които са несъвместими една с друга. В резултат на това кодът става непреносим и специфичен за доставчика.
Обектните бази данни (ODB) са обектни реализации на бази данни. Както при ORM, има много реализации, въпреки опитите на Групата за управление на базата данни на обекти (ODMG) да създаде и стандартизира API за достъп до бази данни на обекти.бази данни.
Enterprise Java Beans (EJB) се въвеждат в Enterprise Edition на корпоративната Java платформа. EJB 2 обектите са компоненти, които трябва да се съхраняват в хранилища за данни. Тази технология ви позволява да работите с данни на ниво обект. Опциите за физическо съхранение не се ограничават до релационни бази данни. За съжаление, обектно-ориентираният подход е ограничен в стандарта EJB 2.x. Това се изразява в липсата или сложността на изпълнението на такива важни функции като наследяване, полиморфизъм и външни връзки на обекти. Допълнителни проблеми възникват поради необходимостта от използване на скъпи и „тежки“ сървъри.
Спецификацията JDO в момента е една от най-прогресивните и ви позволява да използвате не само релационни, но и обектни хранилища за данни.
Java Persistence API (JPA) съчетава простотата на сериализацията на обекти с възможността за работа с данни на ниво обектно-ориентиран модел. В същото време остава възможно да се комбинира достъпът до данни, както в JDBC, на ниво релационни данни, което понякога ви позволява да постигнете по-голяма производителност и гъвкавост в сравнение с JDO.
В момента има много реализации на JPA спецификацията, както търговски, така и с отворен код.
2. Пример за внедряване на Hibernate JPA
Нека да разгледаме пример за използване на изпълнението на Hibernate JPA за прости приложения на Java Standard Edition (SE). Идеята на този проект е да се създаде максимално опростена архитектура на приложението, т.е. минимизиране на броя на възможните настройки и фокусиране само върху поставената задача. Разработчиците на Java, които преди са се занимавали с Hibernate, ще оценят пълната сила на иновациите. Използване на анотации за вграждане на сервизен код в кодинформация ви позволява да се отървете от десетки сервизни XML файлове с описание на картографирането на java beans към таблици на база данни.
Задача: Необходимо е да се създадат методи за достъп и манипулиране на информация за клиенти.
Нека създадем основна структура на проекта с помощта на помощната програма за изграждане на проекти Maven 2.
Използването на Maven ви позволява да се абстрахирате от интегрираната среда за разработка, използвана от разработчика. Всичко, което трябва да направите, е да извикате задача за създаване на проект, като mvn eclipse:eclipse за Eclipse IDE, mvn jdev:jdev за Oracle java Developer или mvn idea:idea за Idea. Втората особено ценна функция на Maven е създаването на локално хранилище на необходимите java библиотеки и автоматично разрешаване на зависимости. Това ви позволява бързо да актуализирате библиотеки и да премахнете дублирането на тези от проект в проект. Сайтът на проекта Maven има просто ръководство, което да ви помогне да получите обща представа за това как да използвате продукта. За 10-15 минути можете да научите как да създавате нови проекти, да събирате компилации и т.н.
2.1. Файл с настройки на проекта Maven pom.xml
Конфигурационният файл на проекта pom.xml за Maven съдържа името на проекта и списък със зависимости на необходимите библиотеки.
Помощната програма Maven създава проект с разделяне на кода на основния код на проекта (src/main/java) и тестовия код (src/test/java), което улеснява разделянето на тестовете и невключването им в пакета, когато проектът е окончателно изграден. Фигура 1 показва структурата на създадения java проект за Eclipse IDE.
Фигура 1. Структурата на java проекта com.berdaflex.jpa_simple_test

2.2. Конфигуриране на настройките за връзка с база данни
Проектът Hibernate ви позволява да работите с голямо разнообразие от популярни СУБД. Тестването продължаваза следните бази данни:
Oracle 8i, 9i, 10g
Microsoft SQL Server 2000
Sybase 12.5 (JConnect 5.5)
MySQL 3.23, 4.0, 4.1, 5.0
PostgreSQL 7.1.2, 7.2, 7.3, 7.4, 8.0, 8.1
HypersonicSQL 1.61, 1.7.0, 1.7.2, 1.7.3, 1.8
InterSystems Cache' 2007.1
Много други СУБД също се поддържат (ако е необходимо, можете лесно да разширите основния списък и да добавите своя собствена реализация на необходимия диалект).
За тестове ще изберем популярната база данни с отворен код PostgreSql. За да се свържете с базата данни, нека създадем конфигурационен файл hibernate.cfg.xml със следното съдържание:
Параметърът " hibernate.hbm2ddl.auto " е зададен на „true“, така че обектите на базата данни да се създават автоматично въз основа на картографирането в проекта java-hibernate. За да работите с Hibernate и да създавате конфигурационни файлове, е удобно да използвате плъгина Hibernate Tools за Eclipse.
2.3. Модел на бизнес данни
Нека създадем прост обект POJO (Plain Old Java Object) за съхраняване на данни за контакт. Това е общ JavaBean с достъп до частни полета чрез get и set методи. Анотациите могат да бъдат „прикрепени“ или към частни бенки, или към методи за получаване.
Използването на анотации javax.persistence ви позволява да вградите картографирането на обектите на използваната система за съхранение (в този случай хибернация) директно в програмния код. Това намалява вероятността от грешки и сега не е необходимо да създавате десетки XML файлове за картографиране на обекти.
Използването на стандартизиран API ви позволява да промените, ако е необходимо, библиотеката за изпълнение на API за устойчивост, например от Hibernate на Oracle Toplink. Анотацията @Entity показва, че даденият клас е обект на бизнес модел. Анотацията @Table(name = "CONTACT") сочи къмимето на таблицата в базата данни. Ако името на таблицата е същото като името на класа, то може да бъде пропуснато.
Ключово поле (анотацията @Id) е необходимо за идентифициране на конкретен запис в базата данни. Най-често за това се използва сурогатен ключ. В този случай за автоматично генериране на ключ ние указваме анотацията @GeneratedValue. Съпоставянето на атрибутите на java bean към колоните на таблицата се задава с помощта на анотацията @Column, в чиито допълнителни параметри можете да посочите името на колоната на таблицата. Ако името на колоната съвпада с името на атрибута, то може да бъде пропуснато.
Класовете за устойчивост на Bean трябва да бъдат изброени в конфигурационния файл (ред).
2.4. Бизнес логика
Основният интерфейс за работа с постоянни обекти е javax.persistence.EntityManager. Определена единица работа с обекти (единица работа) се извършва директно в типичен пакет:
За да опростим задачата за получаване на конкретен екземпляр на имплементацията на интерфейса EntityManager, ще създадем помощен клас HibernateUtil, който автоматично ще инициализира конфигурацията Ejb3Configuration въз основа на конфигурационния файл на Hibernate, който създадохме по-рано.
Вече можете да използвате следната конструкция, за да получите екземпляр на EntityManager:
Пример за тестове, чийто код може да се използва в приложения, които създавате.