Programowanie w języku Java WYKŁAD



Podobne dokumenty
Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Programowanie wielowarstwowe i komponentowe

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Metody dostępu do danych

Java Persistence API - zagadnienia zaawansowane

Podejście obiektowe do relacyjnych baz danych Hibernate.

Programowanie obiektowe

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

Projektowanie aplikacji z bazami danych

Technologie dostępu do baz danych z aplikacji Javy:

Hibernate. Od Nowicjusza do Profesjonalisty. Dave Minter Jeff Linwood

Hibernate. Adrian Gawor, Adam Klekotka, Piotr Kubisz. Technologie Biznesu Elektronicznego. 12 maja 2009

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

Gdzie jest moja tabela?

Bazy danych tworzenie aplikacji bazodanowych ORM / JPA

Tworzenie komponentów logiki biznesowej i warstwy dostępu do danych w oparciu o EJB3.0/JPA lub EJB 3.1/JPA2

Paweł Rajba

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

Kurs programowania aplikacji bazodanowych

JAVA PERSISTENCE API CZĘŚĆ 2 ASPEKTY ZAAWANSOWANE. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Hibernate mapowanie baz danych

EJB 3.0 (Enterprise JavaBeans 3.0)

Podstawy frameworka Spring

1 Wprowadzenie do J2EE

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Nowy powiew od Słońca: EJB 3.0. Copyright Piotr Kochański & Erudis,

Wprowadzenie do Doctrine ORM

JPA Java Persistance API

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

Karolina Rusin, Paweł Biczysko, Michał Olejnik. 11 maja 2009

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Metody dostępu do danych

Programowanie w języku Java WYKŁAD

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

ORM w Javie. Adam Michalik 2007

Wzorce logiki dziedziny

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Podstawowe wykorzystanie Hibernate

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Aplikacje Internetowe, Servlety, JSP i JDBC

NHibernate. Narzędzie mapowania obiektowo - relacyjnego

EJB 2.x oraz zmiany w standardzie dla EJB 3.0. Michał Stanek

Tomasz Dobek.

Analiza porównawcza technologii odwzorowania obiektowo-relacyjnego dla aplikacji Java

Oracle11g: Wprowadzenie do SQL

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2016

Kurs programowania aplikacji bazodanowych

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2013

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Enterprise JavaBeans 3.0

Programowanie obiektowe

Zasady generowania kluczy głównych Język Java Persistence Podstawowa architektura wielowarstwowych aplikacji w oparciu o wzorce oprogramowania

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

JAVA PERSISTENCE API. Wykorzystano fragmenty wykładów M. Piotrowskiego i M. Wójcika. Waldemar Korłub

Programowanie obiektowe

Dostęp do baz danych w aplikacjach Java EE

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Programowanie MorphX Ax

Technologie obiektowe

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

Wdrożenie do projektu

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Modelowanie obiektowe

Wykład 8: klasy cz. 4

LK1: Wprowadzenie do MS Access Zakładanie bazy danych i tworzenie interfejsu użytkownika

JDBC w LoXiMie. Interfejs Java Database Connectivity dla systemu LoXiM. Adam Michalik 2008

Enterprise JavaBeans

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

ODWZOROWANIE OBIEKTOWO-RELACYJNE

Wprowadzenie do baz danych

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Obsługa transakcji rozproszonych Java. Marek Wojciechowski, Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Podyplomowe Studium Informatyki w Bizniesie Wydział Matematyki i Informatyki, Uniwersytet Łódzki specjalność: Tworzenie aplikacji w środowisku Oracle

PHP: bazy danych, SQL, AJAX i JSON

22 października Akademia Górniczo-Hutnicza, Automatyka i Robotyka. Porównanie LINQ i NHibernate. Mateusz Mazur Ale o co chodzi?

Baza danych sql. 1. Wprowadzenie

4 Web Forms i ASP.NET Web Forms Programowanie Web Forms Możliwości Web Forms Przetwarzanie Web Forms...152

Wzorce dystrybucji i wspólbieżności autonomicznej

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Paweł Rajba

Programowanie w Ruby

Technologia informacyjna

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Wzorce projektowe warstwy danych

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2017

Programowanie w Javie 2. Płock, 26 luty 2014 r.

Bazy danych 2. Wykład 1

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Db4o obiektowa baza danych wersja.net

Rozdział 48 Transpers generyczna mikroarchitektura warstwy dostępu do danych 1 Wstęp

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

Transkrypt:

Programowanie w języku Java WYKŁAD dr inż. Piotr Zabawa Certyfikowany Konsultant IBM/Rational e-mail: pzabawa@pk.edu.pl www: http://www.pk.edu.pl/~pzabawa 28.04.2014

WYKŁAD 9 Trwałość w Java cz. 2 wykład o Hibernate został w znacznej części oparty o materiały nieznanego autora http://www.icis.pcz.pl/~draco/hibernate.pdf

Trwałość w Java Czym kierować się przy wyborze podejścia do trwałości? dr inż..piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Trwałość w Java Argumenty za ORM Eliminuje ręczne mapowanie w Java z SQL ResultSet do klas Java. Redukuje ilość pracy wymaganej do obsługi zmiany modelu danych w relacyjnej bazie danych lub po stronie obiektowej w apliakcji. Maksymalizuje wykorzystanie dużej biblioteki trwałości pozwalając na uniknięcie rozwijania rozwiązań problemów już rozwiązanych przez innych. Eliminuje niskopoziomowy kod JDBC i SQL. Maksymalizuje możliwość wykorzystania programowania obiektowego i modelu obiektowego. Wprowadza niezależność pomiędzy bazą danych i jej strukturą (?) Provides database and schema independence. Większość produktów ORM jest darmowa i open source owa. Wiele korporacji dostarcza wsparcia i usług dla produktów ORM. Dostarcza wysoko wydajnościowych cech, jak cache owanie oraz wyrafinowana optymalizacja operacji na bazie danych. dr inż..piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Trwałość w Java Argumenty za JPA Jest stadardem i częścią EJB3 oraz Java EE. Wiele darmowych i open source owych produktów ze wsparciem biznesowym. Przenośność pomiędzy serwerami aplikacyjnymi i produktami trwałościowymi (uniknięcie zależności od dostawcy). Użyteczna i funkcjonalna specyfikacja. Wparcie zarówno dla Java EE jak i dla Java SE. dr inż..piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Trwałość Uwzględnić mapowania: ORM (JPA, Hibernate) GRM XML projekt Spring Data Kwestia obiektowych baz danych.

Trwałość Uwzględnić architektoniczne wzorce korporacyjne: DAO (Data Access Object) DTO (Data Transfer Object) ActiveRecord Broker SDO = JDO + DTO (Service Data Object= Java Data Object+ Data Transfer Object)

Trwałość w Java Java 8 JDBC a Java 8 http://java.dzone.com/articles/adding-java-8-lambda-goodness Nawiązać do kwestii obsługi wyjątków w Java 8 w kontekście JDBC http://openjdk.java.net/projects/jdk8/features http://blog.jooq.org/tag/java-8/ http://www.oracle.com/technetwork/java/javase/tech/index-jsp- 136101.html dr inż..piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Trwałość w Java Natura problemów z dopasowaniem relacyjnych baz danych do paradygmatu obiektowego: Celem optymalizacji relacyjnych baz danych (normalizacja) jest oszczędność zasobów poprzez unikanie redundancji Celem optymalizacji kodu obiektowego jest czytelność i łatwość wprowadzania zmian Dlatego zestawienie tych dwóch światów jest trudne jest konflikt interesów. dr inż..piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Trwałość w Java Charakter niedopasowania: Granulacja inna ilość klas niż tabel Dziedziczenie nie wspierane bezpośrednio w RDB Asocjacje jednokierunkowe w Java, klucze obce w RDB Krotność asocjacji nie jest specyfikowana wprost w Java, wspierana przez klucze obce w RDB Nawigowanie po danych przechodzenie po obiektach w Java, łączenie tabel (join) w RDB dr inż..piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

JPA 2.1

JPA 2.1 JPA stanowi specyfikację mapowania obiektowo-relacyjnego i trwałości dedykowaną dla języka programowania Java. JPA 2.1 jest standardem opracowanym przez twórców języka Java w ramach inicjatywy standaryzacyjnej Java Community Process o identyfikatorze JSR 338. Wersja ta jest najnowszą, zatwierdzoną w 2013 roku, wersją standardu JPA obecnie wspieraną jedynie przez następujące produkty: Hibernate EclipseLink Data Nucleus JPA wraz z produktami stanowiącymi implementację tego standardu są łącznie nazywane ORM (Object-Relational Mapping).

JPA 2.1 ORM jest obecnie najbardziej dojrzałą koncepcją wiązania danych z relacyjnej bazy danych z obiektami w paradygmacie klasowoobiektowym. Dlatego podejście to oraz jego implementacja zostały przedstawione w ramach wykładu z Java SE. Zwykle ORM prezentuje się w ramach wykładów dopiero w kontekście Java EE, co wymaga uprzedniego zaznajomienia się z rozbudowanym systemem pojęć typowym dla Java EE. Jest to jednak całkowicie zbyteczne i stanowi zbędny balast dla osób pragnących poznać jedynie kwestię ORM. W ramach ORM wykorzystuje się adnotacje w celu powiązania klas z tabelami.

JPA 2.1 Potencjalne korzyści ze stosowania JPA: Mniej kodu Spójny model interakcji z bazą danych Wydajność Niezależność od wersji i od dostawcy serwera bazy danych (pod warunkiem nie korzystania ze specyfiki) Uniknięcie znajomości SQL

JPA 2.1 - wady Złożoność Trudniejsze do nauki Trudniejsze do debugowania Częstsza degradacja wydajnościowa Ograniczona elastyczność Trudniejsze uwzględnianie specyfiki serwerów bazodanowych

JPA 2.1 Przykład: @Entity @Table(name="USER") public class User { @Id @SequenceGenerator(name="UserSequence", sequencename="user_pk", allocationsize=1) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="usersequence") private Long id; @Column(name="USERNAME", nullable=false) private String name; @Column(name="FULL_NAME") private String fullname; }

JPA 2.1 Podstawowy interfejs przy pracy z JPA, to EntityManager: EntityManager entitymanager = entitymanagerfactory.createentitymanager(); Example example = entitymanager.find(example.class, 1L); entitymanager.close();

JPA 2.1 Adnotacje dotyczące relacji: @OneToOne @OneToMany @ManyToOne @ManyToMany

JPA 2.1 Przykład: @Entity @Table(name="ORDER") public class Order { } @ManyToOne @JoinColumn(name= CUSTOMER_ID, referencedcolumnname= ID ) private Customer customer; @Entity @Table(name="CUSTOMER") public class Customer { @OneToMany(mappedBy= customer ) private Set<Order> orders; }

JPA 2.1 Gdy JPA ładuje (fetch) encję z bazy musi wiedzieć czy załadować również encje powiązane z nią relacjami. Eager: pobranie powiązanych encji od razu, domyślne dla relacji @OneToOne i @ManyToOne Lazy: pobranie powiązanych encji w chwili sięgnięcia do nich w kodzie źródłowy, domyślne dla relacji @OneToMany i @ManyToMany @OneToMany(mappedBy= customer, fetch=fetchtype.eager) private Set<Order> orders;

JPA 2.1 Uprzednie zamknięcie obiektu EtityManager przed odwołaniem do powiązanych encji prowadzi do błędu Lazy Initialization Error.

Hibernate

Hibernate Hibernate stanowi jedną z kilku implementacji standardu JPA 2.1. Jako produkt tworzony i udostępniany jest przez organizację JBoss, która należy do firmy RedHat: http://hibernate.org/orm/

Hibernate Ze względu na fakt przedstawienia w ramach zajęć laboratoryjnych narzędzia Maven podano poniżej sposób wykorzystania Hibernate z poziomu Maven a. Repozytoria Mavena proszę sprawdzić sposób nawigowania po nich! JBoss Nexus (producenta, więc pierwsze): https://repository.jboss.org/nexus/content/groups/public/org/hibernate Maven Central (z niewielkim, kilkudniowym opóźnieniem): http://repo1.maven.org/maven2/org/hibernate/hibernate-core http://mvnrepository.com/artifact/org.hibernate SourceForge: https://sourceforge.net/projects/hibernate/files/hibernate4

Hibernate Zależność Hibernate jako produktu dla Mavena (od aktualnej wersji): <dependency> <groupid>org.hibernate</groupid> <artifactid>hibernate-core</artifactid> <version>4.3.5.final</version> </dependency>

Hibernate Zależność implementacji JPA jako części Hibernate dla Mavena (od aktualnej wersji): <dependency> <groupid>org.hibernate</groupid> <artifactid>hibernate-entitymanager</artifactid> <version>4.3.5.final</version> </dependency>

Hibernate W czasie używania nowych technologii należy mieć na względzie następujące okoliczności powodujące, że nie należy używać w projektach nie służących jedynie samokształceniu wersji najnowszych oprogramowania: Brak wsparcia przez IDE (przykładem jest brak należytego wsparcia w nowej technologii Java 8 w dostępnych obecnie środowiskach Eclipse) Brak dokumentacji dla produktów open-source (czasmi i niektórych) warto korzystać z dokumentacji do tego produktu, którego się używa w projekcie Zbyt nowe IDE brak wsparcia dla wielu innych technologii Brak wsparcia ze strony społeczności zbyt mało wykrytych i rozwiązanych problemów, których wielość jest typowa dla nowych technologii

Hibernate Hiernate jest jednym z najlepiej ocenianych frameworków do realizacji warstwy dostępu do danych (ang. persistance layer = warstwa trwałości). Zapewnia on przede wszystkim odwzorowanie/translację (ang. O/R mapping) danych pomiędzy relacyjną bazą danych a światem obiektowym. Opiera się na wykorzystaniu opisu struktury danych za pomocą języka XML, dzięki czemu można "rzutować" obiekty, stosowane w obiektowych językach programowania, takich jak Java bezpośrednio na istniejące tabele bazy danych. Zawiera też mechanizm pozwalający na inżynierię w przód (ang. forward engineering) struktury bazy danych (tabel i relacji) na podstawie klas oraz inżynierię wsteczną (ang. reverse engineering) polegającą na generowaniu kodu źródłowego klas z bazy danych o określonej strukturze.

Hibernate Dodatkowo Hibernate zwiększa wydajność operacji na bazie danych dzięki buforowaniu i minimalizacji ilości przesyłanych zapytań (por. z trybem pracy wsadowej JDBC). Jest to projekt rozwijany jako open source. Według dokumentacji celem Hibernate jest zwolnienie projektanta aplikacji z konieczności ręcznego kodowania 95% zadań związanych z zapewnieniem trwałości danych. Jedną z istotnych zalet tego rozwiązania jest zwolnienie programisty z konieczności przepisywania poszczególnych pól obiektów na pola rekordu i na odwrót.

Hibernate Struktura biblioteki: Hibernate Core - podstawowa część biblioteki, wykonująca większość pracy, Hibernate Annotations - element pozwalający zastąpić większą część konfiguracji Hibernate, budowanej do tej pory w XML, poprzez adnotacje w kodzie napisane z użyciem Javy 5. Hibernate Tools które zawierają rozmaite wtyczki (plug-ins) dla Anta oraz darmowego środowiska Eclipse IDE. Wtyczka Hibernate Tools dla Eclipse oferuje: Edytor odwzorowań (uzupełnianie i kolorowanie kodu) Konsolę Hibernate (przegląd konfiguracji, klas, itp. oraz interaktywne zapytania HQL Kreatory i generatory kodu (w tym kompletny reverse-engineering istniejącego schematu bazy danych)

Architektura ogólna Hibernate: Hibernate

Hibernate Architektura szczegółowa Hibernate została przedstawiona na następnym slajdzie

Hibernate

Hibernate Plik konfiguracyjny Hibernate może mieć jedną z dwóch postaci: Plik properties o nazwie hibernate.properties (mniej wygodne) Plik XML o nazwie hibernate.cfg.xml W czasie obsługi trwałości za pomocą mapowania obiektoworelacyjnego Hibernate wykorzystuje te informacje.

Hibernate interfejsy Interfejsy podstawowe Interfejs Session główny interfejs wykorzystywany w każdej aplikacji. Jest to lekki obiekt, często tworzony i zwalniany. Stanowi formę pośrednią pomiędzy połączeniem i transakcją. Nazywa się go czasem zarządcą trwałości. Interfejs SessionFactory po jednej instacji obiektu dla każdej bazy danych. Służy do tworzenia obiektów klasy Session. Interfejs Configuration służy do konfiguracji i uruchamiania Hibernate. Interfejs Transaction pozwala na wykorzystywanie mechanizmu transakcji i jego użycie jest opcjonalne. Interfejsy Query i Criteria służą do wysyłania zapytań i sterowania procesem ich wykonania. Można wykorzystać język HQL (Hibernate Query Language) lub natywny dla bazy danych SQL.

Hibernate interfejsy Interfejsy wywołań zwrotnych (ang. callback) Opcjonalne interfejsy umożliwiające aplikacji otrzymywanie powiadomień o zmianie stanu obiektu. Przykładem zastosowań są operacje audytowe (zapisywanie w bazie danych informacji o aktywnościach systemu softwerowego). Interfejsy Lifecycle i Validator rekacja obiektó trwałych na operacje CRUD Interfejs Interceptor oparty o koncepcję odwróconego sterowania (inversion of control) interfejs pozwalający uniknąć w obsłudze wywołań zwrotnych konieczności implementowania interfejsów Hibernate po stronie aplikacji

Hibernate stany obiektów Z perspektywy Hibernate można wyróżnić następujące trzy stany: Transient (ulotny) są to obiekty klas aplikacji nie odwzorowywanych w bazę danych, czyli takie, które nie są trwałe Persistent (trwały) są to trwałe obiekty klas encyjnych. Obiekt staje się trwały po wywołaniu na nim operacji save() z interfejsu Session następuje wtedy powiązanie go z określoną sesją. Egzemplarz obiektu trwałego może też powstać na podstawie informacji z bazy danych uzyskanych w wyniku wykonania zapytania, wyszukania identyfikatora lub przejścia do niego przez graf obiektów z innego obiektu.obiekt trwały może stać się ulotnym po wykonaniu na nim operacji delete() z interfejsu Session wtedy wiersz reprezentujący go zostaje usunięty z tabeli a obiekt odłączony od sesji. Detached (odłączony) obiekt przechodzi w ten stan po zamknięciu jego sesji za pomocą operacji close() obiektu Session. Możliwość ponownego podłączenia do sesji obiektó uzyskanych uprzednio z innej sesji w znaczącym stopniu wpływa na sposób projektowania aplikacji wielowarstwowych. Możliwość zwrócenia obiektów z jednej transakcji do warstwy wyższej (np. warstwy prezentacji) i ponowne użycie ich w innej transakcji stanowi jeden z głównych powodów popularności Hibernate. Wszystkie obiekty pobrane w trakcie trwania transakcji są niejawnie odłączane w momencie zamykania sesji lub w momencie ich serializacji (na przykład w celu przesłania do innego komputera).

Hibernate - scenariusze Przykładowy scenariusz uczynienia obiektu trwałym (zapis): SessionFactory sf = new Configuration().configure().buildSessionFactory(); Session s = sf.opensession(); Transaction tx = s.begintransaction(); Osoba o= new Osoba(); o.setimie("zbigniew"); o.setnazwisko("boniek"); s.save(o); tx.commit(); // możliwe jest wycofanie transakcji: tx.rollback()) s.close();

Hibernate - scenariusze Przykładowy scenariusz pobrania obiektu z bazy (odczyt): //Wyjątek gdy błędny klucz: Osoba o = (Osoba) s.load(osoba.class, new Long(20)); System.out.println(o.getImie()); albo: // Zwraca null gdy błędny klucz Osoba o = (Osoba) s.get(osoba.class, new Long(20)); System.out.println(o.getImie());

Hibernate - scenariusze Przykładowy scenariusz usunięcia obiektu z bazy (zapis): // obiekt stanie się ulotny,ale referencja może zostać: s.delete(o);

Hibernate - scenariusze Przykładowy scenariusz modyfikacji obiektu trwałego (zapis): o.setnazwisko("smolarek"); // jeśli zmiany mają natychmiast zostać zapisane w bazie: s.flush();

Hibernate Reguły POJO (najdogodniejsze) dla Hibernate są następujące: Metody set/get (accessor/mutator)(metody dostępowe) dla trwałych atrybutów klasy pól w tabeli, dzięki którym mamy dostęp do prywatnych pól klasy Bezargumentowy konstruktor (może być domyślny)-jest wymagany przez Hibernate do tego, aby klasa mogła być utrwalana w bazie. Identyfikator (opcjonalnie) Oprócz domyślnego konstruktora dla każdej klasy, możemy dostarczyć także konstruktor umożliwiający bezpośrednie przypisanie pól innych niż klucze podstawowe. Dzięki temu możemy stworzyć i wypełnić obiekt w jednej czynności zamiast kilku. Klasa nie może być zadeklarowana jako final Może być final, ale w pewnych przypadkach może to np. ograniczać możliwości strojenia wydajności Hibernate może wewnętrznie zarządzać identyfikatorami obiektu (ale jest to niezalecane)

Hibernate prosty przykład Klasa POJO bez adnotacji: public class Osoba { private Long id; private String imie; private String nazwisko; public Osoba() {} public void setid(long id) { this.id = id; }

Hibernate prosty przykład } public Long getld() { return id; } public void setimie(string imie) { this.imie = imie; } public String getimie() { return imie; } public void setnazwisko(string nazwisko) { this. nazwisko = nazwisko; } public String getnazwisko () { return nazwisko; }

Hibernate prosty przykład Klasa POJO z adnotacjami: @Entity @Table(name = "Osoba") public class Osoba { @Id @GeneratedValue @Column(name = "Num_osob") private Long id; @Column(name = "Imie") private String imie; @Column(name = "Nazwisko") private String nazwisko; }

Hibernate zapytania HQL Zapytania w języku HQL jest to język zorientowany obiektowo o składni podobnej do SQL odwołujący się do klas a nie do tabel. wykonanie zapytań poprzez list() - zwraca cały wynik zapytania do kolekcji w pamięci (instancje pozostają w stanie trwałym): List osoby= (List) session.createquery("from Osoba as osoba where osoba.imie= 'Zbigniew'").list(); for (int i=0; i<osoby.size(); i++) System.out.println(((Osoba)osoby.get(i)).getImie()); List osoby = (List)s.createQuery("select Osoba.id, Osoba.imie from Osoba as osoba where Osoba.nazwisko = 'Boniek'").list(); for (int i=0; i<osoby.size(); i++) { } Object [ ] tab = (Object [ ]) osoby.get(i); System.out.println(tab[0]+" "+tab[1]);

Hibernate zapytania wykonywanie zapytań poprzez iterate() - zwraca wynik w kilku zapytaniach SELECT: może być efektywniejsze od list(), gdy instancje już są w pamięci podręcznej, ale rozwiązanie to jest zazwyczaj wolniejsze. Iterator osoby = s.createquery("from Osoba as osoba where osoba.nazwisko = 'Boniek'").iterate(); while (osoby.hasnext()) { } Osoba o = (Osoba) osoby.next(); System.out.println(o.getImie());

Hibernate zapytania Pobieranie obiektów z bazy danych w przypadku zapytań join zawierających odniesienia do tabel połączonych relacjami: @OneToMany i @ManyToMany następuje leniwe pobieranie (ang. lazy fetching) rekordów z bazy w czasie pierwszego odwołania do nich @OnetoOne oraz @ManytoOne następuje natychmiastowe pobieranie (ang. Eager fetching) rekordów z bazy Oba powyższe zachowania są domyślne.

Hibernate zapytania SQL Zapytania w natywnym języku SQL dają możliwość wykorzystania specyficznych dla danego systemu konstrukcji składniowych np. CONNECT w Oracle.

Hibernate zapytania Criteria Zapytania poprzez obiekty klasy Criteria umożliwiają budowę zapytań poprzez obiektowe API

Hibernate zapytania Example Zapytania poprzez obiekty klasy Example umożliwiają wyszukiwanie danych w oparciu o przykadową instancję (mechanizm QBE QueryByExample)

Hibernate dobre praktyki Źródło: http://blog.castsoftware.com/using-hibernate-frameworks-what-arethe-best-practices/ Tworzyć wiele małych klas i odwzorowywać je (ang. map) w <component> Dla klas trwałych deklarować własności (ang. properties ) identyfikatora Identyfikować naturalne klucze Umieszczać każde odwzorowanie klasy w jej własnym pliku Ładować odwzorowania jako zasoby Rozważać eksternalizowanie stringów zapytań Nie zarządzać własnymi połączeniami JDBC Rozważać używanie własnych typów Używać ręcznie zakodowanych odwołań do JDBC w wąskich gardłach aplikacji Rozumieć flushing obiektów klasy Session

Hibernate dobre praktyki Rozważyć używanie obiektów odłączonych w aplikacjach 3-warstwowych Rozważyć używanie długich kontekstów trwałości w aplikacjach 2- warstwowych Nie traktować wyjątków jako recoverable Preferować lazy fetching dla asocjacji W ramach MVC używać otwartych sesji albo disciplined assembly phase aby uniknąć problemów z unfetched data Rozważyć uniezależnienie logiki biznesowej od Hibernate Nie używać egzotycznych odwzorowań asocjacji Preferować asocjacje dwukierunkowe UWAGA: wielość dobrych praktyk wynika z braku określenia kryterium jakości nie wiemy co kto optymalizuje ani jak zmierzyć jakość zestawu praktyk!

Hibernate Przykład wykorzystania Hibernate w aplikacji Java SE p. Klęk. W tym przykładowy plik pom

Hibernate Uruchamianie aplikacji z Hibernate - możliwości: Uzyskanie połączenia z istniejącą bazą danych przy starcie lub w trakcie działania Utworzenie bazy danych przy starcie aplikacji kwestia zainicjowania jej danymi Możliwość wykorzystania języka DDL do utworzenia bazy danych

Hibernate Praca z Hibernate w środowisku IDE na przykładzie Eclipse a.

Hibernate Materiały dodatkowe O wydajności JPA http://www.bottega.com.pl/pdf/materialy/jpa-wydajnosc.pdf

Koniec