Излагаются основы Hibernate и приводится пример его применения в Java-коде.
Hibernate значительно уменьшает время разработки приложений, работающих с базами данных, заботится о связи Java классов с таблицами базы данных (и типов данных Java в типы данных SQL), предоставляет средства для автоматического построения запросов и извлечения данных.
Использование javax.persistence аннотаций, позволяет встроить маппинг сущностей используемой системы хранения (в данном случае hibernate) непосредственно в программый код. Это снижает вероятность появления ошибок и теперь не требуется создавать десятки XML файлов маппинга объектов.
1. Использование HibernateИспользование Hibernate
Java PersistenceJava Persistence
Part 1Part 1
Для студентовДля студентов
старших курсов университетовстарших курсов университетов
Ст.преподаватель Дудник О.А.Ст.преподаватель Дудник О.А.
2. HibernateHibernate — библиотека для языка — библиотека для языка
программированияпрограммирования JavaJava,,
предназначенная для решения задачпредназначенная для решения задач
-объектно реляционного отображения-объектно реляционного отображения
(object-relational mapping —(object-relational mapping — ORMORM). Она). Она
представляет собойпредставляет собой
свободное программное обеспечениесвободное программное обеспечение сс
(open source),открытым исходным кодом (open source),открытым исходным кодом
GNUраспространяемое на условиях GNUраспространяемое на условиях
Lesser General Public LicenseLesser General Public License..
3.
4. Step 1: Download the Hibernate 4.3.x : First of all you
have to download the Hibernate 4.3.x latest release.
Step 2: Create database and table - Next you have to
create database and tables
Step 3: Add libraries: You should create project and
add the Hibernate libraries files.
You will also have to add the dataBase’s JDK driver jar
file.
Step 4: Create model class
Step 5: Create hibernate.cfg file - Create the
configuration file of Hibernate framework
Step 6: Create the utility class for getting
SessionFactory
Step 7: Write the code for testing the Hibernate
example - finally test the application.
5. STEP 1-3STEP 1-3
Download the Hibernate 4.3.x :
First of all you have to download
the Hibernate 4.3.x latest release
Create database and table - Next
you have to create database and
tables
6. Давайте напишем небольшоеДавайте напишем небольшое
,приложение использующее библиотеку,приложение использующее библиотеку
HibernateHibernate для хранения и обработкидля хранения и обработки
таблицы СУБДтаблицы СУБД OracleOracle. Для начала нам. Для начала нам
нужно скачатьнужно скачать HibernateHibernate..
http://hibernate.org/orm/downloads/http://hibernate.org/orm/downloads/
Также нам понадобиться скачать иТакже нам понадобиться скачать и
установить СУБДустановить СУБД OracleOracle..
http://www.oracle.com/technetwork/database/ehttp://www.oracle.com/technetwork/database/e
nterprise-edition/downloads/index-092322.htmlnterprise-edition/downloads/index-092322.html
9. Для просмотра базы данныхДля просмотра базы данных
нужно установитьнужно установить SQL-developerSQL-developer
http://www.oracle.com/technetwork/develhttp://www.oracle.com/technetwork/devel
oper-tools/sql-oper-tools/sql-
developer/downloads/index.htmldeveloper/downloads/index.html
, который работает только с, который работает только с JDKJDK
1.6(1.6(нужно установитьнужно установить))
10.
11. STEP 4STEP 4
Create model class
Опишем наш класс-сущностьОпишем наш класс-сущность(entity)(entity),,
который будем хранить в БДкоторый будем хранить в БД((в пакетев пакете
logic)logic)::
13. АннотацииАннотации здесь используются дляздесь используются для
MappingMapping (сопоставление)(сопоставление) JavaJava классов склассов с
таблицами базы данных. Проще говорятаблицами базы данных. Проще говоря
для того, чтобыдля того, чтобы HibernateHibernate знал, чтознал, что
данный класс является сущностью, то естьданный класс является сущностью, то есть
объекты данного класса мы будем хранитьобъекты данного класса мы будем хранить
в базе данных. Использованные здесьв базе данных. Использованные здесь
аннотации имеют следующий смысл:аннотации имеют следующий смысл:
@Entity@Entity — указывает на то, что данный— указывает на то, что данный
класс является сущностью.класс является сущностью.
@Table@Table — задает имя таблицы, в которой— задает имя таблицы, в которой
будут храниться объекты классабудут храниться объекты класса
@Id@Id — обозначает поле id— обозначает поле id
@GeneratedValue@GeneratedValue ии @GenericGenerator@GenericGenerator ——
указывает на то, как будет генерироватьсяуказывает на то, как будет генерироваться
id (у нас — по возрастанию)id (у нас — по возрастанию)
@Column@Column — обозначает имя колонки,— обозначает имя колонки,
соответствующей данному полю.соответствующей данному полю.
14. Step 5Step 5
Create hibernate.cfg file - Create
the configuration file of Hibernate
framework
Теперь создадим главныйТеперь создадим главный
конфигурационный файлконфигурационный файл
hibernate.cfg.xmlhibernate.cfg.xml и помести его ви помести его в
папкупапку binbin нашего проекта. Из этогонашего проекта. Из этого
файлафайла HibernateHibernate будет брать всюбудет брать всю
необходимую ему информациюнеобходимую ему информацию
16. • Параметр "Параметр " hibernate.hbm2ddl.autohibernate.hbm2ddl.auto ""
устанавливаем в значение “true” дляустанавливаем в значение “true” для
того, чтобы объекты базы данныхтого, чтобы объекты базы данных
создавались автоматически на основесоздавались автоматически на основе
маппинга в java-hibernate проекте.маппинга в java-hibernate проекте.
17. Step 6: Create the utility class for
getting SessionFactory
Теперь создадим пакетТеперь создадим пакет utilutil, а в нем, а в нем
класскласс HibernateUtilHibernateUtil, который будет, который будет
отвечать за обработку данногоотвечать за обработку данного xmlxml
файла и установление соединения сфайла и установление соединения с
нашей базой данных:нашей базой данных:
package util;package util;
19. Step 7: Write the code for testing
the Hibernate example
The Data Access Object (DAO) patternThe Data Access Object (DAO) pattern
Для класса-сущности, определимДля класса-сущности, определим
интерфейсинтерфейс StudentDAOStudentDAO из пакетаиз пакета
DAODAO, содержащий набор необходимых, содержащий набор необходимых
методов:методов:
20. package DAO;package DAO;
import java.sql.SQLException;import java.sql.SQLException;
import java.util.List;import java.util.List;
import logic.Student;import logic.Student;
public interface StudentDAO {public interface StudentDAO {
public void addStudent(Student student) throws public void addStudent(Student student) throws
SQLException; //добавить студентаSQLException; //добавить студента
public void updateStudent(Student student) throws public void updateStudent(Student student) throws
SQLException;//обновить студентаSQLException;//обновить студента
public Student getStudentById(Long id) throws public Student getStudentById(Long id) throws
SQLException; // idполучить стедента поSQLException; // idполучить стедента по
public List getAllStudents() throws SQLException; public List getAllStudents() throws SQLException;
//получить всех студентов //получить всех студентов
public void deleteStudent(Student student) throws public void deleteStudent(Student student) throws
SQLException;//удалить студентаSQLException;//удалить студента
}}
21. Теперь определим реализацию этогоТеперь определим реализацию этого
интерфейса в классеинтерфейса в классе SudentDAOImplSudentDAOImpl
в пакетев пакете DAO.ImplDAO.Impl::
23. Давайте создадим классДавайте создадим класс FactoryFactory вв
пакетепакете DAODAO, к которому будем, к которому будем
обращаться за нашими реализациямиобращаться за нашими реализациями
DAO, от которых и будем вызыватьDAO, от которых и будем вызывать
необходимые нам методы:необходимые нам методы:
24. package DAO;package DAO;
import DAO.Impl.StudentDAOImpl;import DAO.Impl.StudentDAOImpl;
public class Factory {public class Factory {
private static StudentDAO studentDAO = null; private static StudentDAO studentDAO = null;
private static Factory instance = null; private static Factory instance = null;
public static synchronized Factory getInstance(){ public static synchronized Factory getInstance(){
if (instance == null){ if (instance == null){
instance = new Factory(); instance = new Factory();
} }
return instance; return instance;
} }
public StudentDAO getStudentDAO(){ public StudentDAO getStudentDAO(){
if (studentDAO == null){ if (studentDAO == null){
studentDAO = new StudentDAOImpl(); studentDAO = new StudentDAOImpl();
} }
return studentDAO; return studentDAO;
} }
}}
25. Ну вот и все! Осталось только посмотреть какНу вот и все! Осталось только посмотреть как
это работает:это работает:
package main;package main;
imimport java.sql.SQLException;port java.sql.SQLException;
import java.util.List;import java.util.List;
import logic.Student;import logic.Student;
import DAO.Factory;import DAO.Factory;
public class Main {public class Main {
public static void main(String[] args) throws public static void main(String[] args) throws
SQLException {SQLException {
//Создадим двух студентов //Создадим двух студентов
Student s1 = new Student(); Student s1 = new Student();
Student s2 = new Student(); Student s2 = new Student();
26. Теперь мы посмотрим как связать междуТеперь мы посмотрим как связать между
.собой несколько таблиц.собой несколько таблиц
Теперь база данных будет иметь такойТеперь база данных будет иметь такой
:вид:вид
29. Осталось только показатьОсталось только показать HibernateHibernate, как эти, как эти
таблицы между собой связаны. Как этотаблицы между собой связаны. Как это
делается? Опять же с помощью аннотаций. Вделается? Опять же с помощью аннотаций. В
HibernateHibernate для этого предусмотреныдля этого предусмотрены
следующие виды аннотаций:следующие виды аннотаций:
@OneToOne@OneToOne,, @OneToMany@OneToMany,, @ManyToOne@ManyToOne,,
@ManyToMany@ManyToMany..
Например, чтобы связать таблицыНапример, чтобы связать таблицы StudentStudent ии
StatisticsStatistics связью многие к одному, следуетсвязью многие к одному, следует
добавить в классдобавить в класс StudentStudent следующей код:следующей код: