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



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

Programowanie wielowarstwowe i komponentowe

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Bazy danych tworzenie aplikacji bazodanowych ORM / JPA

Wprowadzenie do Doctrine ORM

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.

Gdzie jest moja tabela?

Projektowanie aplikacji z bazami danych

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

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

JPA Java Persistance API

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Kurs programowania aplikacji bazodanowych

Programowanie w języku Java WYKŁAD

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Programowanie obiektowe

Programowanie obiektowe

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

Metody dostępu do danych

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

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

Java Enterprise Edition spotkanie nr 6. przygotował Jacek Sroka. Java Persistence API

Hibernate mapowanie baz danych

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

NHibernate. Narzędzie mapowania obiektowo - relacyjnego

Metody dostępu do danych

Podstawy frameworka Spring

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

Java Persistence API - zagadnienia zaawansowane

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

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

Wzorce logiki dziedziny

Hibernate. Od Nowicjusza do Profesjonalisty. Dave Minter Jeff Linwood

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

ORM w Javie. Adam Michalik 2007

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

METODY PROGRAMOWANIA

Systemy GIS Tworzenie zapytań w bazach danych

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

DMX DMX DMX DMX: CREATE MINING STRUCTURE. Tadeusz Pankowski

Baza danych sql. 1. Wprowadzenie

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

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

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

Podstawowe wykorzystanie Hibernate

Wdrożenie do projektu

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

Paweł Rajba

Systemy baz danych Prowadzący: Adam Czyszczoń. Systemy baz danych. 1. Import bazy z MS Access do MS SQL Server 2012:

Db4o obiektowa baza danych wersja.net

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

Enterprise JavaBeans 3.0

Encje w Drupalu. Tworzenie własnych encji i ich wpływ na poprawę wydajności

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

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

Zaawansowane aplikacje internetowe - laboratorium

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Programowanie w Ruby

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

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

P o d s t a w y j ę z y k a S Q L

Zaawansowane Techniki Bazodanowe

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

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

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

Kurs programowania aplikacji bazodanowych

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Relacyjne bazy danych. Podstawy SQL

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

Programowanie w Ruby

Post-relacyjne bazy danych

Tworzenie raportów XML Publisher przy użyciu Data Templates

LINQ TO SQL w dużym skrócie jest to zintegrowany język zapytao pozwalający na mapowanie relacyjnych baz danych na model obiektowy.

Podstawowe informacje o technologii Java Persistence API - przykład

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

Indeksowanie w bazach danych

Oracle PL/SQL. Paweł Rajba.

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

Agenda. Grzegorz Wilaszek, Wojciech Krzystek

Projekt INP Instrukcja 2. Autor Dr inż. Zofia Kruczkiewicz

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

REFERAT PRACY DYPLOMOWEJ

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

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

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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.

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Przykładowa baza danych BIBLIOTEKA

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

akademia androida Składowanie danych część VI

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

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

Relacyjne bazy danych. Podstawy SQL

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

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

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

Transkrypt:

Konfiguracja i poprawne stosowanie Politechnika Wrocławska Informatyka 11 maja 2009

Agenda Wprowadzenie Konfiguracja i poprawne stosowanie 1 Wprowadzenie do ORM 2 jako framework ORM 3 Konfiguracja w projekcie 4 Poprawne korzystanie z - wzorzec DAO 5 Podstawowe mapowania 6 Zaawansowane mapowania 7 Konstruowanie zapytań w języku HQL 8 Zaawansowane zapytania 9

Agenda Wprowadzenie Konfiguracja i poprawne stosowanie 1 Wprowadzenie do ORM 2 jako framework ORM 3 Konfiguracja w projekcie 4 Poprawne korzystanie z - wzorzec DAO 5 Podstawowe mapowania 6 Zaawansowane mapowania 7 Konstruowanie zapytań w języku HQL 8 Zaawansowane zapytania 9

Agenda Wprowadzenie Konfiguracja i poprawne stosowanie 1 Wprowadzenie do ORM 2 jako framework ORM 3 Konfiguracja w projekcie 4 Poprawne korzystanie z - wzorzec DAO 5 Podstawowe mapowania 6 Zaawansowane mapowania 7 Konstruowanie zapytań w języku HQL 8 Zaawansowane zapytania 9

Agenda Wprowadzenie Konfiguracja i poprawne stosowanie 1 Wprowadzenie do ORM 2 jako framework ORM 3 Konfiguracja w projekcie 4 Poprawne korzystanie z - wzorzec DAO 5 Podstawowe mapowania 6 Zaawansowane mapowania 7 Konstruowanie zapytań w języku HQL 8 Zaawansowane zapytania 9

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Persystencja danych w aplikacjach obiektowych Persystencja danych oznacza, że żyją one dłużej niż aplikacja, która z nich korzysta. Pozwala ona na zapisanie i odtworzenie stanu całych sieci obiektów. Wybór sposobu zarządzania danymi persystentnymi jest jedną z kluczowych decyzji projektowych. W chwili obecnej najpopularniejszą technologią stosowaną do przechowywania utrwalanych danych są relacyjne bazy.

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Persystencja danych w aplikacjach obiektowych Persystencja danych oznacza, że żyją one dłużej niż aplikacja, która z nich korzysta. Pozwala ona na zapisanie i odtworzenie stanu całych sieci obiektów. Wybór sposobu zarządzania danymi persystentnymi jest jedną z kluczowych decyzji projektowych. W chwili obecnej najpopularniejszą technologią stosowaną do przechowywania utrwalanych danych są relacyjne bazy.

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Persystencja danych w aplikacjach obiektowych Persystencja danych oznacza, że żyją one dłużej niż aplikacja, która z nich korzysta. Pozwala ona na zapisanie i odtworzenie stanu całych sieci obiektów. Wybór sposobu zarządzania danymi persystentnymi jest jedną z kluczowych decyzji projektowych. W chwili obecnej najpopularniejszą technologią stosowaną do przechowywania utrwalanych danych są relacyjne bazy.

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Niezgodność paradygmatów Niezgodność paradygmatu obiektowego z paradygmatem relacyjnym (object/relational paradigm mismatch). Nowoczesne języki programowania opierają się na modelu obiektowym - dane są reprezentowane przy pomocy sieci obiektów Najpopularniejszą metodą utrwalania (persystencji) danych relacyjne bazy, w których do ich reprezentacji wykorzystywane są tabele Sprzeczność tych modeli jest przyczyną wielu problemów w procesie wytwarzania nowoczesnego oprogramowania.

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Niezgodność paradygmatów Niezgodność paradygmatu obiektowego z paradygmatem relacyjnym (object/relational paradigm mismatch). Nowoczesne języki programowania opierają się na modelu obiektowym - dane są reprezentowane przy pomocy sieci obiektów Najpopularniejszą metodą utrwalania (persystencji) danych relacyjne bazy, w których do ich reprezentacji wykorzystywane są tabele Sprzeczność tych modeli jest przyczyną wielu problemów w procesie wytwarzania nowoczesnego oprogramowania.

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Niezgodność paradygmatów Niezgodność paradygmatu obiektowego z paradygmatem relacyjnym (object/relational paradigm mismatch). Nowoczesne języki programowania opierają się na modelu obiektowym - dane są reprezentowane przy pomocy sieci obiektów Najpopularniejszą metodą utrwalania (persystencji) danych relacyjne bazy, w których do ich reprezentacji wykorzystywane są tabele Sprzeczność tych modeli jest przyczyną wielu problemów w procesie wytwarzania nowoczesnego oprogramowania.

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Niezgodność paradygmatów Niezgodność paradygmatu obiektowego z paradygmatem relacyjnym (object/relational paradigm mismatch). Nowoczesne języki programowania opierają się na modelu obiektowym - dane są reprezentowane przy pomocy sieci obiektów Najpopularniejszą metodą utrwalania (persystencji) danych relacyjne bazy, w których do ich reprezentacji wykorzystywane są tabele Sprzeczność tych modeli jest przyczyną wielu problemów w procesie wytwarzania nowoczesnego oprogramowania.

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Niezgodność paradygmatów - główne problemy Niezgodność tych paradygmatów jest przyczyną następujących problemów [1]: 1 Problem zakresu typów (ziarnistości) 2 Problem dziedziczenia i polimorfizmu 3 Problem tożsamości (identyczności) 4 Problemy powiązań (asocjacji) 5 Problem dostępu do danych

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Niezgodność paradygmatów - główne problemy Niezgodność tych paradygmatów jest przyczyną następujących problemów [1]: 1 Problem zakresu typów (ziarnistości) 2 Problem dziedziczenia i polimorfizmu 3 Problem tożsamości (identyczności) 4 Problemy powiązań (asocjacji) 5 Problem dostępu do danych

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Niezgodność paradygmatów - główne problemy Niezgodność tych paradygmatów jest przyczyną następujących problemów [1]: 1 Problem zakresu typów (ziarnistości) 2 Problem dziedziczenia i polimorfizmu 3 Problem tożsamości (identyczności) 4 Problemy powiązań (asocjacji) 5 Problem dostępu do danych

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Niezgodność paradygmatów - główne problemy Niezgodność tych paradygmatów jest przyczyną następujących problemów [1]: 1 Problem zakresu typów (ziarnistości) 2 Problem dziedziczenia i polimorfizmu 3 Problem tożsamości (identyczności) 4 Problemy powiązań (asocjacji) 5 Problem dostępu do danych

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Niezgodność paradygmatów - główne problemy Niezgodność tych paradygmatów jest przyczyną następujących problemów [1]: 1 Problem zakresu typów (ziarnistości) 2 Problem dziedziczenia i polimorfizmu 3 Problem tożsamości (identyczności) 4 Problemy powiązań (asocjacji) 5 Problem dostępu do danych

Konfiguracja i poprawne stosowanie Czym jest ORM? Wprowadzenie do ORM jako narzędzie ORM ORM (Object/Relational Mapping) jest obecnie uznawane za najlepsze rozwiązanie problemów wynikających z niezgodności paradygmatów obiektowego i relacyjnego. ORM zapewnia automatyczną i przeźroczystą persystencję obiektów w relacyjnej baze danych. ORM wykorzystuje metadane, które służą do opisywania mapowań zachodzacych między klasami a tabelami [1].

Konfiguracja i poprawne stosowanie Czym jest ORM? Wprowadzenie do ORM jako narzędzie ORM ORM (Object/Relational Mapping) jest obecnie uznawane za najlepsze rozwiązanie problemów wynikających z niezgodności paradygmatów obiektowego i relacyjnego. ORM zapewnia automatyczną i przeźroczystą persystencję obiektów w relacyjnej baze danych. ORM wykorzystuje metadane, które służą do opisywania mapowań zachodzacych między klasami a tabelami [1].

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Historia jest najpopularniejszym narzędziem wspierającym ORM. Do głównych przyczyn jego popularności możemy zaliczyć: Jest darmowy i rozwijany na licencji open source Inicjatorem i liderem projektu jest Gavin King Pierwsze wydanie zostało udostępnione w 2001 roku Najnowsze wydanie projektu ma wersję 3.3.1

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Historia jest najpopularniejszym narzędziem wspierającym ORM. Do głównych przyczyn jego popularności możemy zaliczyć: Jest darmowy i rozwijany na licencji open source Inicjatorem i liderem projektu jest Gavin King Pierwsze wydanie zostało udostępnione w 2001 roku Najnowsze wydanie projektu ma wersję 3.3.1

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Historia jest najpopularniejszym narzędziem wspierającym ORM. Do głównych przyczyn jego popularności możemy zaliczyć: Jest darmowy i rozwijany na licencji open source Inicjatorem i liderem projektu jest Gavin King Pierwsze wydanie zostało udostępnione w 2001 roku Najnowsze wydanie projektu ma wersję 3.3.1

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Historia jest najpopularniejszym narzędziem wspierającym ORM. Do głównych przyczyn jego popularności możemy zaliczyć: Jest darmowy i rozwijany na licencji open source Inicjatorem i liderem projektu jest Gavin King Pierwsze wydanie zostało udostępnione w 2001 roku Najnowsze wydanie projektu ma wersję 3.3.1

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Podział Core Annotations EntityManager Shards Validator Search Tools N

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Podział Core Annotations EntityManager Shards Validator Search Tools N

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Podział Core Annotations EntityManager Shards Validator Search Tools N

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Podział Core Annotations EntityManager Shards Validator Search Tools N

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Podział Core Annotations EntityManager Shards Validator Search Tools N

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Podział Core Annotations EntityManager Shards Validator Search Tools N

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Podział Core Annotations EntityManager Shards Validator Search Tools N

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Podział Core Annotations EntityManager Shards Validator Search Tools N

Konfiguracja i poprawne stosowanie Wprowadzenie do ORM jako narzędzie ORM Podział Core Annotations EntityManager Shards Validator Search Tools N

Konfiguracja i poprawne stosowanie Konfiguracja Poprawne stosowanie Konfiguracja w projekcie Aby móc używać w naszym projekcie, musimy dołączyć do niego m.in. następujące biblioteki: hibernate3.jar hibernate-annotations.jar hibernate-entitymanager.jar Dwie ostatnie biblioteki są niezbędne, jeżeli chcemy wykorzystywać do mapowania adnotacje.

Konfiguracja i poprawne stosowanie Konfiguracja Poprawne stosowanie Konfiguracja w projekcie Aby móc używać w naszym projekcie, musimy dołączyć do niego m.in. następujące biblioteki: hibernate3.jar hibernate-annotations.jar hibernate-entitymanager.jar Dwie ostatnie biblioteki są niezbędne, jeżeli chcemy wykorzystywać do mapowania adnotacje.

Konfiguracja i poprawne stosowanie Konfiguracja Poprawne stosowanie Konfiguracja - mapowania XML Dla każdej z klas, które chcemy poddać procesowi mapowania, tworzony jest plik o nazwie: NAZWA KLASY.hbm.xml W pliku tym znajdują się metadane, które definiują m.in. w jaki sposób ma odwzorowywać obiekty tej klasy na tabele bazodanowe. Jest on umieszczony w tym samym katalogu co plik klasy. Dane związane z konfiguracją samego umieszczamy w pliku hibernate.cfg.xml, który musi zostać umieszczony bezpośrednio w katalogu źródłowym projektu poza wszelkimi pakietami.

Konfiguracja i poprawne stosowanie Konfiguracja Poprawne stosowanie Konfiguracja - mapowania za pomocą adnotacji W przypadku wykorzystania adnotacji do wykonania mapowań nie musimy tworzyć plików hbm.xml. Adnotacje umieszczamy bezpośrednio w plikach źródłowych klasy, którą mapujemy. Dane związane z konfiguracją są tym razem zawarte w pliku persistence.xml, który musi zostać umieszczony w katalogu META-INF.

Konfiguracja i poprawne stosowanie Konfiguracja Poprawne stosowanie Wykorzystywanie dostarczanych interfejsów (a także JPA) dostarcza nam szereg klas i interfejsów, które powinniśmy wykorzystywać w operacjach związanych z persystencją danych i wymagających komunikacji z bazą danych. Do najważniejszych zaliczamy: SessionFactory (EntityManagerFactory - służy do tworzenia obiektów Session (EntityManager) Session (EntityManager) - reprezentuje poszczególną jednostkę pracy z bazą danych - służy m.in. do zapisywania i ładowania obiektów Query (Query) - API używane do tworzenia i wykonywania zapytań do bazy danych Transaction (EntityTransaction - API używane do programistycznej demarkacji transakcji

Konfiguracja i poprawne stosowanie Konfiguracja Poprawne stosowanie Wykorzystywanie dostarczanych interfejsów (a także JPA) dostarcza nam szereg klas i interfejsów, które powinniśmy wykorzystywać w operacjach związanych z persystencją danych i wymagających komunikacji z bazą danych. Do najważniejszych zaliczamy: SessionFactory (EntityManagerFactory - służy do tworzenia obiektów Session (EntityManager) Session (EntityManager) - reprezentuje poszczególną jednostkę pracy z bazą danych - służy m.in. do zapisywania i ładowania obiektów Query (Query) - API używane do tworzenia i wykonywania zapytań do bazy danych Transaction (EntityTransaction - API używane do programistycznej demarkacji transakcji

Konfiguracja i poprawne stosowanie Konfiguracja Poprawne stosowanie Wykorzystywanie dostarczanych interfejsów (a także JPA) dostarcza nam szereg klas i interfejsów, które powinniśmy wykorzystywać w operacjach związanych z persystencją danych i wymagających komunikacji z bazą danych. Do najważniejszych zaliczamy: SessionFactory (EntityManagerFactory - służy do tworzenia obiektów Session (EntityManager) Session (EntityManager) - reprezentuje poszczególną jednostkę pracy z bazą danych - służy m.in. do zapisywania i ładowania obiektów Query (Query) - API używane do tworzenia i wykonywania zapytań do bazy danych Transaction (EntityTransaction - API używane do programistycznej demarkacji transakcji

Konfiguracja i poprawne stosowanie Konfiguracja Poprawne stosowanie Wykorzystywanie dostarczanych interfejsów (a także JPA) dostarcza nam szereg klas i interfejsów, które powinniśmy wykorzystywać w operacjach związanych z persystencją danych i wymagających komunikacji z bazą danych. Do najważniejszych zaliczamy: SessionFactory (EntityManagerFactory - służy do tworzenia obiektów Session (EntityManager) Session (EntityManager) - reprezentuje poszczególną jednostkę pracy z bazą danych - służy m.in. do zapisywania i ładowania obiektów Query (Query) - API używane do tworzenia i wykonywania zapytań do bazy danych Transaction (EntityTransaction - API używane do programistycznej demarkacji transakcji

Konfiguracja i poprawne stosowanie Wykorzystywanie narzędzia hbm Konfiguracja Poprawne stosowanie dostarcza nam narzędzie, które na podstawie plików źródłowych oraz związanych z nim metadanych jest w stanie automatycznie wygenerować schemat bazy danych. Istnieje także możliwość tzw. reverse engineering - to jest wygenerowania na podstawie schematu bazy danych klas wchodzących w skład modelu dziedzinowego, plików z mapowaniami, pliku konfiguracyjnego, a nawet klas odpowiedzialnych za dostęp do danych.

Konfiguracja i poprawne stosowanie Wzorzec DAO Konfiguracja Poprawne stosowanie Wzorzec DAO - struktura [1]

Konfiguracja i poprawne stosowanie Wzorzec DAO Konfiguracja Poprawne stosowanie Ta wersja wzorca DAO wykorzystuje mechanizm wprowadzone w Java 5 - typy generyczne. Opiera się na dwóch równoległych hierarchiach dziedziczenia. Wszelka operacje wymagające komunikacji z baza danych powinny być wykonywane z wykorzystaniem odpowiednich obiektów DAO.

Konfiguracja i poprawne stosowanie Sposoby mapowania Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Deskryptor XML Adnotacje Równoważność sposobów mapowania

Konfiguracja i poprawne stosowanie Sposoby mapowania Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Deskryptor XML Adnotacje Równoważność sposobów mapowania

Konfiguracja i poprawne stosowanie Sposoby mapowania Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Deskryptor XML Adnotacje Równoważność sposobów mapowania

Konfiguracja i poprawne stosowanie Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Mapowanie zewnętrzne - deskryptor XML Zalety: Wady: Wszystkie elementy mapowania znajdują się w jednym miejscu - zmiana całego mapowania Wymaga edytora XML dla czytelności Problem z cztelnością wraz z narastaniem mapowań

Konfiguracja i poprawne stosowanie Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Mapowanie zewnętrzne - deskryptor XML Zalety: Wady: Wszystkie elementy mapowania znajdują się w jednym miejscu - zmiana całego mapowania Wymaga edytora XML dla czytelności Problem z cztelnością wraz z narastaniem mapowań

Konfiguracja i poprawne stosowanie Mapowanie adnotacjami Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Zalety: Mapowanie znajduje się tam gdzie mapowane dane Czytelność dla przeciętnego programisty Mapowanie przy polach lub getterach Wady: Adnotacje wprowadzono w Javie 1.5 Brak podpowiadania składni w IDE

Konfiguracja i poprawne stosowanie Mapowanie adnotacjami Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Zalety: Mapowanie znajduje się tam gdzie mapowane dane Czytelność dla przeciętnego programisty Mapowanie przy polach lub getterach Wady: Adnotacje wprowadzono w Javie 1.5 Brak podpowiadania składni w IDE

Konfiguracja i poprawne stosowanie Mapowanie encji Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 package...; 2 3 import javax. persistence. Entity ; 4 import javax. persistence. Table ; 5 6 @Entity 7 @Table ( name = " USERS ") 8 public class User { 9... 10 }

Konfiguracja i poprawne stosowanie Komponenty - obiekty osadzone Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Klasa osadzona: 1 package...; 2 3 import javax. persistence. Embeddable ; 4 5 @Embeddable 6 public class Address { 7... 8 }

Konfiguracja i poprawne stosowanie Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Korzystanie z obiektów osadzonych Wykorzystanie klasy osadzonej: 1 import javax. persistence. Embeddable ; 2 3 public class User { 4... 5 6 private Address shippingaddress ; 7 8 @Embedded 9 public Address getshippingaddress () { 10 return shippingaddress ; 11 } 12 13... 14 }

Konfiguracja i poprawne stosowanie Podstawowe mapowanie pola Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 import javax. persistence. Basic ; 2 3 public class User { 4... 5 6 private String email ; 7 8 @Basic 9 public String getemail () { 10 return email ; 11 } 12 13... 14 }

Konfiguracja i poprawne stosowanie Mapowanie pola nieutrwalanego Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 import javax. persistence. Transient ; 2 3 public class User { 4... 5 6 private String email ; 7 8 @Transient 9 public String getemail () { 10 return email ; 11 } 12 13... 14 }

Konfiguracja i poprawne stosowanie Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Mapowanie pola i ograniczenia UNIQUE 1 import javax. persistence. Column ; 2 3 public class User { 4... 5 6 private String username ; 7 8 @Column ( name = " USER_NAME ", 9 unique = true, nullable = false, length = 30) 10 public String getusername () { 11 return username ; 12 } 13 14... 15 }

Konfiguracja i poprawne stosowanie Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Mapowanie ograniczenia PRIMARY KEY 1 import javax. persistence. Id; 2 3 public class User { 4... 5 6 private String username ; 7 8 @Id 9 public String getusername () { 10 return username ; 11 } 12 13... 14 }

Konfiguracja i poprawne stosowanie Generowanie klucza głównego Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 import javax. persistence. GeneratedValue ; 2 import javax. persistence. GenerationType ; 3 import javax. persistence. Id; 4 5 public class Item { 6... 7 8 private Long itemid ; 9 10 @Id 11 @GeneratedValue ( strategy = GenerationType. IDENTITY ) 12 public Long getitemid () { 13 return itemid ; 14 } 15 16... 17 }

Konfiguracja i poprawne stosowanie Związek 1-1 Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 import javax. persistence. OneToOne ; 2 3 public class Item { 4... 5 6 private Bid winningbid ; 7 8 @OneToOne 9 public Bid getwinningbid () { 10 return winningbid ; 11 } 12 13... 14 }

Konfiguracja i poprawne stosowanie Związek n-1 Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 import javax. persistence. ManyToOne ; 2 3 public class Bid { 4... 5 6 private Item biddeditem ; 7 8 @ManyToOne 9 public Item getbiddeditem () { 10 return biddeditem ; 11 } 12 13... 14 }

Konfiguracja i poprawne stosowanie Związek dwukierunkowy Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 import javax. persistence. OneToMany ; 2 3 public class Item { 4... 5 6 private List <Bid > bids ; 7 8 @OneToMany ( mappedby = " biddeditem ") 9 public List <Bid > getbids () { 10 return bids ; 11 } 12 13... 14 }

Konfiguracja i poprawne stosowanie Związek n-m Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 import javax. persistence. JoinColumn ; 2 import javax. persistence. JoinTable ; 3 import javax. persistence. ManyToMany ; 4 5 public class Item { 6... 7 8 private List < Category > itemcategories ; 9 10 @ManyToMany 11 @JoinTable ( name = " CATEGORIES_ITEMS ", 12 joincolumns = @JoinColumn ( name = " ITEM_ID "), 13 inversejoincolumns = @JoinColumn ( name = " CATEGORY_NAME ") 14 ) 15 public List < Category > getitemcategories () { 16 return itemcategories ; 17 } 18 19... 20 }

Konfiguracja i poprawne stosowanie Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Związek generalizacji - klasa rozszerzana Klasa generalizująca: 1 import javax. persistence. Id; 2 import javax. persistence. Inheritance ; 3 import javax. persistence. InheritanceType ; 4 5 @Inheritance ( strategy = InheritanceType. JOINED ) 6 public class Person { 7... 8 9 private String name ; 10 11 @Id 12 public String getname () { 13 return name ; 14 } 15 16... 17 }

Konfiguracja i poprawne stosowanie Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Związek generalizacji - klasa rozszerzona Klasa generalizowana: 1 import javax. persistence. Inheritance ; 2 import javax. persistence. InheritanceType ; 3 4 @Inheritance ( strategy = InheritanceType. JOINED ) 5 public class Employee extends Person { 6... 7 }

Konfiguracja i poprawne stosowanie Usprawnienia DDL Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka pozwala na bardzo precyzyjne określenie schematu bazy danych, co jest niezbędne dla zapewnienia spójności danych i optymalizacji wydajności: Natywne typy bazy danych Nazywanie elementów schematu Tworzenie złożonych ograniczeń Zakładanie indeksów

Konfiguracja i poprawne stosowanie Usprawnienia DDL Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka pozwala na bardzo precyzyjne określenie schematu bazy danych, co jest niezbędne dla zapewnienia spójności danych i optymalizacji wydajności: Natywne typy bazy danych Nazywanie elementów schematu Tworzenie złożonych ograniczeń Zakładanie indeksów

Konfiguracja i poprawne stosowanie Usprawnienia DDL Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka pozwala na bardzo precyzyjne określenie schematu bazy danych, co jest niezbędne dla zapewnienia spójności danych i optymalizacji wydajności: Natywne typy bazy danych Nazywanie elementów schematu Tworzenie złożonych ograniczeń Zakładanie indeksów

Konfiguracja i poprawne stosowanie Usprawnienia DDL Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka pozwala na bardzo precyzyjne określenie schematu bazy danych, co jest niezbędne dla zapewnienia spójności danych i optymalizacji wydajności: Natywne typy bazy danych Nazywanie elementów schematu Tworzenie złożonych ograniczeń Zakładanie indeksów

Konfiguracja i poprawne stosowanie Usprawnienia DDL Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka pozwala na bardzo precyzyjne określenie schematu bazy danych, co jest niezbędne dla zapewnienia spójności danych i optymalizacji wydajności: Natywne typy bazy danych Nazywanie elementów schematu Tworzenie złożonych ograniczeń Zakładanie indeksów

Konfiguracja i poprawne stosowanie Natywne typy danych Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 import javax. persistence. Column ; 2 3 public class User { 4... 5 6 private String username ; 7 8 @Column ( name = " USER_NAME ", 9 columndefinition = " emailaddress (255) not null " 10 ) 11 public String getusername () { 12 return username ; 13 } 14 15... 16 }

Konfiguracja i poprawne stosowanie Złożone ograniczenie UNIQUE Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 import javax. persistence. Table ; 2 3 @Table ( 4 name = " USERS ", 5 uniqueconstraints = { 6 @UniqueConstraint ( 7 columnnames = {" FIRST_NAME ", " LAST_NAME "} 8 ) 9 } 10 ) 11 public class User { 12... 13 }

Konfiguracja i poprawne stosowanie Ograniczenie CHECK Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 @org. hibernate. annotations. Check ( 2 constraints = " PRICE < MAX_PRICE " 3 ) 4 public class Item { 5... 6 7 @Column ( name = " PRICE ") 8 @org. hibernate. annotations. Check ( constraints = " PRICE > 0") 9 private Integer price ; 10 @Column ( name = " MAX_PRICE ") 11 private Integer maxprice ; 12 13... 14 }

Konfiguracja i poprawne stosowanie Zakładanie indeksów Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka 1 @Table ( name =" ITEMS ") 2 @org. hibernate. annotations. Table ( 3 appliesto = " ITEMS ", 4 indexes = @org. hibernate. annotations. Index 5 ( 6 name = " IDX_NAME ", 7 columnnames = { " FIRST_NAME ", " LAST_NAME " } 8 ) 9 ) 10 public class User { 11... 12 }

Praktyka Wprowadzenie Konfiguracja i poprawne stosowanie Sposoby mapowania klas Mapowanie związków Usprawnienia DDL Praktyka Praktyczny przykład Mapowanie i utrwalanie w prostym modelu obiektowym reprezentującym aukcje.

Konfiguracja i poprawne stosowanie Czym jest HQL? Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL The Query Language HQL jest w pełni obiektowym językiem zapytań o składni podobnej do SQL a. W zapytaniach wykorzystuje się nazwy klas zamiast nazw tabel oraz nazwy atrybutów zamiast nazw column. JPA QL JPA QL jest ustandaryzowanym pozdzbiorem HQL.

Konfiguracja i poprawne stosowanie Czym jest HQL? Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL The Query Language HQL jest w pełni obiektowym językiem zapytań o składni podobnej do SQL a. W zapytaniach wykorzystuje się nazwy klas zamiast nazw tabel oraz nazwy atrybutów zamiast nazw column. JPA QL JPA QL jest ustandaryzowanym pozdzbiorem HQL.

Konfiguracja i poprawne stosowanie Czym jest HQL? Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL The Query Language HQL jest w pełni obiektowym językiem zapytań o składni podobnej do SQL a. W zapytaniach wykorzystuje się nazwy klas zamiast nazw tabel oraz nazwy atrybutów zamiast nazw column. JPA QL JPA QL jest ustandaryzowanym pozdzbiorem HQL.

Konfiguracja i poprawne stosowanie Czym jest HQL? Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL The Query Language HQL jest w pełni obiektowym językiem zapytań o składni podobnej do SQL a. W zapytaniach wykorzystuje się nazwy klas zamiast nazw tabel oraz nazwy atrybutów zamiast nazw column. JPA QL JPA QL jest ustandaryzowanym pozdzbiorem HQL.

Konfiguracja i poprawne stosowanie Klauzula SELECT... FROM Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL 1 /* Najprostrze zapytania w HQL u. */ 2 from Book 3 from Book book 4 from Book as book 1 /* Wygenerowany przez a SQL. */ 2 select b. BOOK_ID, b. TITLE, b. DESCRIPTION from BOOK b 1 /* Polimorfizm. */ 2 /* Zapytanie zwróci wszystkie obiekty */ 3 from java. lang. Object 4 /* Działa również dla interfejsów */ 5 from java. io. Serializable

Konfiguracja i poprawne stosowanie Klauzula SELECT... FROM Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL 1 /* Najprostrze zapytania w HQL u. */ 2 from Book 3 from Book book 4 from Book as book 1 /* Wygenerowany przez a SQL. */ 2 select b. BOOK_ID, b. TITLE, b. DESCRIPTION from BOOK b 1 /* Polimorfizm. */ 2 /* Zapytanie zwróci wszystkie obiekty */ 3 from java. lang. Object 4 /* Działa również dla interfejsów */ 5 from java. io. Serializable

Konfiguracja i poprawne stosowanie Klauzula SELECT... FROM Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL 1 /* Najprostrze zapytania w HQL u. */ 2 from Book 3 from Book book 4 from Book as book 1 /* Wygenerowany przez a SQL. */ 2 select b. BOOK_ID, b. TITLE, b. DESCRIPTION from BOOK b 1 /* Polimorfizm. */ 2 /* Zapytanie zwróci wszystkie obiekty */ 3 from java. lang. Object 4 /* Działa również dla interfejsów */ 5 from java. io. Serializable

Konfiguracja i poprawne stosowanie Klauzula WHERE Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL 1 /* Obiektowy zapis zapytań. */ 2 from Book b where b. title = 3 Java Persistence with 1 /* Wygenerowany przez a SQL. */ 2 select u. BOOK_ID, u. TITLE, u. DESCRIPTION 3 from BOOK u 4 where u. TITLE = Java Persistence with 1 /* Inne przykłady. */ 2 from Book b where b. title in ( Pro Wicket, 3 ) 3 from Book b where b. description is null 4 5 /* na zbiorach */ 6 from Category c where c. books is empty

Konfiguracja i poprawne stosowanie Klauzula WHERE Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL 1 /* Obiektowy zapis zapytań. */ 2 from Book b where b. title = 3 Java Persistence with 1 /* Wygenerowany przez a SQL. */ 2 select u. BOOK_ID, u. TITLE, u. DESCRIPTION 3 from BOOK u 4 where u. TITLE = Java Persistence with 1 /* Inne przykłady. */ 2 from Book b where b. title in ( Pro Wicket, 3 ) 3 from Book b where b. description is null 4 5 /* na zbiorach */ 6 from Category c where c. books is empty

Konfiguracja i poprawne stosowanie Klauzula WHERE Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL 1 /* Obiektowy zapis zapytań. */ 2 from Book b where b. title = 3 Java Persistence with 1 /* Wygenerowany przez a SQL. */ 2 select u. BOOK_ID, u. TITLE, u. DESCRIPTION 3 from BOOK u 4 where u. TITLE = Java Persistence with 1 /* Inne przykłady. */ 2 from Book b where b. title in ( Pro Wicket, 3 ) 3 from Book b where b. description is null 4 5 /* na zbiorach */ 6 from Category c where c. books is empty

Konfiguracja i poprawne stosowanie Tworzenie zapytań Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Tworzenie obiektu Query umożliwiającego wykonanie zapytania. 1 /* Zapytanie w HQL u. */ 2 Query q1 = session. createquery ( 3 " from Book b where b. title like % Wicket % "); 4 5 /* To samo w JPA QL. */ 6 Query q2 = entitymanager. createquery ( 7 " select b from Book b where b. title like % Wicket % ");

Konfiguracja i poprawne stosowanie Tworzenie zapytań Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Tworzenie obiektu Query umożliwiającego wykonanie zapytania. 1 /* Zapytanie w HQL u. */ 2 Query q1 = session. createquery ( 3 " from Book b where b. title like % Wicket % "); 4 5 /* To samo w JPA QL. */ 6 Query q2 = entitymanager. createquery ( 7 " select b from Book b where b. title like % Wicket % ");

Konfiguracja i poprawne stosowanie Stronnicowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Możliwy jest podział wyników zwracanych przez zapytanie na strony o określonej z góry ilości elementów. 1 /* Zapytanie w HQL u, które zwraca pierwszych 10 2 obiektów, począwszy od 40. */ 3 Query q1 = session. createquery ( 4 " from Book b order by b. id asc ") 5. setfirstresult (2) 6. setmaxresults (2);

Konfiguracja i poprawne stosowanie Stronnicowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Możliwy jest podział wyników zwracanych przez zapytanie na strony o określonej z góry ilości elementów. 1 /* Zapytanie w HQL u, które zwraca pierwszych 10 2 obiektów, począwszy od 40. */ 3 Query q1 = session. createquery ( 4 " from Book b order by b. id asc ") 5. setfirstresult (2) 6. setmaxresults (2);

Konfiguracja i poprawne stosowanie Parametry w zapytaniach Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL 1 /* Kod wrażliwy na SQL Injection */ 2 String qstring = 3 " from Book b "+ 4 " where b. title like " + search +" "; 5 List result = session. createquery ( qstring ). list (); 1 /* Zapytanie HQL korzystające z parametrów. */ 2 String qstring = " from Book b" 3 + " where b. title like : tit " 4 + " and b. category. name like : cat "; 5 6 Query q = session. createquery ( qstring ) 7. setstring (" tit ", "% %") 8. setdate (" cat ", "C%");

Konfiguracja i poprawne stosowanie Parametry w zapytaniach Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL 1 /* Kod wrażliwy na SQL Injection */ 2 String qstring = 3 " from Book b "+ 4 " where b. title like " + search +" "; 5 List result = session. createquery ( qstring ). list (); 1 /* Zapytanie HQL korzystające z parametrów. */ 2 String qstring = " from Book b" 3 + " where b. title like : tit " 4 + " and b. category. name like : cat "; 5 6 Query q = session. createquery ( qstring ) 7. setstring (" tit ", "% %") 8. setdate (" cat ", "C%");

Konfiguracja i poprawne stosowanie Wykonywanie zapytań Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL list() - zwraca wynik w postaci java.util.list uniqueresult() - zwraca pojedynczy wynik iterate() - zapytanie zwraca tylko klucze główne, dopiero gdy wynik jest przeglądany przy pomocy iteratora pobierane są całe obiekty scroll() - udostępnia metody takie jak: first(), last(), next(), scroll(numerwiersza), itp.

Konfiguracja i poprawne stosowanie Wykonywanie zapytań Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL list() - zwraca wynik w postaci java.util.list uniqueresult() - zwraca pojedynczy wynik iterate() - zapytanie zwraca tylko klucze główne, dopiero gdy wynik jest przeglądany przy pomocy iteratora pobierane są całe obiekty scroll() - udostępnia metody takie jak: first(), last(), next(), scroll(numerwiersza), itp.

Konfiguracja i poprawne stosowanie Wykonywanie zapytań Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL list() - zwraca wynik w postaci java.util.list uniqueresult() - zwraca pojedynczy wynik iterate() - zapytanie zwraca tylko klucze główne, dopiero gdy wynik jest przeglądany przy pomocy iteratora pobierane są całe obiekty scroll() - udostępnia metody takie jak: first(), last(), next(), scroll(numerwiersza), itp.

Konfiguracja i poprawne stosowanie Wykonywanie zapytań Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL list() - zwraca wynik w postaci java.util.list uniqueresult() - zwraca pojedynczy wynik iterate() - zapytanie zwraca tylko klucze główne, dopiero gdy wynik jest przeglądany przy pomocy iteratora pobierane są całe obiekty scroll() - udostępnia metody takie jak: first(), last(), next(), scroll(numerwiersza), itp.

Konfiguracja i poprawne stosowanie nazwane Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL nazwane umożliwiają zgrupowanie definicji wszystkich zapytań w jednym miejscu. umożliwia definiowanie zapytań nazwanych w plikach XML z mapowaniem lub przy pomocy annotacji w klasie obiektu. 1 /* Tworzenie obiektu Query z zapytania nazwanego */ 2 Query q = session. getnamedquery (" findallbooksbycategory ") 3. setstring (" cat ", "C%");

Konfiguracja i poprawne stosowanie nazwane Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL nazwane umożliwiają zgrupowanie definicji wszystkich zapytań w jednym miejscu. umożliwia definiowanie zapytań nazwanych w plikach XML z mapowaniem lub przy pomocy annotacji w klasie obiektu. 1 /* Tworzenie obiektu Query z zapytania nazwanego */ 2 Query q = session. getnamedquery (" findallbooksbycategory ") 3. setstring (" cat ", "C%");

Konfiguracja i poprawne stosowanie nazwane Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL nazwane umożliwiają zgrupowanie definicji wszystkich zapytań w jednym miejscu. umożliwia definiowanie zapytań nazwanych w plikach XML z mapowaniem lub przy pomocy annotacji w klasie obiektu. 1 /* Tworzenie obiektu Query z zapytania nazwanego */ 2 Query q = session. getnamedquery (" findallbooksbycategory ") 3. setstring (" cat ", "C%");

Konfiguracja i poprawne stosowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Definicja zapytania nazwanego w pliku XML 1 <! -- HQL lub JPA QL --> 2 <query name =" findallbooksbycategory " ><![ CDATA [ 3 from Book b where b. category. name like :cat 4 ]] ></ query > 1 <! -- natywny SQL --> 2 <sql - query name =" findallbooksbycategory " > 3 < return alias ="b" class =" Book "/><![ CDATA [ 4 select { b.*} from BOOKS b 5 join CATEGORIES c on c. CATEGORY_ID = b. CATEGORY_ID 6 where c. name like :cat 7 ]] > 8 </sql - query >

Konfiguracja i poprawne stosowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Definicja zapytania nazwanego w pliku XML 1 <! -- HQL lub JPA QL --> 2 <query name =" findallbooksbycategory " ><![ CDATA [ 3 from Book b where b. category. name like :cat 4 ]] ></ query > 1 <! -- natywny SQL --> 2 <sql - query name =" findallbooksbycategory " > 3 < return alias ="b" class =" Book "/><![ CDATA [ 4 select { b.*} from BOOKS b 5 join CATEGORIES c on c. CATEGORY_ID = b. CATEGORY_ID 6 where c. name like :cat 7 ]] > 8 </sql - query >

Konfiguracja i poprawne stosowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Definicja zapytania nazwanego przy pomocy Annotacji 1 package hello ; 2 3 import...; 4 5 @NamedQueries ({ 6 @NamedQuery ( 7 name = " findallbooksbycategory ", 8 query = 9 " select b from Book b where b. category. name like : cat " 10 ), 11... 12 }) 13 @Entity 14 @Table ( name = " BOOKS ") 15 public class book {... }

Konfiguracja i poprawne stosowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Wstęp do Query by Criteria oraz Query by Example API specyficzne dla a. Polecane do konstrukcji skomplikowanych zapytań. Umożliwiają budowę zapytań poprzez tworzenie i łączenie obiektów. HQL łatwiej dostosować do specyfiki zapytania.

Konfiguracja i poprawne stosowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Wstęp do Query by Criteria oraz Query by Example API specyficzne dla a. Polecane do konstrukcji skomplikowanych zapytań. Umożliwiają budowę zapytań poprzez tworzenie i łączenie obiektów. HQL łatwiej dostosować do specyfiki zapytania.

Konfiguracja i poprawne stosowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Wstęp do Query by Criteria oraz Query by Example API specyficzne dla a. Polecane do konstrukcji skomplikowanych zapytań. Umożliwiają budowę zapytań poprzez tworzenie i łączenie obiektów. HQL łatwiej dostosować do specyfiki zapytania.

Konfiguracja i poprawne stosowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Wstęp do Query by Criteria oraz Query by Example API specyficzne dla a. Polecane do konstrukcji skomplikowanych zapytań. Umożliwiają budowę zapytań poprzez tworzenie i łączenie obiektów. HQL łatwiej dostosować do specyfiki zapytania.

Konfiguracja i poprawne stosowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Tworzenie zapytań w Query by Criteria 1 /* Najprostrze zapytanie wybierające wszystkie 2 obiekty z danej klasy. */ 3 session. createcriteria ( Category. class ); 1 /* Query by Criteria także obsługuje 2 polimorficzne zapytania. */ 3 session. createcriteria ( java. lang. Object. class ) 1 /* Nie jest wymagana otwarta sesja do stworzenia 2 zapytania. */ 3 DetachedCriteria crit = DetachedCriteria 4. forclass ( Book. class ) 5. addorder ( Order. asc (" title " )); 6 7 List items = crit. getexecutablecriteria ( session ). list ();

Konfiguracja i poprawne stosowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Tworzenie zapytań w Query by Criteria 1 /* Najprostrze zapytanie wybierające wszystkie 2 obiekty z danej klasy. */ 3 session. createcriteria ( Category. class ); 1 /* Query by Criteria także obsługuje 2 polimorficzne zapytania. */ 3 session. createcriteria ( java. lang. Object. class ) 1 /* Nie jest wymagana otwarta sesja do stworzenia 2 zapytania. */ 3 DetachedCriteria crit = DetachedCriteria 4. forclass ( Book. class ) 5. addorder ( Order. asc (" title " )); 6 7 List items = crit. getexecutablecriteria ( session ). list ();

Konfiguracja i poprawne stosowanie Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Tworzenie zapytań w Query by Criteria 1 /* Najprostrze zapytanie wybierające wszystkie 2 obiekty z danej klasy. */ 3 session. createcriteria ( Category. class ); 1 /* Query by Criteria także obsługuje 2 polimorficzne zapytania. */ 3 session. createcriteria ( java. lang. Object. class ) 1 /* Nie jest wymagana otwarta sesja do stworzenia 2 zapytania. */ 3 DetachedCriteria crit = DetachedCriteria 4. forclass ( Book. class ) 5. addorder ( Order. asc (" title " )); 6 7 List items = crit. getexecutablecriteria ( session ). list ();

Konfiguracja i poprawne stosowanie Definicja ograniczeń Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Ograniczenia definiujemy przy pomocy obiektów Criterion. Klasa Restrictions dostarcza wiele wbudowanych typów obiektów Criterion. 1 /* Wybór książki o podanym tytule. */ 2 Criterion titleeq = 3 Restrictions.eq(" title ", " Wicket in Action "); 4 Criteria criteria = session. createcriteria ( Book. class ); 5 criteria. add ( titleeq ); 6 List items = criteria. list (); 1 /* Inny przykład. */ 2 String [] titles = {" Pro Wicket ", " 3"}; 3 session. createcriteria ( Book. class ) 4. add ( Restrictions.in(" title ", titles ));

Konfiguracja i poprawne stosowanie Definicja ograniczeń Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Ograniczenia definiujemy przy pomocy obiektów Criterion. Klasa Restrictions dostarcza wiele wbudowanych typów obiektów Criterion. 1 /* Wybór książki o podanym tytule. */ 2 Criterion titleeq = 3 Restrictions.eq(" title ", " Wicket in Action "); 4 Criteria criteria = session. createcriteria ( Book. class ); 5 criteria. add ( titleeq ); 6 List items = criteria. list (); 1 /* Inny przykład. */ 2 String [] titles = {" Pro Wicket ", " 3"}; 3 session. createcriteria ( Book. class ) 4. add ( Restrictions.in(" title ", titles ));

Konfiguracja i poprawne stosowanie Definicja ograniczeń Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Ograniczenia definiujemy przy pomocy obiektów Criterion. Klasa Restrictions dostarcza wiele wbudowanych typów obiektów Criterion. 1 /* Wybór książki o podanym tytule. */ 2 Criterion titleeq = 3 Restrictions.eq(" title ", " Wicket in Action "); 4 Criteria criteria = session. createcriteria ( Book. class ); 5 criteria. add ( titleeq ); 6 List items = criteria. list (); 1 /* Inny przykład. */ 2 String [] titles = {" Pro Wicket ", " 3"}; 3 session. createcriteria ( Book. class ) 4. add ( Restrictions.in(" title ", titles ));

Konfiguracja i poprawne stosowanie Definicja ograniczeń Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL Ograniczenia definiujemy przy pomocy obiektów Criterion. Klasa Restrictions dostarcza wiele wbudowanych typów obiektów Criterion. 1 /* Wybór książki o podanym tytule. */ 2 Criterion titleeq = 3 Restrictions.eq(" title ", " Wicket in Action "); 4 Criteria criteria = session. createcriteria ( Book. class ); 5 criteria. add ( titleeq ); 6 List items = criteria. list (); 1 /* Inny przykład. */ 2 String [] titles = {" Pro Wicket ", " 3"}; 3 session. createcriteria ( Book. class ) 4. add ( Restrictions.in(" title ", titles ));

Konfiguracja i poprawne stosowanie Query by Example Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL QbE jest częścią Criteria API. Dostarczamy instancję obiektu, która ma uzupełnione pewne atrybuty. Zapytanie zwróci wszystkie takie obiekty, które mają analogicznie uzupełnione dane. 1 /* Przykład. */ 2 public List findbooksbyexample ( Book b) { 3 Example ebook = 4 Example 5. create (b) 6. ignorecase () 7. excludeproperty (" description "); 8 9 return getsession (). createcriteria ( Book. class ) 10. add ( ebook ). list (); 11 }

Konfiguracja i poprawne stosowanie Query by Example Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL QbE jest częścią Criteria API. Dostarczamy instancję obiektu, która ma uzupełnione pewne atrybuty. Zapytanie zwróci wszystkie takie obiekty, które mają analogicznie uzupełnione dane. 1 /* Przykład. */ 2 public List findbooksbyexample ( Book b) { 3 Example ebook = 4 Example 5. create (b) 6. ignorecase () 7. excludeproperty (" description "); 8 9 return getsession (). createcriteria ( Book. class ) 10. add ( ebook ). list (); 11 }

Konfiguracja i poprawne stosowanie Natywne zapytania SQL Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL umożliwia nam korzystanie z natywnego SQL a. 1 /* Wszystkie itemy sprzedawane przez danego użytkownika. */ 2 List items = session. createsqlquery ( 3 " select {b.*} from BOOKS b" 4 +" join CATEGORIES c on c. CATEGORY_ID = b. CATEGORY_ID " 5 +" where c. NAME = : cat ") 6. addentity ("b", Book. class ) 7. setstring (" cat ", " Computer books ") 8. list ();

Konfiguracja i poprawne stosowanie Natywne zapytania SQL Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL umożliwia nam korzystanie z natywnego SQL a. 1 /* Wszystkie itemy sprzedawane przez danego użytkownika. */ 2 List items = session. createsqlquery ( 3 " select {b.*} from BOOKS b" 4 +" join CATEGORIES c on c. CATEGORY_ID = b. CATEGORY_ID " 5 +" where c. NAME = : cat ") 6. addentity ("b", Book. class ) 7. setstring (" cat ", " Computer books ") 8. list ();

Konfiguracja i poprawne stosowanie Typy użytkownika Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL jest w stanie zgadnąć typ obiektu zwracanego, gdy jest to typ wbudowany, w przeciwnym przypadku w definicji zapytania uwzględniamy klasę obiektu, który ma zostać zwrócony. 1 Properties param = new Properties (); 2 param. put (" enumclassname ", " hello. Rating "); 3 4 session. createsqlquery ( 5 " select b. RATING as rating " 6 + " from BOOKS b" 7 + " where b. TITLE = : tit ") 8. addscalar (" rating ", 9. custom ( StringEnumUserType. class, param )) 10. setparameter (" tit ", " Wicket in Action ") 11. list ();

Konfiguracja i poprawne stosowanie Typy użytkownika Wstęp do HQL a Standardowe kwerendy w języku HQL nazwane Query by Criteria Query by Example Natywne zapytania SQL jest w stanie zgadnąć typ obiektu zwracanego, gdy jest to typ wbudowany, w przeciwnym przypadku w definicji zapytania uwzględniamy klasę obiektu, który ma zostać zwrócony. 1 Properties param = new Properties (); 2 param. put (" enumclassname ", " hello. Rating "); 3 4 session. createsqlquery ( 5 " select b. RATING as rating " 6 + " from BOOKS b" 7 + " where b. TITLE = : tit ") 8. addscalar (" rating ", 9. custom ( StringEnumUserType. class, param )) 10. setparameter (" tit ", " Wicket in Action ") 11. list ();

Konfiguracja i poprawne stosowanie Bibliografia jest jednym z najlepszych narzędzi wspierających ORM. Posiada bardzo rozbudowaną funkcjonalność, dzięki której możemy rozwiązać niemal wszystkie problemy związane z problemem persystencji danych w naszej aplikacji. Do największych zalet możemy zaliczyć: Proste mapowanie nawet zaawansowanych modeli obiektowych Uniezależnienie się od systemu zarządzania bazą danych Rozbudowany mechanizm tworzenia zapytań Możliwość automatycznej generacji schematu bazy danych Mechanizmy zwiększające efektywność - m.in. rozbudowany cache jest implementacją standardu JPA

Konfiguracja i poprawne stosowanie Bibliografia jest jednym z najlepszych narzędzi wspierających ORM. Posiada bardzo rozbudowaną funkcjonalność, dzięki której możemy rozwiązać niemal wszystkie problemy związane z problemem persystencji danych w naszej aplikacji. Do największych zalet możemy zaliczyć: Proste mapowanie nawet zaawansowanych modeli obiektowych Uniezależnienie się od systemu zarządzania bazą danych Rozbudowany mechanizm tworzenia zapytań Możliwość automatycznej generacji schematu bazy danych Mechanizmy zwiększające efektywność - m.in. rozbudowany cache jest implementacją standardu JPA