Слайд 1Использование Hibernate Java Persistence
Для студентов
старших курсов университетов
Ст.преподаватель Дудник О.А.
Слайд 2
Hibernate — библиотека для языка программирования Java — библиотека для языка программирования Java,
предназначенная для решения задач объектно-реляционного отображения (object-relational mapping — ORM — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (object-relational mapping — ORM). Она представляет собой свободное программное обеспечение — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (object-relational mapping — ORM). Она представляет собой свободное программное обеспечение с открытым исходным кодом (open source) — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (object-relational mapping — ORM). Она представляет собой свободное программное обеспечение с открытым исходным кодом (open source), распространяемое на условиях GNU Lesser General Public License.
Слайд 4Step 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.
Слайд 5STEP 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Давайте напишем небольшое приложение, использующее библиотеку Hibernate для хранения и обработки
таблицы СУБД Oracle. Для начала нам нужно скачать Hibernate.
http://hibernate.org/orm/downloads/
Также нам понадобиться скачать и установить СУБД Oracle.
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index-092322.html
Слайд 9Для просмотра базы данных
нужно установить SQL-developer
http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
, который работает только с JDK
1.6(нужно установить)
Слайд 11STEP 4
Create model class
Опишем наш класс-сущность, который будем хранить в БД(в
пакете logic):
Слайд 12import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="Student")
public class Student {
private Long id;
private String name;
private Long age;
public Student(){
name = null;
}
public Student(Student s){
name = s.getName();
}
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
@Column(name="id")
public Long getId() {
return id;
}
@Column(name="name")
public String getName(){
return name;
}
@Column(name="age")
public Long getAge(){
return age;
}
public void setId(Long i){
id = i;
}
public void setName(String s){
name = s;
}
public void setAge(Long l){
age = l;
}
}
Слайд 13Аннотации здесь используются для Mapping (сопоставление) Java классов с таблицами базы
данных. Проще говоря для того, чтобы Hibernate знал, что данный класс является сущностью, то есть объекты данного класса мы будем хранить в базе данных. Использованные здесь аннотации имеют следующий смысл:
@Entity — указывает на то, что данный класс является сущностью.
@Table — задает имя таблицы, в которой будут храниться объекты класса
@Id — обозначает поле id
@GeneratedValue и @GenericGenerator — указывает на то, как будет генерироваться id (у нас — по возрастанию)
@Column — обозначает имя колонки, соответствующей данному полю.
Слайд 14Step 5
Create hibernate.cfg file - Create the configuration file of Hibernate
framework
Теперь создадим главный конфигурационный файл hibernate.cfg.xml и помести его в папку bin нашего проекта. Из этого файла Hibernate будет брать всю необходимую ему информацию
name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@localhost:1521:MyDB
Your_Login
Your_Password
10
org.hibernate.dialect.OracleDialect
true
update
"hibernate.connection.autocommit">false
"current_session_context_class">thread
Слайд 16Параметр " hibernate.hbm2ddl.auto " устанавливаем в значение “true” для того, чтобы
объекты базы данных создавались автоматически на основе маппинга в java-hibernate проекте.
Слайд 17Step 6: Create the utility class for getting SessionFactory
Теперь создадим пакет
util, а в нем класс HibernateUtil, который будет отвечать за обработку данного xml файла и установление соединения с нашей базой данных:
package util;
Слайд 18import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory =
null;
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Слайд 19Step 7: Write the code for testing the Hibernate example
The Data
Access Object (DAO) pattern
Для класса-сущности, определим интерфейс StudentDAO из пакета DAO, содержащий набор необходимых методов:
Слайд 20package DAO;
import java.sql.SQLException;
import java.util.List;
import logic.Student;
public interface StudentDAO {
public void
addStudent(Student student) throws SQLException; //добавить студента
public void updateStudent(Student student) throws SQLException;//обновить студента
public Student getStudentById(Long id) throws SQLException; //получить стедента по id
public List getAllStudents() throws SQLException; //получить всех студентов
public void deleteStudent(Student student) throws SQLException;//удалить студента
}
Слайд 21Теперь определим реализацию этого интерфейса в классе SudentDAOImpl в пакете DAO.Impl:
Слайд 22package DAO.Impl;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.Session;
import util.HibernateUtil;
import DAO.StudentDAO;
import logic.Student;
public class
StudentDAOImpl implements StudentDAO
{
public void addStudent(Student stud) throws SQLException {
Session session = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(stud);
session.getTransaction().commit();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Ошибка I/O", JOptionPane.OK_OPTION);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
public void updateStudent(Student stud) throws SQLException {
Session session = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.update(stud);
session.getTransaction().commit();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Ошибка I/O", JOptionPane.OK_OPTION);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
public Student getStudentById(Long id) throws SQLException {
Session session = null;
Student stud = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
stud = (Student) session.load(Student.class, id);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Ошибка I/O", JOptionPane.OK_OPTION);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
return stud;
}
public List getAllStudents() throws SQLException {
Session session = null;
List studs = new ArrayList();
try {
session = HibernateUtil.getSessionFactory().openSession();
studs = session.createCriteria(Student.class).list();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Ошибка I/O", JOptionPane.OK_OPTION);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
return studs;
}
public void deleteStudent(Student stud) throws SQLException {
Session session = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.load(stud, id);
session.delete(stud);
session.getTransaction().commit();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Ошибка I/O", JOptionPane.OK_OPTION);
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
}
Слайд 23Давайте создадим класс Factory в пакете DAO, к которому будем обращаться
за нашими реализациями DAO, от которых и будем вызывать необходимые нам методы:
Слайд 24package DAO;
import DAO.Impl.StudentDAOImpl;
public class Factory {
private static StudentDAO studentDAO = null;
private static Factory instance = null;
public static synchronized Factory getInstance(){
if (instance == null){
instance = new Factory();
}
return instance;
}
public StudentDAO getStudentDAO(){
if (studentDAO == null){
studentDAO = new StudentDAOImpl();
}
return studentDAO;
}
}
Слайд 25Ну вот и все! Осталось только посмотреть как это работает:
package
main;
import java.sql.SQLException;
import java.util.List;
import logic.Student;
import DAO.Factory;
public class Main {
public static void main(String[] args) throws SQLException {
//Создадим двух студентов
Student s1 = new Student();
Student s2 = new Student();
//Проинициализируем их
s1.setName("Ivanov Ivan");
s1.setAge(21l);
s2.setName("Petrova Alisa");
s2.setAge(24l);
//Сохраним их в бд, id будут //сгенерированы автоматически
Factory.getInstance().getStudentDAO().addStudent(s1);
Factory.getInstance().getStudentDAO().addStudent(s2);
//Выведем всех студентов из бд
List studs = Factory.getInstance().getStudentDAO().getAllStudents();
System.out.println("========Все студенты=========");
for(int i = 0; i < studs.size(); ++i) {
System.out.println("Имя студента : " + studs.get(i).getName() + ", Возраст : " + studs.get(i).getAge() +", id : " + studs.get(i).getId());
System.out.println("=============================");
}
}
}
Слайд 26Итак,
общая схема того, что нужно знать
о Hibernate
изображена ниже.