Hibernate mapowanie baz danych



Podobne dokumenty
NHibernate Hibernate dla platformy.net. Hibernate posiada także dużą społeczność, zatem nietrudno uzyskać jakieś wsparcie w przypadku problemów.

Podejście obiektowe do relacyjnych baz danych Hibernate.

Podstawowe wykorzystanie Hibernate

Programowanie wielowarstwowe i komponentowe

Wybierz kategorię Java Web i typ projektu Web Application. Kliknij przycisk Next >.

Java i bazy danych. 1. JDBC podstawy, transakcje. 2. Mapowanie relacyjno obiektowe. Hibernate, przykład.

Metody dostępu do danych

Hibernate. 1. Wprowadzenie. 2. Uruchomienie dostarczonego przykładu. 3. Własny przykład.

Zaawansowane aplikacje internetowe - laboratorium

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Metody dostępu do danych

NHibernate. Narzędzie mapowania obiektowo - relacyjnego

Programowanie w języku Java. Bazy danych SQLite w Javie

Bazy danych tworzenie aplikacji bazodanowych ORM / JPA

Zaawansowane aplikacje WWW - laboratorium

Db4o obiektowa baza danych wersja.net

przygotował: Bazy danych Paweł Kasprowski Wersja 2006Z

Wprowadzenie do Doctrine ORM

Załącznik 1 instrukcje instalacji

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Bazy danych SQLite w Javie

Aplikacje Internetowe

Budowa aplikacji webowej w oparciu o Maven2 oraz przykłady testów jednostkowych. Wykonał Marcin Gadamer

Zaawansowane Techniki Bazodanowe

Programowanie obiektowe

SYSTEM MONITORINGU PARAMETRÓW WĘZŁÓW PRZECHOWYWANIA DANYCH DLA PROJEKTU KRAJOWY MAGAZYN DANYCH PODRĘCZNIK DEWELOPERA

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Wzorce logiki dziedziny

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wprowadzenie do narzędzia MAVEN

Klasy i obiekty cz II

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Wdrożenie do projektu

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

Załącznik 2 utworzenie projektu

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Aplikacje RMI Lab4

Ćwiczenie 1. Przygotowanie środowiska JAVA

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

KLASY, INTERFEJSY, ITP

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Załącznik 1 instrukcje instalacji

Multimedia JAVA. Historia

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

BUDOWANIE APLIKACJI. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Podstawowe informacje o technologii Java Persistence API - przykład

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Technologie dostępu do baz danych z aplikacji Javy:

Programowanie obiektowe

akademia androida Składowanie danych część VI

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Wykład 7: Pakiety i Interfejsy

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Tworzenie i wykorzystanie usług

E:\DYDAKTYKA\ZAI\ZWWW\Laboratoria\L07\Java Persistence.doc 2011-lis-24, 17:0 Zaawansowane aplikacje internetowe Laboratorium Java Persistence.

Wykład 2: Podstawy Języka

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Podstawy i języki programowania

Zaawansowane aplikacje internetowe - laboratorium Architektura Spring.

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Hibernate. Od Nowicjusza do Profesjonalisty. Dave Minter Jeff Linwood

Programowanie Obiektowe Ćwiczenie 4

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Zaawansowane Systemy Decyzyjne. Laboratorium

Programowanie obiektowe

Programowanie w Javie

Paweł Cieśla. Dokumentacja projektu

Programowanie w języku Java WYKŁAD

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Katalog książek cz. 2

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Zastosowanie komponentów EJB typu Session

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Bezpieczne uruchamianie apletów wg

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Zaawansowane aplikacje internetowe - laboratorium

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Strumieniowe bazy danych. Piotr i Paweł

Języki i metody programowania Java. Wykład 2 (część 2)

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

Transkrypt:

Hibernate mapowanie baz danych Jest to technologia pozwalająca mapować dane obiektowe na odpowiadające im struktury w bazach 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.

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)

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

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)

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>

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

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>

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.

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

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(); }

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(); } }

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'

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();

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();

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

Hibernate prosty przykład Będziemy korzystać z bazy HSQL DB W projekcie należy utworzyć folder data (np. na wysokości pakietu) otworzyć w nim linię poleceń i 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ę.

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();

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(); } }

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 {

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

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

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

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

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>

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>

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

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

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

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

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>

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

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>

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

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

FacesIDE Visual JSF Nowy projekt Edycja JSP Tworzenie klasy ziarna

FacesIDE Visual JSF Tworzenie komponentu Edycja komponentu