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

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

Metody dostępu do danych

Podejście obiektowe do relacyjnych baz danych Hibernate.

Hibernate mapowanie baz danych

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

Podstawowe wykorzystanie Hibernate

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

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

Programowanie wielowarstwowe i komponentowe

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

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

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Bazy danych SQLite w Javie

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Zaawansowane Techniki Bazodanowe

Wzorce logiki dziedziny

przygotował: Bazy danych Paweł Kasprowski Wersja 2006Z

NHibernate. Narzędzie mapowania obiektowo - relacyjnego

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

Zaawansowane aplikacje internetowe - laboratorium

Bazy danych tworzenie aplikacji bazodanowych ORM / JPA

Paweł Cieśla. Dokumentacja projektu

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Wzorce dystrybucji i wspólbieżności autonomicznej

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Język SQL, zajęcia nr 1

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Programowanie Obiektowe Ćwiczenie 4

Bartosz Jachnik - Kino

Db4o obiektowa baza danych wersja.net

Autor: Joanna Karwowska

MVC w praktyce tworzymy system artykułów. cz. 1

Relacje. 1. Modelowanie relacji. - siedem rodzajów relacji J2EE. - relacje jedno i wielokierunkowe, - relacje reprezentowane przez kolekcje.

Zaawansowane aplikacje WWW - laboratorium

Bazy Danych i Usługi Sieciowe

Relacje. 1. Modelowanie relacji. - siedem rodzajów relacji J2EE. - relacje jedno i wielokierunkowe, - relacje reprezentowane przez kolekcje.

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

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

Enterprise JavaBeans

Bazy danych i usługi sieciowe

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Enterprise JavaBeans. 1. Architektura EJB: komponenty encyjne, komponenty sesyjne, komponenty sterowane komunikatami. 2. Kontenery EJB JBoss.

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

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

akademia androida Składowanie danych część VI

Programowanie w Ruby

Wykład 05 Bazy danych

Aplikacje Internetowe

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Metody dostępu do danych

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Hibernate. Od Nowicjusza do Profesjonalisty. Dave Minter Jeff Linwood

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Java i jej wykorzystanie do tworzenia dynamicznych aplikacji Webowych

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

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

Wykład 8. SQL praca z tabelami 5

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

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

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Hurtownia Świętego Mikołaja projekt bazy danych

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

JAVA I BAZY DANYCH. MATERIAŁY:

Kurs programowania. Wykład 9. Wojciech Macyna

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Gdzie jest moja tabela?

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Aplikacje RMI Lab4

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Relacyjne bazy danych. Podstawy SQL

Bazy danych. Polecenia SQL

Bazy danych. dr inż. Arkadiusz Mirakowski

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

JAVA bazy danych. na bazie: Język Java - Podstawy Programowania - Jacek Rumiński

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

SIECI KOMPUTEROWE I BAZY DANYCH

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

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Programowanie obiektowe

BAZA DANYCH SIECI HOTELI

Metody dostępu do danych

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Programowanie obiektowe

Oracle PL/SQL. Paweł Rajba.

Bazy danych 6. Klucze obce. P. F. Góra

Programowanie obiektowe

Pakiety podprogramów Dynamiczny SQL

Katalog książek cz. 2

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

NARZĘDZIA WIZUALIZACJI

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Aspekty aktywne baz danych

Programowanie obiektowe

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

Kurs. Podstawy MySQL

Struktura drzewa w MySQL. Michał Tyszczenko

Transkrypt:

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

2 Wprowadzenie Hibernate (http://www.hibernate.org) jest narzędziem realizującym odwzorowanie obiektów Javy na odpowiednie rekordy w relacyjnej bazie danych. Hibernate uwalnia programistów od tworzenia większości kodu odpowiedzialnego za komunikację z bazą danych i pozwala się skupić na logice biznesowej tworzonej aplikacji. Ponadto biblioteka umożliwia pisanie programów w sposób niezależny od konkretnej platformy baz danych.

Uruchomienie przykładu załadować: http://www.hibernate.org/30.html i rozpakowanie archiwum, umieścić driver JDBC w podkatalogu lib, wyedytować plik etc/hibernate.properties, i ustawić parametry połączenia z bazą danych:... hibernate.dialect org.hibernate.dialect.mysqldialect #hibernate.dialect org.hibernate.dialect.mysqlinnodbdialect #hibernate.dialect org.hibernate.dialect.mysqlmyisamdialect hibernate.connection.driver_class com.mysql.jdbc.driver hibernate.connection.url jdbc:mysql://127.0.0.1/eg hibernate.connection.username root hibernate.connection.password... 3

4 Uruchomienie przykładu ustawić hibernate.show_sql=true w pliku hibernate.properties z linii komend wewnątrz katalogu hibernate wydać polecenie ant eg, przejrzeć dane pojawiające się w konsoli, przejrzeć źródła w podkatalogu eg.

5 Własny przykład contractors orders con_id con_name con_address odr_id odr_date

6 Struktura przykładu +src +data Contractor.java ContractorManager.java Contractor.hbm.xml Order.java OrderManager.java Order.hbm.xml +util HibernateUtil.java Example.java hibermate.cfg.xml log4j.properties

7 Contractor.java package data; import java.util.hashset; import java.util.set; public class Contractor { private int id; private String name; private String address; private Set orders = new HashSet(); public Contractor(){ // pusty konstruktor

8 Contractor.java public void setid(int id) { this.id = id; public int getid() { return this.id; public void setname(string name) { this.name = name; public String getname() { return this.name;

Contractor.java public void setaddress(string address) { this.address = address; public String getaddress() { return this.address; public void setorders(set orders) { this.orders = orders; public Set getorders() { return this.orders; 9

10 Contractor.hbm.xml Pliki hbm.xml służą do zdefiniowania odwzorowania relacyjno-obiektowego: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernatemapping-3.0.dtd"> <hibernate-mapping> <class name="data.contractor" table="contractors"> <id name="id" column="con_id"> </id> <generator class="native"/>

11 Contractor.hbm.xml <property name="name" column="con_name"/> <property name="address" column="con_address"/> <set name="orders" inverse="true"> <key column="con_id"/> <one-to-many class="data.order"/> </set> </class> </hibernate-mapping>

Order.java... public class Order { private int id; private Date date; private Contractor contractor; public Order(){ // pusty konstruktor public void setid(int id) { this.id = id; public int getid() { return this.id;... 12

13 Order.hbm.xml... <hibernate-mapping> <class name="data.order" table="orders"> <id name="id" column="odr_id"> </id> <generator class="native"/> <property name="date" type="date" column="odr_date"/> <many-to-one name="contractor" column="con_id" class="data.contractor" /> </class> </hibernate-mapping>

14 Struktura przykładu +src +data Contractor.java Contractor.hbm.xml Order.java Order.hbm.xml ContractorManager.java OrderManager.java +util HibernateUtil.java Example.java hibermate.cfg.xml log4j.properties

ContractorManager.java Plik ContractorManager.java zawiera definicję operacji związanych z obiektem Contractor:... public class ContractorManager { public void create(string sname, String saddress) { Session session = HibernateUtil.getSessionFactory(). getcurrentsession(); session.begintransaction(); Contractor c = new Contractor(); c.setname(sname); c.setaddress(saddress); session.save(c); session.gettransaction().commit(); 15

16 ContractorManager.java public Contractor load(int id) { Session session = HibernateUtil.getSessionFactory(). getcurrentsession(); session.begintransaction(); Contractor c = (Contractor) session.load( Contractor.class, new Integer(id)); session.gettransaction().commit(); return c;

17 HibernateUtil.java W pliku HibernateUtil.java zawarto kod inicjujący bibliotekę Hibernate. package util; import org.hibernate.sessionfactory; import org.hibernate.cfg.configuration; public class HibernateUtil { private static final SessionFactory sessionfactory;

HibernateUtil.java static { try { // inicjalizacja na podstawie konfiguracji z pliku // hibernate.cfg.xml sessionfactory = new Configuration().configure(). buildsessionfactory(); catch (Throwable ex) { System.err.println("failure " + ex); throw new ExceptionInInitializerError(ex); public static SessionFactory getsessionfactory() { return sessionfactory; 18

19 Struktura przykładu +src +data Contractor.java Contractor.hbm.xml Order.java Order.hbm.xml ContractorManager.java OrderManager.java +util HibernateUtil.java Example.java hibermate.cfg.xml log4j.properties

Example.java public class Example { public static void main(string[] args) { ContractorManager cm = new ContractorManager(); if (args[0].equals("create")) { Contractor c1, c2; cm.create("adam", "Lesna 11/3"); cm.create("tomasz", "Zielona 123/65"); cm.create("pawel", "Krotka 6"); c1 = cm.load(1); c2 = cm.load(2); OrderManager om = new OrderManager(); om.create(c1); om.create(c2); om.create(c1); 20

21 Example.java else if (args[0].equals("print")) { Order o; Session session = HibernateUtil.getSessionFactory(). GetCurrentSession(); session.begintransaction(); List l = session.createquery( "from Contractor").list(); for (int i = 0; i < l.size(); i++) { Contractor c = (Contractor) l.get(i); System.out.println("Contractor:"); System.out.println(String.valueOf(c.getId()) + ", " + String.valueOf(c.getName()) + ", " + String.valueOf(c.getAddress()));

22 Example.java for( Iterator it = c.getorders().iterator(); it.hasnext(); ){ o = (Order) it.next(); System.out.println("Order: " + String.valueOf(o.getId()) + ", " + o.getdate()); session.gettransaction().commit(); HibernateUtil.getSessionFactory().close();

Hibernate.cfg.xml Plik hibernate.cfg.xml określa konfigurację biblioteki Hibernate: <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernateconfiguration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class"> com.mysql.jdbc.driver </property> <property name="connection.url"> jdbc:mysql://localhost/example </property> 23

24 Hibernate.cfg.xml <property name="connection.username">root</property> <property name="connection.password"></property> <property name="connection.pool_size">1</property> <property name="dialect"> org.hibernate.dialect.mysqldialect </property> <property name="current_session_context_class"> thread </property> <property name="cache.provider_class"> org.hibernate.cache.nocacheprovider </property>

25 Hibernate.cfg.xml <property name="show_sql">true</property> <property name="hbm2ddl.auto">create</property> <mapping resource="data/contractor.hbm.xml"/> <mapping resource="data/order.hbm.xml"/> </session-factory> </hibernate-configuration>

26 Uruchomienie przykładu Niezbędne biblioteki: antlr.jar asm.jar asm-attrs.jars cglib.jar commons-collections.jar commons-logging.jar dom4j.jar hibernate3.jar jta.jar log4j.jar mysql-connector-java-3.1.8 pierwsze uruchomienie spowoduje utworzenie odpowiednich tabel: java -cp [biblioteki] Example create

27 Uruchomienie przykładu... 08:35:52,777 INFO Configuration:1308 - configuring from resource: /hibernate.cfg.xml... 08:35:52,924 INFO Configuration:469 - Reading mappings from resource: data/contractor.hbm.xml 08:35:53,083 INFO HbmBinder:309 - Mapping class: data.contractor -> contractors 08:35:53,144 INFO Configuration:469 - Reading mappings from resource: data/order.hbm.xml 08:35:53,207 INFO HbmBinder:309 - Mapping class: data.order -> orders... 08:35:53,329 INFO HbmBinder:2349 - Mapping collection: data.contractor.orders -> orders... 08:35:53,360 INFO DriverManagerConnectionProvider:80 - using driver: com.mysql.jdbc.driver at URL: jdbc:mysql://localhost/example 08:35:53,361 INFO DriverManagerConnectionProvider:86 - connection properties: {user=root, password=****

Uruchomienie przykładu... 08:35:55,199 DEBUG SchemaExport:301 - create table contractors (con_id integer not null auto_increment, con_name varchar(255), con_address varchar(255), primary key (con_id)) 08:35:55,205 DEBUG SchemaExport:301 - create table orders (odr_id integer not null auto_increment, odr_date date, con_id integer, primary key (odr_id)) 08:35:55,213 DEBUG SchemaExport:301 - alter table orders add index FKC3DF62E5B8CC0851 (con_id), add constraint FKC3DF62E5B8CC0851 foreign key (con_id) references contractors (con_id)... Hibernate: insert into contractors (con_name, con_address) values (?,?) Hibernate: insert into contractors (con_name, con_address) values (?,?) Hibernate: insert into contractors (con_name, con_address) values (?,?) Hibernate: insert into orders (odr_date, con_id) values (?,?) Hibernate: insert into orders (odr_date, con_id) values (?,?) Hibernate: insert into orders (odr_date, con_id) values (?,?) 08:35:55,740 INFO SessionFactoryImpl:729 - closing 08:35:55,744 INFO DriverManagerConnectionProvider:147 - cleaning up connection pool: jdbc:mysql://localhost/example 28

Drugie uruchomienie programu: Uruchomienie przykładu z pliku hibernate.cfg.xml usuwamy element: <property name="hbm2ddl.auto">create</property> java -cp [biblioteki] Example print Hibernate: select contractor0_.con_id as con1_0_, contractor0_.con_name as con2_0_, contractor0_.con_address as con3_0_ from contractors contractor0_ Contractor: 1, Adam, Lesna 11/3 Hibernate: select orders0_.con_id as con3_1_, orders0_.odr_id as odr1_1_, orders0_.odr_id as odr1_1_0_, orders0_.odr_date as odr2_1_0_, orders0_.con_id as con3_1_0_ from orders orders0_ where orders0_.con_id=? Order: 3, 2006-04-11 Order: 1, 2006-04-11 Contractor:... 29

30 Podsumowanie Hibernate jest obecnie standardem w dziedzinie ORM. Biblioteka ta jest odpowiedzialna za zarządzanie trwałymi obiektami w ramach technologii JEE. Istnieje także jej wersja dla środowiska.net.