1 / 36

Hibernate – mapowanie baz danych

Jest to technologia pozwalająca mapować dane obiektowe na odpowiadające im struktury w bazach danych. Hibernate – mapowanie baz danych. ORM - Object-to-Relational Mapping. Jest odpowiedzią na znikomą ilość obiektowych baz danych.

asha
Download Presentation

Hibernate – mapowanie baz danych

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Jest to technologia pozwalająca mapować dane obiektowe na odpowiadające im struktury w bazach danych. Hibernate – mapowanie baz danych ORM - Object-to-Relational Mapping. Jest odpowiedzią na znikomą ilość obiektowych baz danych Hibernate pozwala na dostęp do relacyjnej bazy danych z poziomu języka Java.

  2. cechy - open source - intuicyjne mapowanie tabel na klasy (za pomocą plików xml) - mniejsza ilość kodu - prostota - możliwość korzystania z języka SQL - HQL, Criteria - narzędzia wspomagające (np. Hibernate tools)

  3. architektura W aplikacji przechowujemy obiekty, które Hibernate za pomocą plików XML przetwarza na strukturę relacyjnej bazy danych.

  4. konfiguracja Ważne pojęcia: Configuration.configure() – pierwszy krok, odnalezienie pliku konfiguracyjnego (plik pobierany z zasobów) SessionFactory – fabryka sesji pozwala na otwarcie sesji. Najczęściej wywołuje ją się w bloku statycznym. W całej aplikacji wywołuje się ją raz za pomocą metody: Configuration.buildSessionFactory() Session – sesja, pewna jednostka pracy Transaction – jeszcze mniejsza jednostka pracy (musi być zainicjalizowana sesja)

  5. hibernate.cfg.xml <hibernate-configuration> <session-factory> <property name="connection.driver_class"> org.hsqldb.jdbcDriver </property> <property name="connection.url">jdbc:hsqldb:data/tutorial</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <property name="dialect">org.hibernate.dialect.HSQLDialect </property> <property name="show_sql">true</property> <mapping resource="Class.hbm.xml"/> </session-factory> </hibernate-configuration>

  6. hibernate.cfg.xml cd. • Pola w pliku konfiguracyjnym są dosyć intuicyjne. • Najważniejsze to podanie: • sterownika, • adresu bazy • użytkownika i hasła • dialektu • klas mapujących (pliki *.hbm.xml) • show_sql – pozwala wypisać komendy na konsolę Dodatkowe opcje: <property name="hbm2ddl.auto">create</property> - przy starcie aplikacji tworzy strukturę bazy danych

  7. Mapowanie (*hbm.xml) Mapowanie polega na odwzorowaniu obiektu na dany rekord w bazie. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="p"> <class name="User" table="User"> <id name="id"><generator class="native"/></id> <property name="imie" column="IMIE" length="10" not-null="true"/> <property name="nazwisko" column="NAZWISKO" length="25" not-null="true"/> <property name= " wiek" column= " WIEK" not-null="true"/> </class> </hibernate-mapping>

  8. Hibernate – mapowanie cd. Znacznik class zawiera m. in. atrybuty name, który odpowiada klasie oraz table określający nazwę tabeli. Pomiędzy znacznikiem class znajduje się właściwe mapowanie pól klasy na odpowiadające im kolumny w bazie danych. Wymaganym znacznikiem jest id, który odpowiada za klucz główny, znaczniki property odpowiadają poszczególnym kolumną. Atrybuty znacznika property pozwalają na przykład określić rozmiar pola, możliwość przyjmowania wartości nullowych, typ złącznia itp.

  9. mapowanie – ziarno package p; public final class User { private int id; private String imie; private String nazwisko; private int wiek; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getImie() { return imie; } public void setImie(String imie) { this.imie = imie; } public String getNazwisko() { return nazwisko; } public void setNazwisko(String nazwisko) { this.nazwisko = nazwisko; } public void getWiek() { return wiek; } public void setWiek(int wiek) { this.wiek = wiek; } }

  10. Przykład public class HibernateExample { private final static SessionFactory factory; static { // 1. Inicjalizacja Hibernate Configuration cfg = new Configuration().configure(); // 2. Utworzenie fabryki sesji Hibernate factory = cfg.buildSessionFactory(); } public static void main(String[] args) { HibernateExample m = new HibernateExample(); m.simpleFunction(); }

  11. przykład cd. public void simpleFunction () { // 3. Otwarcie sesji Hibernate Session session = factory.openSession(); // 4. Rozpoczęcie transakcji Transaction tx = session.beginTransaction(); // 5. Utworzenie użytkownika User u = new User(); u.setImie("Jan"); u.setNazwisko("Nowak"); // 6. Zapisanie użytkownika w bazie danych session.save(u); // 7. Zatwierdzenie transakcji tx.commit(); // 8. Zamknięcie sesji Hibernate session.close(); } }

  12. HQL HQL jest obiektowym odpowiednikiem języka SQL rozumiejącym takie aspekty jak dziedziczenie czy polimorfizm. HQL jest wrażliwy na rozmiar liter tylko jeśli chodzi o nazwy klas bądź pól, w pozostałych przypadkach SeLeCt == SELECT Przykład: SELECT AVG(us.wiek), SUM(us.wiek), MAX(us.wiek), COUNT(us) FROM User AS us WHERE us.imie=‘Jan'

  13. Hibernate – Criteria cd. Criteria pozwalają w prosty oraz intuicyjny sposób ograniczyć liczbę zwracanych rekordów. Nie potrzeba znać dokładnie struktury języka zapytań. Wynik zapytania jest zwrócony w postaci listy. Aby ją utworzyć należy w odpowiedniej metodzie podać nazwę klasy (np. User) Criteria crit = sess.createCriteria(User.class); crit.setMaxResults(50); List users = crit.list(); List users = sess.createCriteria(User.class) .add( Restrictions.like(„nazwisko", „Now%") ) .add( Restrictions.between(„wiek", minWiek, maxWiek) ).list();

  14. Hibernate - SQL Hibernate pozwala na korzystanie również z „czystego” języka zapytań SQL. List users = sess.createSQLQuery( "SELECT {us.*} FROM user us WHERE us.wiek = 17”).list();

  15. Hibernate – prosty przykład Niezbędne biblioteki Hibernate: antlr-2.7.6rc1.jar cglib-2.1.3.jar commons-collections-2.1.1.jar commons-logging-1.0.4.jar dom4j-1.6.1.jar ehcache-1.1.jar hibernate3.jar hsqldb.jar jta.jar c3p0-0.9.0.jar

  16. Hibernate – prosty przykład Będziemy korzystać z bazy HSQL DB W projekcie należy utworzyć folder data (np. na wysokości pakietu) i otworzyć w nim linię poleceń Bazę uruchamiamy za pomoca komendy java -classpath lib/hsqldb.jar org.hsqldb.Server Należy pamiętać o zakomentowaniu następującego wpisu w hibernate.cfg.xml po pierwszym uruchomieniu aplikacji <property name="hbm2ddl.auto">create</property> Przy zmianie struktury bazy należy go z powrotem odkomentować Na koniec należy zrestartować bazę.

  17. Hibernate – prosty przykład cd.HibernateUtil.java Plik do zarządzania sesją, otwierania i zamykania fabryki package pl.lodz.p; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public final class HibernateUtil { private HibernateUtil() {} private static final SessionFactory SESSION_FACTORY; static { try { SESSION_FACTORY = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) {/* błąd inicjalizacji połączenia */ } } public static final ThreadLocal SESSION = new ThreadLocal();

  18. Hibernate – prosty przykład cd.HibernateUtil.java public static Session currentSession() throws HibernateException { Session s = (Session)SESSION.get(); if (s == null) { s = SESSION_FACTORY.openSession(); SESSION.set(s); } return s; } public static void closeSession() throws HibernateException { Session s = (Session)SESSION.get(); SESSION.set(null); if (s != null) s.close(); } }

  19. EventManager.java Plik do połączeń z bazą danych Znajdują się tam wszystkie niezbędne metody package pl.lodz.p; import java.io.Serializable; import java.util.*; import org.hibernate.*; import pl.lodz.p.User; public class EventManager {

  20. EventManager.java public long insertRecord(Object obj) throws Exception { long id = -1; Transaction tx = null; try { Session session = HibernateUtil.currentSession(); tx = session.beginTransaction(); session.save( obj ); Serializable ser = session.getIdentifier(obj); if (ser != null) id = Long.parseLong( ser.toString() ); tx.commit(); System.out.println("-> Koniec insertRecord"); } catch (Exception ex) { if (tx != null) tx.rollback(); id = -1; throw ex; } finally HibernateUtil.closeSession(); return id; }

  21. EventManager.java public Object selectRecord(Class c, String id, boolean useTx) throws Exception { Object obj = null; Transaction tx = null; try { System.out.println("- Start selectRecord"); Session session = HibernateUtil.currentSession(); if (useTx) tx = session.beginTransaction(); obj = session.get(c, new String(id)); if (useTx) tx.commit(); System.out.println("- Koniec selectRecord"); } catch (Exception ex) { if (tx != null) tx.rollback(); throw ex; } finally { HibernateUtil.closeSession(); } return obj; }

  22. EventManager.java public List selectRecords(String query, boolean useTx) throws Exception { List list = new ArrayList(); Transaction tx = null; String methodName = "selectRecords"; try { Session session = HibernateUtil.currentSession(); if (useTx) { tx = session.beginTransaction(); } Query q = session.createQuery( query ); list = q.list(); if (useTx) { tx.commit(); } System.out.println("- Koniec selectRecords list.size="+list.size()); } catch (Exception ex) { if (tx != null) { tx.rollback(); } throw ex; } finally { HibernateUtil.closeSession(); } return list; } }

  23. User.java Mapowana klasa Zawierająca akcesory private Long id; private String imie; private String nazwisko;

  24. User.hbm.xml – klasa mapowań <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="pl.lodz.p.User" table="USER"> <id name="id" column="USER_ID"> <generator class="native"/> </id> <property name="imie"/> <property name="nazwisko"/> </class> </hibernate-mapping>

  25. hibernate.cfg.xml – plik konfiguracyjny <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.bytecode.use_reflection_optimizer">false</property> <property name="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">jdbc:hsqldb:hsql://localhost</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <property name="connection.pool_size">10</property> <property name="dialect">org.hibernate.dialect.HSQLDialect</property> <property name="current_session_context_class">thread</property> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">create</property> <mapping resource="pl/lodz/p/User.hbm.xml"/> </session-factory> </hibernate-configuration>

  26. Maven Eclipse JDeveloper Narzędzia wspomogające tworzenie aplikacji JSF

  27. Maven - inteligentny system budowania aplikacji Budowa każdej aplikacji jest podobna. Składa się z folderów ze źródłami, bibliotekami, zasobami czy dokumentacją. Przy małych projektach struktura nie ma aż tak dużego znaczenia. Problem zaczyna się przy dużych aplikacjach, tu z pomocą przychodzi Maven. Maven jest kompleksowym narzędziem do budowania i zarządzania projektem. Można go nazwać standardem. Instalacja Archiwum z Maven’em należy rozpakować Ustawić zmienną środowiskową PATH na katalog z bin’em Poprawność instalacji sprawdzić wywołują polecenie mvn --version

  28. Maven - pierwsza komenda • mvn archetype:create -DgroupId=pl.lodz.p -DartifactId=example • To polecenie spowoduje utworzenie projektu o nazwie example oraz pakietu pl.lodz.p

  29. Maven – pierwsza komenda mvn archetype:create -DgroupId=pl.lodz.p -DartifactId=example To polecenie spowoduje utworzenie projektu o nazwie example oraz pakietu pl.lodz.p Zostanie również utworzony plik pom.xml. Będziemy do niego dodawać kolejne biblioteki, wykorzystywane w projekcie Wszystkie biblioteki będą przechowywane w repozytorium na dysku lokalnym w katalogu .m2 (nie trzeba powielać ilości tych samych bibliotek w przypadku kilku projektów.) Przy pierwszym uruchomieniu Maven sam ściągnie biblioteki

  30. Maven – pierwsza komenda <!– pom.xml --> <project> <modelVersion>4.0.0</modelVersion> <groupId>pl.lodz.p</groupId> <artifactId>example</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </ project>

  31. Maven – komendy mvn compile kompiluje program, a w katalogu target otrzymamy pliki wynikowe mvn install zainstalowanie bibliotek mvn clean usunięcie plików źródłowych mvn package utworzenie wynikowego jar’a lub war’a, zależnie od ustawienia w pom’ie mvn eclipse:eclipse utworzenie plików projektu pod środowisko eclipse

  32. Maven komendy cd. Czasami Maven nie będzie wstanie sam znaleźć biblioteki. Należy ją wtedy zainstalować ręcznie poleceniem: mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

  33. Maven - plugin Plugin np. pod eclipse spowoduje automatyczne dodanie do projektu wszystkich wymaganych bibliotek czy automatyczne package’owanie Pokaz instalacji pluginu: http://m2eclipse.codehaus.org/Installing_Maven_2.0_plugin_for_Eclipse.html Pokaz działania pluginu: http://m2eclipse.codehaus.org/Maven_2.0_Plugin_for_Eclipse.html

  34. FacesIDE Edycja faces-config.xml Edycja klasy ziarna Edycja nawigacji Edycja pliku JSP

  35. FacesIDE – Visual JSF Edycja JSP Nowy projekt Tworzenie klasy ziarna

  36. FacesIDE – Visual JSF Tworzenie komponentu Edycja komponentu

More Related