Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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.

Podobne prezentacje


Prezentacja na temat: "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."— Zapis prezentacji:

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

2 http://www.mariusz 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?

3 http://www.mariusz 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

4 http://www.mariusz 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

5 http://www.mariusz lipinski.pl Co to jest Apache iBATIS Data Mapper Strona domowa projektu to http://ibatis.apache.org 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

6 http://www.mariusz 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

7 http://www.mariusz 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" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

8 http://www.mariusz 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" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> 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

9 http://www.mariusz 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ę ${ }

10 http://www.mariusz 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);

11 http://www.mariusz 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); } (…)

12 http://www.mariusz 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

13 http://www.mariusz lipinski.pl Poznajemy iBATISa na przykładach Baza danych klientów Przykład na żywo!

14 http://www.mariusz 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

15 http://www.mariusz 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 http://www.mariuszlipinski.pl/2007/04/niebanalny-przykad- mapowania-dla-apache.html

16 http://www.mariusz 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#

17 http://www.mariusz 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

18 http://www.mariusz 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)

19 http://www.mariusz 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 }

20 http://www.mariusz lipinski.pl Poznajemy iBATISa na przykładach Przykład zapytania dynamicznego SELECT * FROM PERSON FIRSTNAME = #firstName# LASTNAME = #lastName#

21 http://www.mariusz 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

22 http://www.mariusz 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

23 http://www.mariusz 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

24 http://www.mariusz lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Abator (iBATOR) Strona domowa to http://ibatis.apache.org/ibator.html 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

25 http://www.mariusz 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?)

26 http://www.mariusz lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Abator jako wtyczka do Eclipsea Instalacja ze strony http://ibatis.apache.org/tools/abator

27 http://www.mariusz lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Abator jako wtyczka do Eclipsea - Prezentacja Prezentacja Abatora na żywo!

28 http://www.mariusz lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Eclibatis – wtyczka dla Eclipsea Strona domowa to http://eclibatis.wiki.sourceforge.net Wymagana Java 5 oraz Eclipse Ganymede (3.4) Instalacja ze strony http://eclibatis.sourceforge.net/updatesite 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

29 http://www.mariusz lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Eclibatis – wtyczka dla Eclipsea - Prezentacja Prezentacja Eclibatisa na żywo!

30 http://www.mariusz lipinski.pl Narzędzia dla iBATISa i wtyczki do IDE Plugin dla IntelliJ IDEA Strona domowa to http://code.google.com/p/ibatis-plugin Integracja z Abatorem (iBATORem) Uzupełnianie kodu w plikach Java Uzupełnianie w plikach XML Wiele innych

31 http://www.mariusz 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

32 http://www.mariusz 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)

33 http://www.mariusz 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)

34 http://www.mariusz 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

35 http://www.mariusz 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 http://www.opensymphony.com/oscache

36 http://www.mariusz 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 2.2.0 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)

37 http://www.mariusz 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

38 http://www.mariusz 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

39 http://www.mariusz 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)

40 http://www.mariusz 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

41 http://www.mariusz lipinski.pl Rozważania, pytania i dyskusja Przyszłość iBATISa Trwają prace nad iBATISem 3.0 iBATIS będzie sam generował implementacje interfejsów http://opensource.atlassian.com/confluence/oss/display/IBATIS/iBATIS+3.0+Whiteboard deklaracja List listAllEmployees (); wygeneruje zapytanie SELECT id, firstName, lastName FROM Employee a z użyciem adnotacji zdefiniujemy własne @Select("SELECT … FROM EMPLOYEE WHERE …") List selectAllEmployees();

42 http://www.mariusz lipinski.pl Rozważania, pytania i dyskusja Książka o iBATISie


Pobierz ppt "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."

Podobne prezentacje


Reklamy Google