SlideShare a Scribd company logo
1 of 33
Использование HibernateИспользование Hibernate
Java PersistenceJava Persistence
Part 1Part 1
Для студентовДля студентов
старших курсов университетовстарших курсов университетов
Ст.преподаватель Дудник О.А.Ст.преподаватель Дудник О.А.
HibernateHibernate — библиотека для языка — библиотека для языка
программированияпрограммирования JavaJava,,
предназначенная для решения задачпредназначенная для решения задач
-объектно реляционного отображения-объектно реляционного отображения
(object-relational mapping —(object-relational mapping — ORMORM). Она). Она
представляет собойпредставляет собой
свободное программное обеспечениесвободное программное обеспечение сс
(open source),открытым исходным кодом (open source),открытым исходным кодом
GNUраспространяемое на условиях GNUраспространяемое на условиях
Lesser General Public LicenseLesser General Public License..
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.
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
Давайте напишем небольшоеДавайте напишем небольшое
,приложение использующее библиотеку,приложение использующее библиотеку
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
))
))
Для просмотра базы данныхДля просмотра базы данных
нужно установитьнужно установить 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(нужно установитьнужно установить))
STEP 4STEP 4
Create model class
Опишем наш класс-сущностьОпишем наш класс-сущность(entity)(entity),,
который будем хранить в БДкоторый будем хранить в БД((в пакетев пакете
logic)logic)::
importimport
org.hibernate.annotations.Genericorg.hibernate.annotations.Generic
Generator;Generator;
@Entity@Entity
@Table(name="Student")@Table(name="Student")
public class Student {public class Student {
      
    private Long id;        private Long id;    
    private String name;        private String name;    
    private Long age;    private Long age;
      
АннотацииАннотации здесь используются дляздесь используются для
MappingMapping (сопоставление)(сопоставление) JavaJava классов склассов с
таблицами базы данных. Проще говорятаблицами базы данных. Проще говоря
для того, чтобыдля того, чтобы HibernateHibernate знал, чтознал, что
данный класс является сущностью, то естьданный класс является сущностью, то есть
объекты данного класса мы будем хранитьобъекты данного класса мы будем хранить
в базе данных. Использованные здесьв базе данных. Использованные здесь
аннотации имеют следующий смысл:аннотации имеют следующий смысл:
@Entity@Entity — указывает на то, что данный— указывает на то, что данный
класс является сущностью.класс является сущностью.
@Table@Table — задает имя таблицы, в которой— задает имя таблицы, в которой
будут храниться объекты классабудут храниться объекты класса
@Id@Id — обозначает поле id— обозначает поле id
@GeneratedValue@GeneratedValue ии @GenericGenerator@GenericGenerator ——
указывает на то, как будет генерироватьсяуказывает на то, как будет генерироваться
id (у нас — по возрастанию)id (у нас — по возрастанию)
@Column@Column — обозначает имя колонки,— обозначает имя колонки,
соответствующей данному полю.соответствующей данному полю.
Step 5Step 5
Create hibernate.cfg file - Create
the configuration file of Hibernate
framework
Теперь создадим главныйТеперь создадим главный
конфигурационный файлконфигурационный файл
hibernate.cfg.xmlhibernate.cfg.xml и помести его ви помести его в
папкупапку binbin нашего проекта. Из этогонашего проекта. Из этого
файлафайла HibernateHibernate будет брать всюбудет брать всю
необходимую ему информациюнеобходимую ему информацию
<!DOCTYPE hibernate-configuration PUBLIC<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD    "-//Hibernate/Hibernate Configuration DTD
3.0//EN“3.0//EN“   
"http://hibernate.sourceforge.net/hibernate-"http://hibernate.sourceforge.net/hibernate-
configuration-3.0.dtd">configuration-3.0.dtd">
<hibernate-configuration><hibernate-configuration>
<session-factory><session-factory>
<property<property name="connection.driver_class">name="connection.driver_class">
oracle.jdbc.driver.OracleDriver</property>oracle.jdbc.driver.OracleDriver</property>
<property<property name="connection.url">name="connection.url">
jdbc:oracle:thin:@localhost:1521:MyDB</propertjdbc:oracle:thin:@localhost:1521:MyDB</propert
y>  y>  
• Параметр "Параметр " hibernate.hbm2ddl.autohibernate.hbm2ddl.auto ""
устанавливаем в значение “true” дляустанавливаем в значение “true” для
того, чтобы объекты базы данныхтого, чтобы объекты базы данных
создавались автоматически на основесоздавались автоматически на основе
маппинга в java-hibernate проекте.маппинга в java-hibernate проекте.
Step 6: Create the utility class for
getting SessionFactory
Теперь создадим пакетТеперь создадим пакет utilutil, а в нем, а в нем
класскласс HibernateUtilHibernateUtil, который будет, который будет
отвечать за обработку данногоотвечать за обработку данного xmlxml
файла и установление соединения сфайла и установление соединения с
нашей базой данных:нашей базой данных:
package util;package util;
import org.hibernate.cfg.Configuration;import org.hibernate.cfg.Configuration;
public class HibernateUtil {public class HibernateUtil {
    private static SessionFactory sessionFactory = null;    private static SessionFactory sessionFactory = null;
      
    static {    static {
        try {        try {
                sessionFactory = new                sessionFactory = new
Configuration().configure().buildSessionFactory();Configuration().configure().buildSessionFactory();
        } catch (Exception e) {        } catch (Exception e) {
              e.printStackTrace();              e.printStackTrace();
        }        }
    }    }
    public static SessionFactory getSessionFactory() {    public static SessionFactory getSessionFactory() {
        return sessionFactory;        return sessionFactory;
    }    }
}}
Step 7: Write the code for testing
the Hibernate example
The Data Access Object (DAO) patternThe Data Access Object (DAO) pattern
Для класса-сущности, определимДля класса-сущности, определим
интерфейсинтерфейс StudentDAOStudentDAO из пакетаиз пакета
DAODAO, содержащий набор необходимых, содержащий набор необходимых
методов:методов:
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;//удалить студента
}}
Теперь определим реализацию этогоТеперь определим реализацию этого
интерфейса в классеинтерфейса в классе SudentDAOImplSudentDAOImpl
в пакетев пакете DAO.ImplDAO.Impl::
package DAO.Impl;package DAO.Impl;
import java.sql.SQLException;import java.sql.SQLException;
import java.util.ArrayList;import java.util.ArrayList;
import java.util.List;import java.util.List;
import javax.swing.JOptionPane;import javax.swing.JOptionPane;
import org.hibernate.Session;import org.hibernate.Session;
import util.HibernateUtil;import util.HibernateUtil;
import DAO.StudentDAO;import DAO.StudentDAO;
import logic.Student;import logic.Student;
public class StudentDAOImpl implementspublic class StudentDAOImpl implements
StudentDAOStudentDAO
Давайте создадим классДавайте создадим класс FactoryFactory вв
пакетепакете DAODAO, к которому будем, к которому будем
обращаться за нашими реализациямиобращаться за нашими реализациями
DAO, от которых и будем вызыватьDAO, от которых и будем вызывать
необходимые нам методы:необходимые нам методы:
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;
      }        }  
}}
Ну вот и все! Осталось только посмотреть какНу вот и все! Осталось только посмотреть как
это работает:это работает:
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();
Теперь мы посмотрим как связать междуТеперь мы посмотрим как связать между
.собой несколько таблиц.собой несколько таблиц
Теперь база данных будет иметь такойТеперь база данных будет иметь такой
:вид:вид
//Test//Test
package logic;package logic;
import javax.persistence.Column;import javax.persistence.Column;
import javax.persistence.Entity;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;import javax.persistence.GeneratedValue;
import javax.persistence.Id;import javax.persistence.Id;
import javax.persistence.JoinTable;import javax.persistence.JoinTable;
import javax.persistence.Table;import javax.persistence.Table;
import javax.persistence.JoinColumn;import javax.persistence.JoinColumn;
importimport
org.hibernate.annotations.GenericGeneratoorg.hibernate.annotations.GenericGenerato
//Statistics//Statistics
package logic;package logic;
import javax.persistence.Column;import javax.persistence.Column;
import javax.persistence.Entity;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;import javax.persistence.GeneratedValue;
import javax.persistence.Id;import javax.persistence.Id;
import javax.persistence.Table;import javax.persistence.Table;
importimport
org.hibernate.annotations.GenericGenerator;org.hibernate.annotations.GenericGenerator;
@Entity@Entity
Осталось только показатьОсталось только показать HibernateHibernate, как эти, как эти
таблицы между собой связаны. Как этотаблицы между собой связаны. Как это
делается? Опять же с помощью аннотаций. Вделается? Опять же с помощью аннотаций. В
HibernateHibernate для этого предусмотреныдля этого предусмотрены
следующие виды аннотаций:следующие виды аннотаций:
@OneToOne@OneToOne,, @OneToMany@OneToMany,, @ManyToOne@ManyToOne,,
@ManyToMany@ManyToMany..
Например, чтобы связать таблицыНапример, чтобы связать таблицы StudentStudent ии
StatisticsStatistics связью многие к одному, следуетсвязью многие к одному, следует
добавить в классдобавить в класс StudentStudent следующей код:следующей код:
private Statistics stat;private Statistics stat;
@ManyToOne@ManyToOne
@JoinTable(name = "id")@JoinTable(name = "id")
public Statistics getStat(){public Statistics getStat(){
        return stat;        return stat;
    }    }
,Итак,Итак
,общая схема того что нужно знать,общая схема того что нужно знать
оо HibernateHibernate
.изображена ниже.изображена ниже
!Успехов!Успехов

More Related Content

What's hot

C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.Igor Shkulipa
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.Igor Shkulipa
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7Technopark
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.Igor Shkulipa
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхKirill Zotin
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon Meetups
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.Igor Shkulipa
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. DatabasesSergey Nemchinsky
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFSergey Nemchinsky
 
Полезное покрытие кода
Полезное покрытие кодаПолезное покрытие кода
Полезное покрытие кодаSQALab
 

What's hot (18)

C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
 
Клиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталяхКлиент-серверное взаимодействие под android в деталях
Клиент-серверное взаимодействие под android в деталях
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
 
JDBC
JDBCJDBC
JDBC
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Bytecode
BytecodeBytecode
Bytecode
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. Databases
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
 
Полезное покрытие кода
Полезное покрытие кодаПолезное покрытие кода
Полезное покрытие кода
 

Similar to использование Hibernate java persistence.part 1.

Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Fedor Lavrentyev
 
использование Hibernate java persistence.part 4.
использование Hibernate java persistence.part 4.использование Hibernate java persistence.part 4.
использование Hibernate java persistence.part 4.Asya Dudnik
 
Введение в maven
Введение в mavenВведение в maven
Введение в mavenDmitry Zinushin
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Методы защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходМетоды защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходPositive Hack Days
 
Java весна 2013 лекция 8
Java весна 2013 лекция 8Java весна 2013 лекция 8
Java весна 2013 лекция 8Technopark
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Java весна 2014 лекция 1
Java весна 2014 лекция 1Java весна 2014 лекция 1
Java весна 2014 лекция 1Technopark
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentAnton Kirillov
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Alexey Fyodorov
 
Загрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейЗагрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейAnton Arhipov
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Vadim Kruchkov
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest
 

Similar to использование Hibernate java persistence.part 1. (20)

Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
использование Hibernate java persistence.part 4.
использование Hibernate java persistence.part 4.использование Hibernate java persistence.part 4.
использование Hibernate java persistence.part 4.
 
Введение в maven
Введение в mavenВведение в maven
Введение в maven
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Методы защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходМетоды защиты Java-приложений и их обход
Методы защиты Java-приложений и их обход
 
Java весна 2013 лекция 8
Java весна 2013 лекция 8Java весна 2013 лекция 8
Java весна 2013 лекция 8
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Java весна 2014 лекция 1
Java весна 2014 лекция 1Java весна 2014 лекция 1
Java весна 2014 лекция 1
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application Development
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?
 
Загрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблейЗагрузчики классов в Java - коллекция граблей
Загрузчики классов в Java - коллекция граблей
 
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
Пора ли отправлять С на свалку истории? Пишем демонов на PHP с использованием...
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Jdbc in java
Jdbc in javaJdbc in java
Jdbc in java
 
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
 
Zend framework 2
Zend framework 2Zend framework 2
Zend framework 2
 

More from Asya Dudnik

Get started with docker &amp; dev ops
Get started with docker &amp; dev opsGet started with docker &amp; dev ops
Get started with docker &amp; dev opsAsya Dudnik
 
Get started with docker &amp; dev ops
Get started with docker &amp; dev opsGet started with docker &amp; dev ops
Get started with docker &amp; dev opsAsya Dudnik
 
Work with my_sql_-_database_in_java
Work with my_sql_-_database_in_javaWork with my_sql_-_database_in_java
Work with my_sql_-_database_in_javaAsya Dudnik
 
Work with xml in java
Work with xml in javaWork with xml in java
Work with xml in javaAsya Dudnik
 
Java.fundamentals
Java.fundamentalsJava.fundamentals
Java.fundamentalsAsya Dudnik
 
Data bases in pictures
Data bases in picturesData bases in pictures
Data bases in picturesAsya Dudnik
 
Hibernate&ejb3 . part3.
Hibernate&ejb3 . part3.Hibernate&ejb3 . part3.
Hibernate&ejb3 . part3.Asya Dudnik
 
использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.Asya Dudnik
 
Work with my sql database in java
Work with my sql   database in javaWork with my sql   database in java
Work with my sql database in javaAsya Dudnik
 
Java.fundamentals
Java.fundamentalsJava.fundamentals
Java.fundamentalsAsya Dudnik
 
Java fx for interface
Java fx for interfaceJava fx for interface
Java fx for interfaceAsya Dudnik
 
Java fx for interface
Java fx for interfaceJava fx for interface
Java fx for interfaceAsya Dudnik
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projectsAsya Dudnik
 
Ejb in java. part 1.
Ejb in java. part 1.Ejb in java. part 1.
Ejb in java. part 1.Asya Dudnik
 

More from Asya Dudnik (20)

Get started with docker &amp; dev ops
Get started with docker &amp; dev opsGet started with docker &amp; dev ops
Get started with docker &amp; dev ops
 
Get started with docker &amp; dev ops
Get started with docker &amp; dev opsGet started with docker &amp; dev ops
Get started with docker &amp; dev ops
 
Work with my_sql_-_database_in_java
Work with my_sql_-_database_in_javaWork with my_sql_-_database_in_java
Work with my_sql_-_database_in_java
 
Oracle database
Oracle databaseOracle database
Oracle database
 
Work with xml in java
Work with xml in javaWork with xml in java
Work with xml in java
 
Java.fundamentals
Java.fundamentalsJava.fundamentals
Java.fundamentals
 
Data bases in pictures
Data bases in picturesData bases in pictures
Data bases in pictures
 
Hibernate&ejb3 . part3.
Hibernate&ejb3 . part3.Hibernate&ejb3 . part3.
Hibernate&ejb3 . part3.
 
использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.использование Hibernate java persistence.part 2.
использование Hibernate java persistence.part 2.
 
Work with my sql database in java
Work with my sql   database in javaWork with my sql   database in java
Work with my sql database in java
 
Java.fundamentals
Java.fundamentalsJava.fundamentals
Java.fundamentals
 
Web&java. gwt
Web&java. gwtWeb&java. gwt
Web&java. gwt
 
Web&java.jsf.
Web&java.jsf.Web&java.jsf.
Web&java.jsf.
 
Web&java. jsp
Web&java. jspWeb&java. jsp
Web&java. jsp
 
Web&java. jsp
Web&java. jspWeb&java. jsp
Web&java. jsp
 
Java fx for interface
Java fx for interfaceJava fx for interface
Java fx for interface
 
Java fx for interface
Java fx for interfaceJava fx for interface
Java fx for interface
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projects
 
Threads in java
Threads in javaThreads in java
Threads in java
 
Ejb in java. part 1.
Ejb in java. part 1.Ejb in java. part 1.
Ejb in java. part 1.
 

использование Hibernate java persistence.part 1.

  • 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
  • 7. ))
  • 8. ))
  • 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)::
  • 12. importimport org.hibernate.annotations.Genericorg.hibernate.annotations.Generic Generator;Generator; @Entity@Entity @Table(name="Student")@Table(name="Student") public class Student {public class Student {            private Long id;        private Long id;         private String name;        private String name;         private Long age;    private Long age;       
  • 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 будет брать всюбудет брать всю необходимую ему информациюнеобходимую ему информацию
  • 15. <!DOCTYPE hibernate-configuration PUBLIC<!DOCTYPE hibernate-configuration PUBLIC     "-//Hibernate/Hibernate Configuration DTD    "-//Hibernate/Hibernate Configuration DTD 3.0//EN“3.0//EN“    "http://hibernate.sourceforge.net/hibernate-"http://hibernate.sourceforge.net/hibernate- configuration-3.0.dtd">configuration-3.0.dtd"> <hibernate-configuration><hibernate-configuration> <session-factory><session-factory> <property<property name="connection.driver_class">name="connection.driver_class"> oracle.jdbc.driver.OracleDriver</property>oracle.jdbc.driver.OracleDriver</property> <property<property name="connection.url">name="connection.url"> jdbc:oracle:thin:@localhost:1521:MyDB</propertjdbc:oracle:thin:@localhost:1521:MyDB</propert y>  y>  
  • 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;
  • 18. import org.hibernate.cfg.Configuration;import org.hibernate.cfg.Configuration; public class HibernateUtil {public class HibernateUtil {     private static SessionFactory sessionFactory = null;    private static SessionFactory sessionFactory = null;            static {    static {         try {        try {                 sessionFactory = new                sessionFactory = new Configuration().configure().buildSessionFactory();Configuration().configure().buildSessionFactory();         } catch (Exception e) {        } catch (Exception e) {               e.printStackTrace();              e.printStackTrace();         }        }     }    }     public static SessionFactory getSessionFactory() {    public static SessionFactory getSessionFactory() {         return sessionFactory;        return sessionFactory;     }    } }}
  • 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::
  • 22. package DAO.Impl;package DAO.Impl; import java.sql.SQLException;import java.sql.SQLException; import java.util.ArrayList;import java.util.ArrayList; import java.util.List;import java.util.List; import javax.swing.JOptionPane;import javax.swing.JOptionPane; import org.hibernate.Session;import org.hibernate.Session; import util.HibernateUtil;import util.HibernateUtil; import DAO.StudentDAO;import DAO.StudentDAO; import logic.Student;import logic.Student; public class StudentDAOImpl implementspublic class StudentDAOImpl implements StudentDAOStudentDAO
  • 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. Теперь мы посмотрим как связать междуТеперь мы посмотрим как связать между .собой несколько таблиц.собой несколько таблиц Теперь база данных будет иметь такойТеперь база данных будет иметь такой :вид:вид
  • 27. //Test//Test package logic;package logic; import javax.persistence.Column;import javax.persistence.Column; import javax.persistence.Entity;import javax.persistence.Entity; import javax.persistence.GeneratedValue;import javax.persistence.GeneratedValue; import javax.persistence.Id;import javax.persistence.Id; import javax.persistence.JoinTable;import javax.persistence.JoinTable; import javax.persistence.Table;import javax.persistence.Table; import javax.persistence.JoinColumn;import javax.persistence.JoinColumn; importimport org.hibernate.annotations.GenericGeneratoorg.hibernate.annotations.GenericGenerato
  • 28. //Statistics//Statistics package logic;package logic; import javax.persistence.Column;import javax.persistence.Column; import javax.persistence.Entity;import javax.persistence.Entity; import javax.persistence.GeneratedValue;import javax.persistence.GeneratedValue; import javax.persistence.Id;import javax.persistence.Id; import javax.persistence.Table;import javax.persistence.Table; importimport org.hibernate.annotations.GenericGenerator;org.hibernate.annotations.GenericGenerator; @Entity@Entity
  • 29. Осталось только показатьОсталось только показать HibernateHibernate, как эти, как эти таблицы между собой связаны. Как этотаблицы между собой связаны. Как это делается? Опять же с помощью аннотаций. Вделается? Опять же с помощью аннотаций. В HibernateHibernate для этого предусмотреныдля этого предусмотрены следующие виды аннотаций:следующие виды аннотаций: @OneToOne@OneToOne,, @OneToMany@OneToMany,, @ManyToOne@ManyToOne,, @ManyToMany@ManyToMany.. Например, чтобы связать таблицыНапример, чтобы связать таблицы StudentStudent ии StatisticsStatistics связью многие к одному, следуетсвязью многие к одному, следует добавить в классдобавить в класс StudentStudent следующей код:следующей код:
  • 30. private Statistics stat;private Statistics stat; @ManyToOne@ManyToOne @JoinTable(name = "id")@JoinTable(name = "id") public Statistics getStat(){public Statistics getStat(){         return stat;        return stat;     }    }
  • 31. ,Итак,Итак ,общая схема того что нужно знать,общая схема того что нужно знать оо HibernateHibernate .изображена ниже.изображена ниже
  • 32.