O technologiach dla języka Java okiem Mariusza Lipińskiego lipinski.pl 20 stycznia 2009 Coś między ORM a JDBC czyli Apache iBATIS Data.

Slides:



Advertisements
Podobne prezentacje
Graficzny klient SVN graficzny klient SVN integrujący się z powłoką systemu dostępny tylko dla systemu Windows - do pobrania z
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Wzorce.
Rafał Hryniów Tomasz Pieciukiewicz
Object-Relational Mapper for PHP
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Odwzorowanie obiektowo-relacyjne
18/11/ Języki programowania 1 Piotr Górczyński Biblioteki.
Marcin Pamuła Mateusz Stefek
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
Technologie XML Mgr inż. Michał Jaros Technologie XML wykład 3.
Wycofywanie potwierdzonych transakcji
RMI I RMI-IIOP Wprowadzenie Co to jest RMI?
Model – View - Controler
PySBQL Język zapytań dla obiektowych baz danych. Aplikacje bazodanowe Główny nurt budowania aplikacji opiera się na połączeniu: SQL JDBC Java Jak wyświetlić
Data powstania: 2001 rok Autor i lider: Gavin King Najnowsza wersja: Licencja: Open Source.
Mirosław Ochodek Sponsorzy: EMF i dane EMF w plikach i bazie danych.
Eclipse jako IDE III a.
Co to jest studium przypadku?
Obsługa plików csv Do odczytu z pliku csv można użyć następującego kodu: $fp = fopen ("strony.csv","r"); $num = 0; while ($data = fgetcsv ($fp, 1000, ";"))
C++ wykład 2 ( ) Klasy i obiekty.
Wykład 8 Wojciech Pieprzyca
Wykład 5 Wojciech Pieprzyca
Modele baz danych - spojrzenie na poziom fizyczny
Spring podstawy.
Autor: Maciej Piwowarczyk
SZPIF – Harmonogram, Opis narzędzi, Schemat bazy danych
Autor: Maciej Piwowarczyk
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
Test Doubles Adam Gabryś , v1.1,
Rozwój aplikacji. To zestaw narzędzi do budowania i optymalizacji złożonych aplikacji opartych na przeglądarce. To zestaw narzędzi do budowania i optymalizacji.
SQL - Structured Query Language
Dziedziczenie Maciek Mięczakowski
Inicjalizacja i sprzątanie
JAVA.
Aplikacje bazodanowe ADO.NET PHP i MySQL
Zpiratował Rafał Kaczyński. Jest to technologia pozwalająca mapować dane obiektowe na odpowiadające im struktury w bazach danych. Hibernate pozwala na.
PL/SQL – dalsza wędrówka
Skalowanie aplikacji JPA na przykładzie Oracle TopLink Grid
Marcin nowak, Wojciech baszczyk
Programowanie strukturalne i obiektowe C++
Autor: Damian Urbańczyk
Projektowanie Aplikacji Internetowych Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska.
Piotr Czapiewski Wydział Informatyki ZUT Wykład 2.
Podstawy języka skryptów
Komendy SQL do pracy z danymi
Informatyka Stosowana – ROK II / III
Hibernate Podstawy.
XML w bazach danych.
Odwzorowania relacyjno-obiektowe Hibernate Podstawy.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
.NET i Bazy Danych Projekt: Wadim Grasza.
Konfiguracja HIBERnate, postgresQL + przykładowa aplikacja
Platforma .Net.
Wykład 3 Prowadzący: dr Paweł Drozda. Użytkownik bazy danych – osoba lub aplikacja, mająca dostęp do części danych zgromadzonych w bazie Uprawnienia –
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
BAZY DANYCH Microsoft Access Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i.
ASP.NET Kontrolki źródła danych i prezentacji danych w ASP.Net
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Politechnika Warszawska Wydział Elektryczny Kierunek: Informatyka stosowana Praca dyplomowa inżynierska Aplikacja do kontroli wydajności produkcji w.
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Strukturalny język zapytań SQL - historia
Aplikacje i usługi internetowe
PGO Interfejsy Michail Mokkas.
JavaBeans by Paweł Wąsala
Programowanie w Javie 1 Dr Robert Kowalczyk
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

O technologiach dla języka Java okiem Mariusza Lipińskiego lipinski.pl 20 stycznia 2009 Coś między ORM a JDBC czyli Apache iBATIS Data Mapper

lipinski.pl Sondaż / Ręka w górę! Kto wie co to jest Apache iBATIS Data Mapper? Kto programował z użyciem iBATISa? Kto dobrze zna iBATISa? Kto wie co to jest Hibernate? Kto programował z użyciem Hibernatea?

lipinski.pl Agenda Co to jest Apache iBATIS Data Mapper Jak wygląda projekt używający iBATISa Poznajemy iBATISa na przykładach Narzędzia dla iBATISa i wtyczki do IDE Zagadnienia zaawansowane Apache iBATIS kontra ORM Rozważania, pytania i dyskusja

lipinski.pl Agenda Co to jest Apache iBATIS Data Mapper Jak wygląda projekt używający iBATISa Poznajemy iBATISa na przykładach Narzędzia dla iBATISa i wtyczki do IDE Zagadnienia zaawansowane Apache iBATIS kontra ORM Rozważania, pytania i dyskusja

lipinski.pl Co to jest Apache iBATIS Data Mapper Strona domowa projektu to Biblioteka na licencji Apache License 2.0 Implementacja dla Javy,.NETu i Rubyego Służy do implementacji trwałości danych Używa relacyjnych baz danych a więc SQLa Nie jest to rozwiązanie klasy ORM Zapytania SQL nie są generowane automatycznie Zapytania SQL zapisujemy w pliku XML iBATIS używa odwzorowania Obiekty SQL

lipinski.pl Agenda Co to jest Apache iBATIS Data Mapper Jak wygląda projekt używający iBATISa Poznajemy iBATISa na przykładach Narzędzia dla iBATISa i wtyczki do IDE Zagadnienia zaawansowane Apache iBATIS kontra ORM Rozważania, pytania i dyskusja

lipinski.pl Jak wygląda projekt używający iBATISa Plik konfiguracyjny (config.xml) <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "

lipinski.pl Jak wygląda projekt używający iBATISa Plik mapowania (map.xml) <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" " SELECT ID as id, FIRST_NAME as firstName, FAMILY_NAME as lastName FROM PERSON WHERE ID = #value# INSERT INTO PERSON (ID, FIRST_NAME, FAMILY_NAME) VALUES (#id#, #firstName#, #lastName#) Klasa Person to JavaBean z atrybutami id, firstName oraz lastName

lipinski.pl Jak wygląda projekt używający iBATISa Konfiguracja poprzez plik.properties W pliku konfiguracyjnym (config.xml) możemy wczytać plik.properties Wartości z pliku.properties używamy poprzez składnię ${ }

lipinski.pl Jak wygląda projekt używający iBATISa Używanie iBATISa w Javie Z iBATISem komunikujemy się za pomocą instancji klasy SqlMapClient utworzonej na bazie konfiguracji z pliku XML Reader configReader = Resources.getResourceAsReader( "pl/mariuszlipinski/ibatis/config/config.xml"); SqlMapClient sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(configReader);

lipinski.pl Jak wygląda projekt używający iBATISa Wywoływanie poleceń SQL Polecenia uruchamiamy wywołując metody klasy SqlMapClient, posługując się identyfikatorem zapytania public void saveUser(User newUser) throws SQLException { Integer userId = (Integer) sqlMapClient.insert("newUser", newUser); newUser.setId(userId); } (…)

lipinski.pl Agenda Co to jest Apache iBATIS Data Mapper Jak wygląda projekt używający iBATISa Poznajemy iBATISa na przykładach Narzędzia dla iBATISa i wtyczki do IDE Zagadnienia zaawansowane Apache iBATIS kontra ORM Rozważania, pytania i dyskusja

lipinski.pl Poznajemy iBATISa na przykładach Baza danych klientów Przykład na żywo!

lipinski.pl Poznajemy iBATISa na przykładach Definiowanie poleceń SQL Polecenia SQL definiujemy używając jednego z elementów: insert, update, delete, select, procedure lub statement <statement id=statementName [parameterClass=some.class.Name] [resultClass=some.class.Name] [parameterMap=nameOfParameterMap] [resultMap=nameOfResultMap] [cacheModel=nameOfCache] [timeout=5]> // polecenie SQL

lipinski.pl Poznajemy iBATISa na przykładach Elementy parameterMap i resultMap Nie zawsze mapowanie między strukturą klas a zapytaniem SQL jest łatwe Zamiast określać parameterClass dla zapytania możemy określić parameterMap Zamiast określać resultClass możemy określić resultMap Rozbudowany przykład wraz z opisem na stronie mapowania-dla-apache.html

lipinski.pl Poznajemy iBATISa na przykładach Znaki zastrzeżone XML - CDATA Znaki specjalne z punktu widzenia XML, które chcemy umieścić w zapytaniu SQL umieszczamy w sekcji CDATA SELECT * FROM PERSON WHERE AGE ]]> #value#

lipinski.pl Poznajemy iBATISa na przykładach Zarządzanie transakcjami Zarządzanie transakcjami definiujemy w pliku konfiguracyjnym (config.xml) z użyciem elementu transactionManager Atrybut type definiuje typ zarządcy transakcji –JDBC (operacje commit() i rollback() JDBC API) –JTA –EXTERNAL (iBATIS nie obsługuje transakcji) Domyślnie iBATIS potwierdza transakcje tylko po operacjach insert, update i delete, ale można to zmienić z użyciem atrybutu commitRequired

lipinski.pl Poznajemy iBATISa na przykładach Definiowanie puli połączeń Pulę połączeń definiujemy w pliku konfiguracyjnym (config.xml) z użyciem elementu dataSource Atrybut type definiuje typ puli połączeń –SIMPLE (implementacja iBATISa) –DBCP (implementacja Jakarta DBCP) –JNDI (pula serwera aplikacyjnego)

lipinski.pl Poznajemy iBATISa na przykładach Wsparcie dla zapytań dynamicznych iBATIS umożliwia definiowanie zapytań z dynamiczną klauzulą WHERE Dynamizm jest ograniczony – dynamiczna nie może być klauzula FROM Zapiszmy zapytanie dla dynamicznego wyszukiwania obiektów klasy Person: public class Person { private String firstName; private String lastName; // nieistotne szczegóły pomijam }

lipinski.pl Poznajemy iBATISa na przykładach Przykład zapytania dynamicznego SELECT * FROM PERSON FIRSTNAME = #firstName# LASTNAME = #lastName#

lipinski.pl Poznajemy iBATISa na przykładach Warunki zapytania dynamicznego Dostępne są następujące warunki dla budowania dynamicznych zapytań : –isEqual, isNotEqual –isGreaterThan, isGreaterEqual, isLessThan, isLessEqual –isPropertyAvailable, isNotPropertyAvailable –isNull, isNotNull –isEmpty, isNotEmpty –isParameterPresent, isNotParameterPresent

lipinski.pl Agenda Co to jest Apache iBATIS Data Mapper Jak wygląda projekt używający iBATISa Poznajemy iBATISa na przykładach Narzędzia dla iBATISa i wtyczki do IDE Zagadnienia zaawansowane Apache iBATIS kontra ORM Rozważania, pytania i dyskusja

lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE iBATIS DAO Szkielet do implementacji warstwy DAO dla iBATISa Początkowo nieodłączna część iBATISa Począwszy od iBATISa 2.3 oznaczony jako Deprecated Obecnie zaleca się używanie do tego celu Springa

lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Abator (iBATOR) Strona domowa to Abator to nazwa stara a iBATOR nowa Jest to narzędzie do generowania kodu dla iBATISa –generuje pliki Java i XML na podstawie bazy danych –generuje klasy domenowe dla tabel –generuje klasy dla zapytań przez przykład –generuje klasy DAO dla Springa na bazie SqlMapClientDaoSupport dla szkieletu iBATIS DAO niezależne od technologii w wariancie SI i CI –generuje pliki odwzorowań Obiekty SQL

lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Jak się używa Abatora Trzeba stworzyć plik konfiguracyjny Uruchomić można na kilka sposobów –Z linii poleceń (java -jar abator.jar -configfile abatorConfig.xml) –Jako zadanie poprzez Anta –Programistycznie, poprzez API Wczytując plik konfiguracyjny XML Tworząc obiekt konfiguracji poprzez API (nie trzeba pliku) –Poprzez wtyczkę do naszego IDE (Eclipse, IDEA?)

lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Abator jako wtyczka do Eclipsea Instalacja ze strony

lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Abator jako wtyczka do Eclipsea - Prezentacja Prezentacja Abatora na żywo!

lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Eclibatis – wtyczka dla Eclipsea Strona domowa to Wymagana Java 5 oraz Eclipse Ganymede (3.4) Instalacja ze strony Wtyczka na licencji Apache License 2.0 Zaimplementowana przez studentów z Furtwangen w ramach zajęć Podpowiadanie identyfikatorów z XML w plikach Java Podpowiadanie w plikach XML

lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Eclibatis – wtyczka dla Eclipsea - Prezentacja Prezentacja Eclibatisa na żywo!

lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Plugin dla IntelliJ IDEA Strona domowa to Integracja z Abatorem (iBATORem) Uzupełnianie kodu w plikach Java Uzupełnianie w plikach XML Wiele innych

lipinski.pl Agenda Co to jest Apache iBATIS Data Mapper Jak wygląda projekt używający iBATISa Poznajemy iBATISa na przykładach Narzędzia dla iBATISa i wtyczki do IDE Zagadnienia zaawansowane Apache iBATIS kontra ORM Rozważania, pytania i dyskusja

lipinski.pl Zagadnienia zaawansowane Pamięć podręczna dla wyników zapytania iBATIS umożliwia definiowanie nazwanych pamięci podręcznych Definiując zapytanie wskazujemy której pamięci podręcznej należy użyć dla zachowania jego wyników SELECT * FROM Product WHERE CATEGORY_ID = #value# iBATIS wspiera wiele modeli pamięci podręcznej: –Tylko do odczytu, dzielone przez wszystkie sesje –Sesyjne, do odczytu i zapisu –Dzielone, do odczytu i zapisu (zwracane są kopie obiektów)

lipinski.pl Zagadnienia zaawansowane Definiowanie pamięci podręcznej Przykład definicji pamięci podręcznej typu tylko do odczytu: Określamy typ (type) i model (readOnly oraz serialize) pamięci podręcznej oraz definujemy, kiedy pamięć ma być czyszczona (flushOnExecute oraz flushInterval)

lipinski.pl Zagadnienia zaawansowane Typy pamięci podręcznej Typ MEMORY –Pamięć jest zwalniana przez GC (akr. Garbage Collector) –Konfigurowany parametrem reference-type (typ referencji) o wartości jednej z: STRONG (obiekty nie mogą być usunięte przez GC) SOFT (obiekty mogą być usuwane przez GC) WEAK (typ domyślny, także usuwane przez GC) Typ LRU –Usuwane są obiekty najdawniej nie używane –Konfigurowany parametrem size określającym maksymalną liczbę (liczba naturalna) obiektów jaka może być przechowywana Typ FIFO –Jako pierwsze usuwane są obiekty które były jako pierwsze dodane –Konfigurowany parametrem size, analogicznie jak typ LRU

lipinski.pl Zagadnienia zaawansowane Typy pamięci podręcznej, c.d. Typ OSCACHE –Deleguje zadania do biblioteki OSCache 2.0 –Konfiguracja w pliku oscache.properties –Szczegóły na stronie

lipinski.pl Zagadnienia zaawansowane Własna fabryka obiektów Mapując wyniki zapytań (i nie tylko) iBATIS tworzy obiekty klas z użyciem fabryki Począwszy od wersji możemy definiować własne fabryki obiektów Fabryka to klasa która implementuje interfejs com.ibatis. sqlmap.engine.mapping.result.ResultObjectFactory Fabrykę rejestrujemy w pliku konfuguracyjnym (config.xml) Fabrykę konfigurujemy listą właściwości (opcjonalnie)

lipinski.pl Zagadnienia zaawansowane Mapowanie SQL do XML iBATIS umożliwia bezpośrednie generowanie fragmentów XML z zapytań SQL <select id="getPerson" parameterClass=int resultClass="xml" xmlResultName=person> SELECT PER_ID as id, PER_FIRST_NAME as firstName, FROM PERSON WHERE PER_ID = #value# 1 Clinton

lipinski.pl Agenda Co to jest Apache iBATIS Data Mapper Jak wygląda projekt używający iBATISa Poznajemy iBATISa na przykładach Narzędzia dla iBATISa i wtyczki do IDE Zagadnienia zaawansowane Apache iBATIS kontra ORM Rozważania, pytania i dyskusja

lipinski.pl Apache iBATIS kontra ORM iBATIS jaki jest każdy widzi – może się podobać bądź nie Nie należy się obawiać użycia iBATISa – jest to dojrzała i stabilna biblioteka Jeśli ktoś zna tylko JDBC, albo nie zna żadnych technologii trwałości danych dla Javy, to iBATISa prawdopodobnie nauczy się szybciej niż Hibernate iBATIS może być lepszy w sytuacji, gdy nie mamy żadnej kontroli nad bazą danych (baza danych jest ważniejsza niż aplikacja) iBATIS może być lepszy w sytuacji gdy mamy dużo klas (np. wygenerowanych przez JAXB) i niedużo danych z zapytań SQL (mapujemy SQL na klasy a nie klasy na SQL/Tabele)

lipinski.pl Agenda Co to jest Apache iBATIS Data Mapper Jak wygląda projekt używający iBATISa Poznajemy iBATISa na przykładach Narzędzia dla iBATISa i wtyczki do IDE Zagadnienia zaawansowane Apache iBATIS kontra ORM Rozważania, pytania i dyskusja

lipinski.pl Rozważania, pytania i dyskusja Przyszłość iBATISa Trwają prace nad iBATISem 3.0 iBATIS będzie sam generował implementacje interfejsów deklaracja List listAllEmployees (); wygeneruje zapytanie SELECT id, firstName, lastName FROM Employee a z użyciem adnotacji zdefiniujemy … FROM EMPLOYEE WHERE …") List selectAllEmployees();

lipinski.pl Rozważania, pytania i dyskusja Książka o iBATISie