Использование Hibernate Java Persistence Part 1 Для студентов старших курсов университетов Ст.преподаватель Дудник О.А.

Презентация:



Advertisements
Похожие презентации
Hibernate&EJB3 Studybook For students of university Author Sr.Java developer Dudnik Oxana.
Advertisements

Work with databases in Java. JDBC Tutorial for students of universities Author: Dudnik Oxana.
WORK WITH XML-files in Java Для студентов старших курсов университетов Ст.преподаватель Дудник О.А.
Test 9 Вопрос 1. public class A { private String runNow() { return "High"; } static class B extends A { public String runNow() { return "Low"; } } public.
Test 16 Вопрос 1. class Clazz { { System.out.println("non-static init"); } public static void main(String a[]) { System.out.println("main"); Clazz ob1.
Test 14 Вопрос 1. class Main { public void method() { static class One { public One() { System.out.println("From one"); } } public static void main(String...
Java Collections Framework (JCF) in Java Tutorial for students of universities Author: Oxana Dudnik.
Язык программирования Java Дмитриев Андрей Владиславович Май 2007.
Исключения в Java Макаревич Л. Г.. Исключения – это механизм взаимодействия между кодом, приведшим к ошибке, и кодом, обрабатывающим ошибку Исключение.
Test 10 Вопрос 1. public class Test implements Iterator { // 1 private List list = new ArrayList (); // 2 public void addList(T... ts) { Collections.addAll(list,
Test15 Вопрос 1. class AClass { } public class Test { public static void main (String... args) { ArrayList a = new ArrayList (); AClass aaaClass = new.
Test 17 Вопрос 1. public class TKO { public static void main(String[] args) { String s = "-"; Integer x = 343; long L343 = 343L; if (x.equals(L343)) s.
Test 5 Вопрос 1. В результате компиляции каких строк будет происходить ошибка компиляции: public class Main { public static void main(String[] args) {
Test 13 Вопрос 1. public class StringTest { public static void main(String[] arg){ test(new String[] { null });} static void test(Object[] o){System.out.print(1);}
Java Database Connectivity (JDBC). Взаимодействие СУБД с приложениями на Java JDBC предполагает, что база данных, с которой взаимодействует программа,
Практическое программирование на Java к.ф.-м.н. Козлов Дмитрий Дмитриевич Кафедра АСВК, Лаборатория Вычислительных комплексов.
Test21 Вопрос 1. public class Test { void a1(Object... i){ System.out.println("[Object... i]"); } void a1(Integer... i){ System.out.println("[Integer...
Test 12 Вопрос 1. public class Cast { public static void main (String[] args){ byte b = 128; int i = b; System.out.println(i); } } a)Во время выполнения.
Saint Petersburg, 2011 Java Lecture Generics. Quiz ArrayList lst = new ArrayList(); Collection c = lst; lst.add("one"); lst.add(two"); lst.add(three");
Test 3 Вопрос 1. 01:package test; 02: public class Test { 03: public static void main(String [] args) { 04: Test test = new Test(); 05: System.out.println(test.toString());}
Транксрипт:

Использование Hibernate Java Persistence Part 1 Для студентов старших курсов университетов Ст.преподаватель Дудник О.А.

Hibernate библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (object-relational mapping ORM). Она представляет собой свободное программное обеспечение с открытым исходным кодом (open source), распространяемое на условиях GNU Lesser General Public License. Java ORMсвободное программное обеспечение открытым исходным кодом (open source)GNU Lesser General Public LicenseJava ORMсвободное программное обеспечение открытым исходным кодом (open source)GNU Lesser 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 dataBases 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-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

Давайте напишем небольшое приложение, использующее библиотеку Hibernate для хранения и обработки таблицы СУБД Oracle. Для начала нам нужно скачать Hibernate. скачать Также нам понадобиться скачать и установить СУБД Oracle. terprise-edition/downloads/index html terprise-edition/downloads/index html

)

)

Для просмотра базы данных нужно установить SQL-developer loper-tools/sql- developer/downloads/index.html loper-tools/sql- developer/downloads/index.html, который работает только с JDK 1.6(нужно установить)

STEP 4 Create model class Опишем наш класс-сущность(entity), который будем хранить в БД(в пакете logic):

import public class Student { private Long id; private String name; private Long age; public Student(){ name = null; } public Student(Student s){ name = ment", strategy = public Long getId() { return id; public String getName(){ return name; 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; } }

Аннотации здесь используются для Mapping (сопоставление) Java классов с таблицами базы данных. Проще говоря для того, чтобы Hibernate знал, что данный класс является сущностью, то есть объекты данного класса мы будем хранить в базе данных. Использованные здесь аннотации имеют следующий указывает на то, что данный класс является задает имя таблицы, в которой будут храниться объекты обозначает поле указывает на то, как будет генерироваться id (у нас по обозначает имя колонки, соответствующей данному полю.

Step 5 Create hibernate.cfg file - Create the configuration file of Hibernate framework Теперь создадим главный конфигурационный файл hibernate.cfg.xml и помести его в папку bin нашего проекта. Из этого файла Hibernate будет брать всю необходимую ему информацию

oracle.jdbc.driver.OracleDriver oracle.jdbc.driver.OracleDriver Your_Login Your_Login Your_Password Your_Password org.hibernate.dialect.OracleDialect true org.hibernate.dialect.OracleDialect true update false false thread "current_session_context_class">thread

Параметр " hibernate.hbm2ddl.auto " устанавливаем в значение true для того, чтобы объекты базы данных создавались автоматически на основе маппинга в java-hibernate проекте. Параметр " hibernate.hbm2ddl.auto " устанавливаем в значение true для того, чтобы объекты базы данных создавались автоматически на основе маппинга в java-hibernate проекте.

Step 6: Create the utility class for getting SessionFactory Теперь создадим пакет util, а в нем класс HibernateUtil, который будет отвечать за обработку данного xml файла и установление соединения с нашей базой данных: package util;

import 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; } }

Step 7: Write the code for testing the Hibernate example The Data Access Object (DAO) pattern Для класса-сущности, определим интерфейс StudentDAO из пакета DAO, содержащий набор необходимых методов:

package 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;//удалить студента }

Теперь определим реализацию этого интерфейса в классе SudentDAOImpl в пакете DAO.Impl:

package 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().openSe ssion(); session.beginTransaction(); session.save(stud); session.getTransaction().com mit(); } catch (Exception e) { JOptionPane.showMessageDial og(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().openSe ssion(); session.beginTransaction(); session.update(stud); session.getTransaction().com mit(); } catch (Exception e) { JOptionPane.showMessageDial og(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().openSe ssion(); stud = (Student) session.load(Student.class, id); } catch (Exception e) { JOptionPane.showMessageDial og(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().openSe ssion(); studs = session.createCriteria(Student.class).list() ; } catch (Exception e) { JOptionPane.showMessageDial og(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().openSe ssion(); session.beginTransaction(); session.load(stud, id); session.delete(stud); session.getTransaction().com mit(); } catch (Exception e) { JOptionPane.showMessageDial og(null, e.getMessage(), "Ошибка I/O", JOptionPane.OK_OPTION); } finally { if (session != null && session.isOpen()) { session.close(); } } } } session.getTransaction().com mit(); } catch (Exception e) { JOptionPane.showMessageDial og(null, e.getMessage(), "Ошибка I/O", JOptionPane.OK_OPTION); } finally { if (session != null && session.isOpen()) { session.close(); } } } }

Давайте создадим класс Factory в пакете DAO, к которому будем обращаться за нашими реализациями DAO, от которых и будем вызывать необходимые нам методы:

package 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; } }

Ну вот и все! Осталось только посмотреть как это работает: 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().add Student(s1); Factory.getInstance().getStudentDAO().add Student(s2); //Выведем всех студентов из бд List studs = Factory.getInstance().getStudentDAO().getAllStu dents(); System.out.println("========Все студенты========="); for(int i = 0; i studs = Factory.getInstance().getStudentDAO().getAllStu dents(); 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("=========== =================="); } } }

Теперь мы посмотрим как связать между собой несколько таблиц. Теперь база данных будет иметь такой вид:

//Test package logic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinTable; import javax.persistence.Table; import javax.persistence.JoinColumn; import public class Test { private Long tid; private String tname; private Statistics stat; public Test(){ tname = null; } public Test(Test s){ tname = = "id") public Statistics getStat(){ return strategy = public Long getTid() { return tid; public String getTName(){ return tname; } public void setId(Long i){ tid = i; } public void setTName(String s){ tname = s; strategy = public Long getTid() { return tid; public String getTName(){ return tname; } public void setId(Long i){ tid = i; } public void setTName(String s){ tname = s; } }

//Statistics package logic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; public class Statistics { private Long stid; private Long id; private Long tid; private Set studs = new HashSet (0); private Set tests = new HashSet (0); public = "id") public Set getTests() { return tests; } package logic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; public class Statistics { private Long stid; private Long id; private Long tid; private Set studs = new HashSet (0); private Set tests = new HashSet (0); public = "id") public Set getTests() { return @GenericGenerator(name="increment", strategy = public Long getStid(){ return stid; public Long getId(){ return id; public Long getTid(){ return @GenericGenerator(name="increment", strategy = public Long getStid(){ return stid; public Long getId(){ return id; public Long getTid(){ return = "id") public Set getStuds() { return studs; } }

Осталось только показать Hibernate, как эти таблицы между собой связаны. Как это делается? Опять же с помощью аннотаций. В Hibernate для этого предусмотрены следующие Например, чтобы связать таблицы Student и Statistics связью многие к одному, следует добавить в класс Student следующей код:

private = "id") public Statistics getStat(){ return stat; }

Итак, общая схема того, что нужно знать о Hibernate изображена ниже.

Успехов!