ibatis jest propozycją fundacji Apache na

Wielkość: px
Rozpocząć pokaz od strony:

Download "ibatis jest propozycją fundacji Apache na"

Transkrypt

1 Biblioteka miesiąca David de Rosier ibatis bazodanowy robotnik ibatis jest propozycją fundacji Apache na współpracę aplikacji Java,.Net i Ruby z bazami danych. Podstawową ideą przy tworzeniu biblioteki była prostota i czytelność zapisu oraz lekkość samej biblioteki. W uproszczeniu ibatis można przedstawić jako mapper tabel baz danych na obiekty. Programista nie jest zwolniony z konieczności pisania zapytań SQL, które w tym przypadku są odizolowane od reszty aplikacji i osadzone w plikach XML. Dodatkowe narzędzia, jak np. Abator, umożliwiają usprawnienie pracy z biblioteką poprzez generowanie podstawowego kodu. Oprócz możliwości mapowania obiektów, ibatis dostarcza zbiór klas DAO (Data Access Objects) usprawniających pracę z bazami danych i dostęp do danych. Nie sposób od razu we wstępie nie odnieść się do Hibernate, bowiem dla wielu programistów (zwłaszcza w świecie Javy) jest on jedynym słusznym (bądź jedynym znanym) narzędz iem bazodanowym. Bardziej szczegółowym porównaniom obu rozwiązań poświęciłem ramkę w artykule, tutaj chciałbym jedynie zaznaczyć miejsce ibatis w świecie bazodanowych frameworków. Jeżeli wyobrazimy sobie, iż na jednym biegunie mamy programowanie z bezpośrednim użyciem JDBC a na drugim Hibernate, ibatis znajdzie się mniej więcej pośrodku, choć bliżej tego pierwszego. Czasem więc bardziej zasadnym będzie porównywanie biblioteki z JDBC niż z Hibernate. ibatis współpracuje z już istniejącymi bazami danych nie ma możliwości generowania ich struktury, nie zawiera dodatkowej logiki czy wbudowanego języka zapytań. W porównaniu z czystym JDBC redukuje znacząco ilość potrzebnego kodu oraz wyodrębnia zapytania SQL, przenosząc je do plików XML. To jedna z podstawowych zalet, która wpływa na czytelność kodu zapytania nie są bowiem tu budowane na zasadzie konkatenacji stringów wewnątrz kodu programu. Zapewne każdy programista JDBC poczuje się bardzo swobodnie z ibatis, bowiem niejednokrotnie sam pewnie pisał w uproszczeniu podobne rozwiązania, celem usprawnienia kodu JDBC. ibatis jest przemyślanym usystematyzowaniem tego typu pomysłów i eksperymentów. Autor od wielu lat pasjonuje się językami programowania. Jego zawodowe zainteresowania skupiają się wokół tematyki tworzenia zaawansowanych aplikacji webowych oraz obsługi baz danych. Kontakt z autorem: Biblioteka dostarcza dwie całkowicie niezależne funkcjonalności. Pierwszą i najważniejszą jest mechanizm mapowania danych, drugą interfejsy DAO (Data Access Objects). Na chwilę obecną DAO nie jest już rozwijane i stanowi finalną, zamkniętą całość, przez niektórych uważaną za nieco przestarzałą. Dlatego też w artykule skupimy się przede wszystkich na bibliotece w aspekcie mapowania danych. Mimo wszystko DAO proponowane przez ibatis jest rozwiązaniem ciekawym i zachęcam do jego poznania. Tak czy inaczej biblioteka skonstruowana jest w taki sposób, że zaadoptowanie innych DAO (np. ze środowiska Spring) nie powinno przysparzać trudności. Mapowanie danych prosty przykład Podstawowym zadaniem biblioteki jest mapowanie danych z bazy danych na obiekty i vice versa. Zobaczmy na prostym przykładzie jak wygląda taki proces. W całym artykule będziemy posługiwać się przykładową bazą danych, której skrypt został zamieszczony na listingu 1. W niniejszym przykładzie napiszemy kod, który odczyta pojedynczy rekord z tabeli Person i zapisze go w obiekcie klasy o tej samej nazwie. Na potrzeby artykułu będziemy posługiwali się przykładami napisanymi w języku Java. Ich konwersja do Ruby lub.net nie powinna sprawiać żadnych trudności. We wstępie do artykułu wspomniałem, iż iba- TIS przenosi zapytania SQL z kodu programu, do zewnętrznych plików XML. Rozwiązanie takie ma dwie podstawowe zalety po pierwsze możemy łatwo dokonywać zmian w kodzie SQL bez konieczności rekompilacji źródeł, a po drugie taki zapis jest bardziej czytelny, nie gmatwamy bowiem kodu Javy (.NET) z SQLem, osadzając go w zmiennych tekstowych. Na Listingu 2 umieszczony został przykładowy plik XML, definiujący zbiór operacji SQL na tabeli Person. W standardowych sytuacjach pojedynczy plik XML będzie implementował model CRUD (Create, read, update and delete) dla pojedynczej tabeli. Nic jednak nie stoi na przeszkodzie, by odwoływał się on do bazodanowych widoków, wbudowanych procedur albo złączonych tabel. Nasz przykładowy plik jest na tyle prosty i czytelny, że chyba nie wymaga szerszego komentarza. Jedna uwaga na temat operacji getperson, która oczekuje podania identyfikatora osoby jako parametru wejściowego. Odwołanie do tego parametru w pliku XML następuje poprzez konstrukcję #value#, przy czym 20 Software Developer s Journal 06/2007

2 ibatis bazodanowy robotnik Listing 1. Skrypt używanej na potrzeby artykułu bazy danych. Aplikacja testowana była z użyciem bazy MySQL CREATE TABLE Person ( ); id INT PRIMARY KEY, first_name VARCHAR(32) NOT NULL, last_name VARCHAR(32) NOT NULL CREATE TABLE Phone ( ); id INT PRIMARY KEY, person_id INT NoT NULL, phone_type VARCHAR(15), description TEXT value nie jest tutaj słowem kluczowym, a jedynie sugerowanym przez autorów biblioteki sposobem odniesienia sie do pojedynczego parametru zapytania. Nic nie stoi na przeszkodzie, by napisać tam np. #id#. Oprócz opisanego powyżej pliku XML, będziemy musieli stworzyć jeszcze jeden, który zawierać będzie globalną konfigurację ibatis. Zamieścimy tam parametry bazy danych oraz listę dostępnych plików mapujących. Przykład takiego pliku został zamieszczony na Listingu 3. Zobaczmy teraz jak odnieść się z poziomu kodu Javy do tabeli Person naszej przykładowej bazy danych. W pierwszej kolejności musimy odczytać główny plik konfiguracyjny, który umożliwi nam utworzenie obiektu klasy Sql- MapClient, zarządzającego dostępem do elementów bazodanowych: String resource = "org/sdjournal/ibatis/sqlmap-config.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlMapClient sqlmap = SqlMapClientBuilder.buildSqlMapClient( reader); Obiekt ten będzie wiedział w jaki sposób utworzyć połączenie z bazą danych i jak nim zarządzać (konfigurujemy to w wejściowym pliku XML). Również z jego użyciem będziemy mogli odwołać się do naszego zapytania na tabeli Person: HashMap persondata = (HashMap)sqlMap.queryForObject( "getperson", new Integer(1) ); W rezultacie takiego odwołania otrzymamy mapę, której każdy element zawierać będzie wartość pojedynczego pola z wynikowego rekordu. Chcąc odczytać np. wartość pola firstname, będziemy musieli użyć konstrukcji: String fn = (String)personData.get("firstName"); Nie jest to zbyt czytelne rozwiązanie, bowiem musimy używać rzutowania oraz podawać nazwę pola jako łańcuch znaków w przypadku literówki nie będziemy w stanie znaleźć błędu na etapie kompilacji. Jednak z drugiej strony użycie mapy jest czasem dość wygodne, szczególnie gdy chcemy na przykład szybko napisać jakiś kod testowy nie mamy bowiem konieczności tworzenia żadnych dodatkowych obiektów reprezentujących rekord tabeli. Tym niemniej, na ogół wygodniej będzie posłużyć się takim dedykowanym obiektem. ibatis daje nam możliwość wyboru, nie jesteśmy więc skazani wyłącznie na rozwiązanie z mapą. Utwórzmy na potrzeby przykładu prostą klasę o nazwie org.sdjournal.ibatis.person. Przedstawia to Listing 7. Aby otrzymać zamiast mapy obiekt klasy Person, musimy dokonać jednej drobnej zmiany w pliku Person.map.xml w tagu select parametr parametrclass należy zmienić z wartości hashmap na org.sdjournal.ibatis.person. Od tego momentu możemy używać bardziej wygodnego odwołania do tabeli: Person person1 = sqlmap.queryforobject( "getperson", new Integer(1)); Operacje bazodanowe wspierane przez ibatis W poprzednim przykładzie mogliśmy zobaczyć prostą operację Select z jednym parametrem wejściowym. Przyjrzyjmy Listing 2. Przykładowy plik XML, definiujący zbiór operacji SQL na tabeli Person <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmap PUBLIC "-//ibatis.apache.org// DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlmap namespace="person"> <select id="getperson" parameterclass= SELECT id, int resultclass="hashmap"> first_name AS firstname, last_name AS lastname FROM Person WHERE id=#value# </select> <insert id="insertperson" parameterclass= "org.sdjournal.ibatis.person"> INSERT INTO Person (id, first_name, last_name) VALUES (#id#, #firstname#, #lastname#) </insert> <update id="updateperson" parameterclass= "org.sdjournal.ibatis.person"> UPDATE Person SET first_name = #firstname#, last_name = #lastname# WHERE id = #id# </update> <delete id="deleteperson" parameterclass= "int"> DELETE FROM PERSON WHERE id = #id# </delete> </sqlmap> Software Developer s Journal 06/

3 Biblioteka miesiąca Listing 3. Przykład globalnej konfiguracji ibatis dla połączenia z bazą danych MySQL <?xml version="1.0" encoding= "UTF-8"?> <!DOCTYPE sqlmapconfig PUBLIC "-//ibatis.apache.org// DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/ <sqlmapconfig> sql-map-config-2.dtd"> <transactionmanager type="jdbc" > <datasource type="simple"> <property name="jdbc.driver" value="com.mysql.jdbc.driver"/> <property name="jdbc.connectionurl" value="jdbc:mysql://localhost/test"/> <property name="jdbc.username" value="test"/> <property name="jdbc.password" value="password"/> </datasource> </transactionmanager> <sqlmap resource="person.map.xml" /> </sqlmapconfig> się teraz operacji insert, która wstawi nowy rekord do bazy danych. W tym przypadku w pliku XML jako parametrclass podamy klasę Person (jej obiekt będziemy bowiem zapisywać do bazy danych), natomiast wewnątrz kodu SQL będziemy odwoływać się do pól obiektu poprzez nazwę, zamkniętą z lewej i prawej strony przez znacznik #. Wstawienie kodu z poziomu Javy będzie wyglądało analogicznie do pobrania danych: sqlmap.insert("insertperson", personobj); Usystematyzujmy teraz wiedzę na temat operacji bazodanowych, które możemy wykonać z użyciem ibatis, określając wymagane i opcjonalne parametry: <select> zwraca pojedynczy rekord bazy danych lub kolekcję rekordów; wymaga określenia typu wynikowego oraz (opcjonalnie) typu wejściowego (w przypadku sparametryzowanego zapytania). Dla często używanych zapytań możliwe jest zdefiniowanie wartości cachemodel (opisanej w dalszej części artykułu). <insert> wstawia nowy rekord do bazy danych; wymaga podania typu danych wejściowych zwykle mapy lub obiektu mapującego tabelę. <update> jak insert ale uaktualnia istniejący rekord. <delete> usuwa rekord z bazy danych; opcjonalnie przyjmuje typ obiektu wejściowego może to być pojedyncza wartość (identyfikator do usunięcia) lub mapa albo cały obiekt w przypadku bardziej złożonych zapytań. <procedure> wywołuje procedurę SQL; przyjmuje typ danych wejściowych i wyjściowych wszystkie opcjonalne, zależnie od parametrów samej procedury. <statement> używany do wszystkich operacji bazodanowych niezdefiniowanych powyżej; zwyklebędą to operacje tworzenia lub usuwania tabel. W zależności od potrzeby, może przyjmować każdy z wymienionych wyżej parametrów. Każda z operacji musi posiadać unikalny identyfikator (atrybut id) poprzez który będziemy będziemy odwoływać się do poszczególnych zapytań SQL z poziomu języka programowania. Zaawansowana konfiguracja mapowania danych Opisane wcześniej przykłady związane były z bardzo prostymi operacjami na bazie danych i nie wymagały wykonywania żadnych dodatkowych akcji podczas mapowania. To jednak sytuacja idealna, bowiem w praktyce można natknąć się na sporo poważniejszych problemów. Przykładem może być sytuacja, w której liczbową wartość z bazy danych, chcemy reprezentować za pomocą łańcucha znaków po stronie języka programowania. Innym klasycznym przykładam jest reprezentacja wartości null z bazy danych, gdy po stronie klienta używamy typów prostych. Tego typu problemy możemy rozwiązać za pomocą dodatkowych parametrów konfiguracyjnych w pliku XML odpowiedzialnym za mapowanie danych. <resultmap> W pliku XML z mapowaniem, oprócz standardowych tagów odpowiadających operacjom bazodanowym, możemy użyć kilku dodatkowych związanych z zaawansowaną konfiguracją. Najbardziej przydatnym z nich jest tag <resultmap>. Narzędzie to daje szereg możliwości konwersji wartości z bazodanowej kolumny do pola obiektu w naszej aplikacji, będzie więc używany dla operacji selekcji danych. Ogólny schemat użycia taga przedstawia Listing 8. Listing 4. Przykład użycia narzędzia resultmap do pełniej kontroli nad konwersją danych pomiędzy bazą danych a aplikacją <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sqlmap PUBLIC "-//ibatis.apache.org// DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlmap namespace="phone"> <resultmap id="get-phone-result" class="klasa"> <result property="phonetype" column="phone_type" nullvalue="phone"/> <result property="description" column="description" nullvalue="[none]"/> </resultmap> <select id="getphone" parameterclass= int resultmap="get-phone-result"> SELECT * FROM Phone WHERE id=#value# </select> </sqlmap> 22 Software Developer s Journal 06/2007

4

5 Biblioteka miesiąca </resultmap> Jak można się domyślić, pojedynczy resultmap jest zdefiniowany dla konkretnej klasy, do której będziemy mapować dane z tabeli. Wewnątrz taga znajdować się będzie szereg tagów result, a każdy z nich odpowiadać będzie pojedynczemu polu klasy, definiując schemat mapowania. Nie musimy w tym miejscu opisywać wszystkich pól, a jedynie te, które wymagają niestandardowej konwersji. Na Listingu 4 został zamieszczony plik XML dla drugiej z przykładowych tabel, przechowującej numery telefonów osoby. Został tam użyty resultmap, celem rozwiązania nieścisłości w nazwach między kolumnami a polami klasy. Ponadto określone zostało jaką wartość ma przyjąć pole klasy w przypadku znalezienia wartości null w tabeli. Przyjrzyjmy się wszystkich możliwym atrybutom taga result, by móc zrozumieć siłę tkwiącą w tym narzędziu: property atrybut obowiązkowy; wskazuje na nazwę pola klasy, column atrybut obowiązkowy; wskazuje na nazwę kolumny w tabeli, javatype oczekiwany typ pola po stronie języka programowania, jdbctype oczekiwanytyp pola po stronie bazy danych, nullvalue wartość jaka zostanie zapisana w polu obiektu w przypadku znalezienia wartości null w bazie danych, Listing 5. Przykładowa konfiguracja generatora Abator <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE abatorconfiguration PUBLIC "-//Apache Software Foundation//DTD Abator for ibatis Configuration 1.0//EN" "http://ibatis.apache.org/dtd/abator-config_1_0.dtd"> <abatorconfiguration> <abatorcontext id="db2tables" generatorset="java2"> <jdbcconnection driverclass="com.ibm.db2.jdbc.app.db2driver" connectionurl="jdbc:db2:test" userid="db2admin" password="db2admin"> <classpathentry location="/program Files/IBM/SQLLIB/java/db2java.zip" /> </jdbcconnection> <javatyperesolver > <property name="forcebigdecimals" value="false" /> </javatyperesolver> <javamodelgenerator targetpackage="test.model" targetproject="\abatortestproject\src"> <property name="enablesubpackages" value="true" /> <property name="trimstrings" value="true" /> </javamodelgenerator> <sqlmapgenerator targetpackage="test.xml" targetproject="\abatortestproject\src"> <property name="enablesubpackages" value="true" /> </sqlmapgenerator> <daogenerator type="ibatis" targetpackage="test.dao" targetproject="\abatortestproject\src"> <property name="enablesubpackages" value="true" /> </daogenerator> <table schema="db2admin" tablename="alltypes" domainobjectname="customer" > <property name="useactualcolumnnames" value="true"/> <generatedkey column="id" sqlstatement="db2" identity="true" /> <columnoverride column="date_field" property="startdate" /> <ignorecolumn column="fred" /> <columnoverride column="long_varchar_field" jdbctype="varchar" /> </table> </abatorcontext> </abatorconfiguration> 24 Software Developer s Journal 06/2007

6

7 Biblioteka miesiąca Listing 6. Przykład zastosowania generatora Abator wewnątrz skryptu Ant <project default="genfiles" basedir="."> <property name="generated.source.dir" value="${basedir}" /> <target name="genfiles" description= "Generate the files"> <taskdef name="abator" classname="org.apache.ibatis.abator.ant. AbatorAntTask" classpath="abator.jar" /> <abator overwrite="true" configfile= "abatorconfig.xml" verbose="false" > <propertyset> <propertyref name= </propertyset> </abator> </target> </project> "generated.source.dir"/> Teraz musimy jeszcze napisać właściwy resultmap dla klasy Person. Ponieważ wszystkie pozostałe pola tej klasy nie wymagają w naszym przypadku specjalnej konwersji, wystarczy iż w tagu resultmap zdefiniujemy, jak ibatis ma wypełnić pole z adresem, który przedstawia Listing 9. w powyższym przykładzie istotnym jest parametr column, który definiuje dane wejściowe dla podzapytania. Aby użyć zdefiniowanych wyżej reguł konwersji w naszym zapytaniu, musimy zamiast atrybutu resultclass taga select użyć atrybutu resultmap: <select id="getperson" resultmap="get-person-result"> Na koniec krótki komentarz na temat taga resultmap. Może on przyjmować dwa dodatkowe parametry: extends, dzięki któremu możemy budować schemat dziedziczenia elementów resultmap, co jest bardzo przydatne w przypadku tabel o powtarzających się polach (jak choćby np. creationdate, modificationdate), groupby pozwala na grupowanie danych względem zadanej kolumny w przypadku złożonych zapytań ze złączeniami. <parametermap> W poprzednim podpunkcie opisałem mechanizm resultmap, definiujący metody konwersji podczas odczytu danych. Konieczność takiej konwersji może również zachodzić w drugą stronę, kiedy zapisujemy dane z obiektu do bazy danych do tego celu służy właśnie parametermap. Jego składnia jest bardzo zbliżona do resultmap, znaleźć można jednak kilka znaczących różnic. Ogólny schemat użycia parametermap wygląda następująco: typehanler wskazuje na klasę, która definiuje sposób konwersji typu JDBC na typ Java; niezbędne w przypadku niestandardowych konwersji; klasa typehandler musi implementować interfejs com.ibatis.sqlmap.engine.type.typehandler, select umożliwia wykonanie odrębnego podzapytania, celem uzyskania danych dla pola. Rozważmy bardziej szczegółowo ostatni z opisanych parametrów select. Wyobraźmy sobie, że w naszej przykładowej bazie danych mamy jeszcze jedną tabelę Address oraz klasę o tej samej nazwie. Obiekt tej klasy jest jednym z pól klasy Person. Mamy więc sytuację, w której, by wypełnić danymi obiekt, musimy odwołać się do dwóch tabel. Najprościej i najszybciej możemy rozwiązać ten problem pisząc pojedyncze zapytanie odwołujące się do dwóch tabel. Mamy tu relację 1:1 więc nic nie stoi na przeszkodzie, by to zrobić. Tym nie mniej w bardziej złożonych sytuacjach nie zawsze będzie to możliwe. Celem zobrazowania jak działa atrybut select taga result skomplikujmy nieco nasz przykład. W pierwszej kolejności napiszemy zapytanie pobierające adres dla zadanego id: <select id="getaddress" parameterclass="int" resultclass="org.sdjournal.ibatis.address"> </select> SELECT * FROM Address WHERE id=#value# <parametermap id="nazwa" class="klasa"> <parameter propertyname="nazwa".../> </parametermap> Część atrybutów taga parameter jest identyczna z result, są to jdbctype, javatype, nullvalue, typehandler. Parameter nie definiuje atrybutu column, w tym przypadku jest to zbędne. Przyjrzyjmy się dokładniej dodatkowym atrybutom taga: typename definiuje nazwę definiowanego przez użytkownika typu bazodanowego, mode przydatne przy współpracy z procedurami wbudowanymi; określa typ parametru mamy do wyboru następujące wartości: IN, OUT, INOUT, Listing 7. Tworzymy klasę org.sdjournal.ibatis.person class Person { } protected int id; protected String firstname, lastname; public int getid() { } return id; public void setid(int id) { } this.id=id; // etc. 26 Software Developer s Journal 06/2007

8 ibatis bazodanowy robotnik Listing 8. Ogólny schemat użycia taga <resultmap id="nazwa" class="klasa"> <result property="pole1" column="column1".../> <result property="pole2" column="column2".../> numericscale definiuje oczekiwaną dokładność liczb zmiennoprzecinkowych; wartość powinna być określona w przypadku ustawienia jdbctype na decimal lub numeric. <typealias> Prosty tag typealias pozwala na zdefiniowanie nazw zastępczych dla klas, dzięki czemu można uniknąć każdorazowego wprowadzania długich nazw wraz z metrykami pakietów. Zobaczmy przykład: <typealias alias="person" type="org.sdjournal.ibatis.person"/> Po takiej definicji w każdej sytuacji, w której musimy podać nazwę klasy, mamy możliwość skorzystania z aliasu. iba- TIS standardowo dostarcza szereg własnych skrótów do typów podstawowych, np. hashmap = java.util.hashmap, int = java.lang.integer. <cachemodel> Z punktu widzenia aplikacji operacje bazodanowe są czasochłonne. By zredukować czas odpowiedzi podczas pobierania danych, ibatis wprowadza mechanizm cache, który w efektywny sposób potrafi zarządzać odwołaniami do najczęściej używanych tabel. Zdefiniujmy cache dla naszej przykładowej tabeli Person. (Patrz Listing 10). Tak utworzona pamięć podręczna będzie przechowywała sto najczęściej używanych rekordów. Pamięć będzie czyszczona automatycznie co cztery godziny a także za każdym razem, kiedy wykonana zostanie na tabeli Person operacja zapisu, uaktualnienia lub usunięcia. Przedstawiony fragment kodu to jedynie definicja cache. Aby ją zastosować dla konkretnej operacji odczytu danych musimy jeszcze uzupełnić tag select o parametr cachemodel: <select id="getperson" parameterclass="int" cachemodel="person-cache" resultclass= "org.sdjournal.ibatis.person"> Nieco szerszego komentarza wymaga parametr model w definicji pamięci podręcznej. Definiuje on metodę przechowywania danych i może przyjmować jedną z następujących wartości: LRU przechowuje najczęściej używane rekordy (Least Recently Used); w przypadku przepełnienia pamięci podręcznej biblioteka usunie element, do którego odwołanie nastąpiło najdawniej. FIFO proste rozwiązanie pozbawione statystyki odwołań, działające na zasadzie kolejki FIFO (First In First Out). MEMORY definiuje pamięć podręczną bez określonej maksymalnej ilości elementów. Mechanizm ten działa na zasadzie garbage collectora, który decyduje o zajętości pamięci i potrzebie jej zwalniania. Na potrzeby tego modelu pamięci podręcznej można określić dodatkowy parametr (za pomocą taga property) o nazwie reference-type, który określa sposób funkcjonowania garbage collectora. Domyślną wartością parametru jest WEAK, który nakazuje usuwanie nieużywanych elementów z pamięci możliwie najczęściej. Dla wartości SOFT interwał czasowy będzie nieco większy, natomiast wartość STRONG nie pozwala na usunięcie danych z pamięci podręcznej aż do czasu jej całkowitego wyczyszczenia (np. z powodu zajścia operacji określonej we flushonexecute). OSCACHE ten typ pamięci podręcznej uruchamia zewnętrzny plugin cache OSCache 2.0. Mechanizm ten daje wiele możliwości konfiguracji i umożliwia zaawansowane zarządzanie pamięcią. Więcej szczegółów na ten temat odnaleźć można na stronie internetowej <sql> i <include> Podczas programowania dużej ilości operacji na bazach danych, łatwo będziemy w stanie dostrzec powtarzające się fragmenty kodu SQL. Biblioteka pozwala na wyodrębnienie takich części skryptu (służy do tego tag sql) i odwoływanie się do nich za pomocą nazwy (poprzez tag include). Zobaczmy prosty przykład. W naszej testowej aplikacji dwie z czterech operacji na tabeli Person (select, delete) zawierają identyczny fragment kodu SQL: FROM Person WHERE id=#value#. Możemy wyodrębnić go w następujący sposób: <sql id="person-selection-fragment"> FROM Person WHERE id=#value# </sql> Zobaczmy teraz jak odwołać się do tego fragmentu na przykładzie zapytania delete: <delete id="deleteperson" parameterclass="int"> DELETE <include refid="person-selection-fragment"/> Listing 9. Pole z adresem <resultmap id="get-person-result" class= "org.sdjournal.ibatis.person"> <result property="address" column="id" select= "getaddress"/> </resultmap> Listing 10. Definiujemy cache <cachemodel id="person-cache" type="lru" readonly="false"> <flushinterval hours="4"/> <flushonexecute statement="insertperson"/> <flushonexecute statement="updateperson"/> <flushonexecute statement="deleteperson"/> <property name="cache-size" value="100" /> </cachemodel> Software Developer s Journal 06/

9 Biblioteka miesiąca Listing 11. Zwracamy telefony typu mobile <select id="dynamictest" resultclass="list"> SELECT * FROM Phone <dynamic prepend="where"> </delete> <dynamic> <isequal prepend="and" property="person_id" phone_type = 'mobile' </isequal> </dynamic> </select> comparevalue="0"> Często aplikacje generują dynamicznie kod SQL, w zależności od wartości pewnych parametrów. Biblioteka ibatis nie pozbawia programisty takich możliwości. Stwórzmy dla przykładu dość bezużyteczne zapytanie na tabeli Phone. Załóżmy, że w sytuacji, kiedy wartość pola person_id będzie równa równa zeru, zwrócimy tylko numery telefonów typu mobile. (Patrz Listing 11). W powyższym kodzie tag dynamic deklaruje dynamiczny fragment skryptu. ibatis doda do kodu SQL słowo kluczowe where w przypadku, jeśli nie wystąpiło ono wcześniej oraz jeśli zostanie spełniony zadany warunek. Sprawdza on czy wartość pola person _ id wynosi zero. Jeśli tak, wygenerowany zostanie zadany kod. Wartość atrybutu prepend informuje, jak należy łączyć ze sobą poszczególne elementy, gdyby dynamiczny kod zawierał więcej warunków. W naszym przykładzie użyliśmy prostego porównania wartości. Poniżej zamieszczono pełną listę dozwolonych operacji: Współpraca z bazą danych z poziomu języka programowania Dotychczas skupialiśmy się głównie na definicji zapytań SQL i konfiguracji bazy danych po stronie plików XML. Zobaczmy teraz jak współpracować z bazą danych z poziomu języka programowania na przykładzie Javy. Transakcje ibatis daje pełne wsparcie dla transakcyjności. W prostych przypadkach można użyć modelu autotransakcji, czyli automatycznego zapisywania da bazy danych każdego pojedynczego zapytania, tym nie mniej, w bardziej profesjonalnych zastosowaniach, większa kontrola nad operacjami bazodanowymi będzie niezbędna. Schemat wykonania pojedynczej transakcji w języku Java przedstawia Listing 12. Wykonanie operacji endtransaction z pominięciem committransaction zostanie potraktowane jako anulowanie transakcji (rollback). Przetwarzanie wsadowe (batches) Zbiorowe operacje na bazie danych np. ciąg operacji insert, wydajniej jest zawrzeć w postaci wsadu, który zminimalizuje ilość połączeń do bazy danych. ibatis dostarcza taką funkcjonalność za pomocą dwóch prostych metod. Zobaczmy to na przykładzie: sqlmap.startbatch(); sqlinsert("insertperson", person1 ); sqlinsert("insertperson", person2 ); int insertedrows = sqlmap.executebatch(); Niezbędnym jest aby operacja startbatch i executebatch zostały zawarte wewnątrz transakcji. Selekcja danych Biblioteka dostarcza zbiór metod pozwalających w różny sposób odczytywać dane z tabeli. Przejrzyjmy zbiór możliwości na przykładach: isequal wygeneruje zadany kod jeśli wartość pola określonego przez atrybut property będzie identyczna z wartością określoną przez atrybut comaprevalue, isnotequal jak wyżej ale warunek zostanie spełniony gdy wartości będą różne, isgreaterthan sprawdza czy pierwsza wartość (określona przez atrybut property) jest większa od drugiej, islessthan sprawdza czy pierwsza wartość jest mniejsza od drugiej, isgreaterequal sprawdza czy pierwsza wartość jest większa lub równa drugiej, islessequal sprawdza czy pierwsza wartość jest mniejsza lub równa drugiej, ispropertyavailable jednoargumentowa operacja sprawdzająca czy zadana właściwość obiektu wejściowego istnieje, isnotpropertyavailable jak wyżej ale wykonuje kod w przypadku gdy właściwość obiektu nie jest zdefiniowana, isnull sprawdza czy element ma wartość null, isnotnull sprawdza czy element ma wartość różną od null. Person p = (Person)sqlMap.queryForObject("getPerson", key); Tworzy nowy obiekt Person i wypełnia go danymi z tabeli, znajdując rekord o zadanej wartości klucza. Person p = new Person(); sqlmap.queryforobject("getperson, key, p); Jak wyżej ale nie tworzy nowego obiektu a jedynie wypełnia danymi obiekt uprzednio zdefiniowany. List list = sqlmap.queryforlist("getallpersons"); Zamiast pojedynczego rekordu, zwraca kolekcję wartości. Przedstawia to Listing 13. Listing 12. Schemat wykonania pojedynczej transakcji try { sqlmap.starttransaction(); //zbiór operacji bazodanowych sqlmap.committransaction(); } finally { } sqlmap.endtransaction(); 28 Software Developer s Journal 06/2007

10

11 Biblioteka miesiąca Listing 13. Zwrot kolekcji wartości RowHandler rowhandler = new RowHandler() { } public void handlerow(object value) } throws SQLException { Person p = (Person)value; System.out.println( p.firstname ); sqlmap.querywithrowhandler("getallpersons", rowhandler); Dla każdego elementu wynikowej kolekcji wykonuje metodę handlerow z implementacji interfejsu RowHandler. PaginatedList list = sqlmap.queryforpaginatedlist("getallpersons", 10); Umożliwia odczyt zadanej liczby rekordów z całej kolekcji wynikowej. Metoda zwraca jako wartość własną implementację listy PaginatedList. Obiekt ten dostarcza dwie użyteczne metody nextpage i previouspage, które w łatwy sposób pozwalają na odczytywanie kolejnych (lub poprzednich) elementów tabeli. Ten sposób odczytu danych będzie miał częste zastosowanie w aplikacjach internetowych. Konfiguracja połączenia z bazą danych Każda aplikacja korzystająca z ibatis musi zawierać plik definiujący parametry połączenia z bazą danych. Zwyczajowo plik ten będzie miał nazwę SqlMapConfig.xml. Na listingu 3 została przedstawiona minimalistyczna wersja takiego pliku. Usystematyzujmy teraz wiedzę na temat dostarczanych przez bibliotekę możliwości konfiguracji połączenia z bazą danych. Plik SqlMapConfig.xml może składać się z kilku sekcji. Jedną z nich, używaną zwykle na początku pliku, jest properties. Ten opcjonalny element pozwala na połączenie pliku XML z plikiem.properties, który będzie zawierał stałe konfiguracyjne. Przykładowo w pliku tym możemy umieścić wartość o nazwie dbdriver i odwołać się do niej w pliku XML w postaci wyrażenia ${dbdriver}. Pozwala to na zachowanie większej czytelności pliku. Składnia elementu properties wygląda następująco: <properties resource="plik.properties"/> Głównym i obowiązkowym elementem konfiguracyjnym jest transactionmanager, który definiuje rzeczywiste połączenie z bazą danych. Listing 14 przedstawia użycie transactionmanagera dla prostego połączenia JDBC: TransactionManager definiuje typ połączenia z bazą danych a następnie rodzaj źródła danych. Lista elementów property będzie zależna od wybranego typu datasource. Starsze wersje biblioteki pozwalały na zdefiniowanie większej ilości źródeł danych w obrębie jednego transactionmanagera, jednak od wersji 2.0 biblioteki jest to niedozwolone. Przyjrzyjmy się teraz dokładniej dostępnym modelom transakcyjności. Poza typem JDBC mamy do wyboru JTA i EXTERNAL. JTA (Java Transaction API) daje nam dostęp do rozproszonych transakcji zgodnie ze standardem XA. Typ EXTERNAL przenosi odpowiedzialność za zarządzanie transakcjami na programistę, z pominięciem mechanizmów zdefiniowanych w samej bibliotece. Typ ten może mieć również zastosowanie w przypadku nietransakcyjnych baz danych lub baz z dostępem tylko do odczytu. Typ elementu datasource może przyjmować jedną z trzech wartości: SIMPLE definiuje połączenie z bazą danych z użyciem prostej puli połączeń implementowanej przez ibatis, DBCP do zarządzania połączeniami używa mechanizmu Jakarta DBCP (Database Connection Pool), JNDI rozwiązanie przydatne kiedy używamy serwera aplikacji definiującego własny mechanizm zarządzania połączeniami. Ten typ elementu datasource jest jedyną dostępną opcją jeśli ustawimy transactionmanager na wartość JTA. W zależności od wybranego typu źródła danych, będziemy posługiwali się różnym zestawem parametrów konfiguracyjnych. Przykładowo dla JNDI wystarczy określić jedynie nazwę zasobu: <property name="datasource" value="java:/comp/usertransaction"/> Znacznie więcej parametrów konfiguracyjnych będziemy mieli dla połączenia transakcji typu JDBC ze źródłem danych typu SIMPLE. Musimy tutaj przynajmniej zdefiniować parametry dostępu do bazy danych za pomocą właściwości JDBC.driver, JDBC.ConnectionURL, JDBC.Username, JDBC.Password. Dodatkowo mamy tu możliwość pełnej konfiguracji zarządzania połączeniami. Nazwy parametrów czytelnie opisują swoje zastosowanie, np.: Pool.MaximumActiveConnections, Pool.MaximumIdleConnections, Pool.MaximumCheckoutTime. Istotnym parametrem będzie też JDBC.DefaultAutoCommit, który określa czy operacje bazodanowe mają być automatycznie utrwalane przez serwer bazy danych. Kolejnym elementem, który musimy określić w pliku SqlMapConfig.xml, jest lista plików XML zawierająca definicje mapowania tabel. W naszej przykładowej aplikacji definiowaliśmy dostęp do pliku Person.map.xml z użyciem konstrukcji: <sqlmap resource="org/sdjournal/ibatis/person.map.xml"/> Taka składnia pozwala na odwoływanie się do plików XML jak do pakietów i klas języka Java, dzięki czemu pliki konfiguracyj- Listing 14. Użycie transactionmanagera <transactionmanager type="jdbc"> <datasource type="simple"> <property name="jdbc.driver" value="${dbdriver}"/> <property... /> </datasource> </transactionmanager> 30 Software Developer s Journal 06/2007

12 ibatis bazodanowy robotnik W Sieci strona domowa biblioteki generator kodu dla ibatis ne będą mogły być umieszczone wewnątrz archiwów.jar. Zamiast atrybutu resource możemy zdefiniować właściwość url, by wskazać na bezpośrednie położenie pliku XML, np.: <sqlmap url="file:///c:/phone.map.xml"/> Abator generator kodu dla ibatis Programowanie z ibatis dość często jest nużąco proste i wymaga powtarzalnych czynności. Mam tu na myśli głównie tworzenie klas reprezentujących poszczególne tabele oraz plików XML definiujących skrypty SQL dla operacji selekcji, zapisu i usunięcia. Te ostatnie, jeśli nie używamy złożonych zapytań lub wbudowanych procedur, zwykle są bardzo proste do automatycznego wygenerowania. Abator to narzędzie, które potrafi przeczytać strukturę istniejącej bazy danych i wygenerować na jej podstawie kod aplikacji ibatis. Narzędzie to może znacząco przyspieszyć proces wytwarzania aplikacji bazodanowej i uwolnić nas od pisania mało ambitnego i nudnego kodu. Nawet jeśli będziemy musieli w przyszłości ręcznie modyfikować wygenerowany kod, wygodniej jest rozpocząć projekt z użyciem Abatora, zamiast pisać wszystko od początku. Generator potrafi rozpoznać zmodyfikowane przez programistę pliki XML i w przypadku kolejnej generacji, nie nadpisze zmian. Niestety nie działa to w przypadku plików Java (chyba, że używamy Abatora w wersji wtyczki do środowiska Eclipse). Abator potrafi wygenerować kod na trzech różnych warstwach: pliki XML zawierające podstawowe operacje na bazie danych (model CRUD), pliki Java (POJO) reprezentujące poszczególne tabele, interfejsy i klasy DAO pozwalające na zarządzanie operacjami na tabelach. Abator może zostać uruchomiony z linii poleceń, jako zadanie skryptu Ant lub jako plugin środowiska Eclipse. Możliwe też jest uruchomienie go bezpośrednio z poziomu aplikacji Javy. W każdym z tych przypadków będziemy musieli określić szereg parametrów konfiguracyjnych, zdefiniowanych w pliku XML. Na listingu 5 został zamieszczony przykład takiego pliku. Uruchomienie generatora z poziomu linii poleceń może wyglądać następująco: java -jar abator.jar abatorconfig.xml false Ostatni parametr wywołania programu informuje, czy istniejące pliki Java mają zostać nadpisane przez generator czy też pozostać niezmienione (wartość false). Alternatywne uruchomienie generatora z poziomu skryptu Ant zostało przedstawione na Listingu 6. ibatis vs Hibernate Zarówno ibatis jak i Hibernate dedykowane są współpracy z bazami danych, jednak tutaj podobieństwo się kończy. Ibatis nie jest konkurencją dla Hibernate, a raczej rozwiązaniem dla zastosowań, w których Hibernate nie będzie sprawdzać się zbyt dobrze. Niewątpliwą zaletą Hibernate jest całkowita przezroczystość (z punktu widzenia programisty) warstwy bazodanowej. Modelujemy obiektowy schemat danych, a Hibernate wie w jaki sposób należy go przekonwertować na język relacyjnej bazy danych. Z pewnością zwalnia to programistę ze żmudnej konieczności pisania konektorów i zapytań. Proces wytwarzania oprogramowania staje się szybszy, zwłaszcza jeśli nie mamy na starcie istniejącej bazy danych. Wadą rozwiązania jest brak pełnej kontroli nad strukturą i komunikacją z bazą danych. W świecie wielkich aplikacji korporacyjnych czy bankowych, optymalizacja i wydajność bazy danych są podstawowymi kryteriami. Silniki obecnych serwerów bazodanowych dają programistom wiele możliwości konfiguracji oraz umożliwiają przenoszenie części logiki aplikacji na stronę serwera baz danych. Takie rozwiązania, choć bardzo wydajne, nie współgrają najlepiej z wieloma poziomami abstrakcji, jakie dostarcza Hibernate. ibatis jest narzędziem dużo prostszym, jednak bardziej bezpośrednim. Jego głównym zadaniem jest mapowanie danych na proste obiekty Javy (POJO ang. Plain Object Java Object). Nie unikniemy tutaj konieczności pisania zapytań SQL, sam proces wytwarzania aplikacji może być więc bardziej złożony i czasochłonny. Z drugiej strony, mamy pełną kontrolę nad bazą danych. ibatis będzie bardzo użyteczny w sytuacjach, kiedy będziemy pisali aplikację łączącą się z już istniejącą bazą danych. Bardziej niskopoziomowy dostęp do danych powoduje również, iż ibatis będzie bez trudności radził sobie ze złożonymi zapytaniami oraz wbudowanymi procedurami SQL. Niestety kosztem kompatybilności. Biblioteka nie dostarcza bowiem warstwy ujednolicającej język zapytań dla wszystkich systemów baz danych. Jedną z istotnych zalet iba- TIS jest też rozmiar (zaledwie 370kB) i złożoność samej biblioteki w porównaniu z Hibernate. Zrozumienie filozofii biblioteki jest bardzo proste i łatwo jest ją zaadoptować do już istniejących programów. Niewielkie aplikacje, jak np. sklepy internetowe bazujące na zbiorze kilku tabel, będzie można szybko i w łatwy sposób zaadoptować do współpracy z ibatis bez przebijania się przez złożoność i wielopoziomową logikę Hibernate. Podsumowanie Podstawowym założeniem ibatis jest prostota i ten warunek został spełniony znakomicie. Programista potrzebuje niewiele czasu by zrozumieć filozofię biblioteki i zacząć pisać z jej użyciem podstawowy kod. Nie można o ibatis powiedzieć, iż jest to jakieś rewolucyjne odkrycie koncepcja mapowania danych do obiektów poprzez konfiguracyjne pliki XML jest znana od dawna i była, z różnym skutkiem, implementowana na wiele sposób. Tym niemniej, ibatis to dobry i wydajny robotnik, który zasługuje na uznanie i może stać się bardzo użyteczny ze względu na swoją lekkość i niskopoziomowy dostęp do baz danych. Software Developer s Journal 06/

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate Wirtualne przedsiębiorstwo II Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate Łukasz Macierzyński 157588 Daniel Nikończuk 157621 Kacper Oko 157626 Agenda 1. Co to jest mapowanie obiektowo-relacyjne

Bardziej szczegółowo

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

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca 2009. Norbert Potocki db4o Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie 1 czerwca 2009 Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie = bjects = database for objects w pełni obiektowa

Bardziej szczegółowo

Automatyczne generowanie kodu. Marek.Berkan@e-point.pl. 4Developers, 26 marca 2010

Automatyczne generowanie kodu. Marek.Berkan@e-point.pl. 4Developers, 26 marca 2010 4Developers, 26 marca 2010 Zakres wykładu O czym zamierzam opowiedzieć: Przyspieszenie tworzenia aplikacji Ułatwienie utrzymania aplikacji Budowanie kontraktów pomiędzy developerami a innymi uczestnikami

Bardziej szczegółowo

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika Programowanie w SQL procedury i funkcje UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika 1. Funkcje o wartościach skalarnych ang. scalar valued

Bardziej szczegółowo

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

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

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

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1 Bazy danych Wykład IV SQL - wprowadzenie Copyrights by Arkadiusz Rzucidło 1 Czym jest SQL Język zapytań deklaratywny dostęp do danych Składnia łatwa i naturalna Standardowe narzędzie dostępu do wielu różnych

Bardziej szczegółowo

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Prezentacja Danych i Multimedia II r Socjologia Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Celem ćwiczeń jest poznanie zasad tworzenia baz danych i zastosowania komend SQL. Ćwiczenie I. Logowanie

Bardziej szczegółowo

Systemy GIS Tworzenie zapytań w bazach danych

Systemy GIS Tworzenie zapytań w bazach danych Systemy GIS Tworzenie zapytań w bazach danych Wykład nr 6 Analizy danych w systemach GIS Jak pytać bazę danych, żeby otrzymać sensowną odpowiedź......czyli podstawy języka SQL INSERT, SELECT, DROP, UPDATE

Bardziej szczegółowo

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl Bazy danych Podstawy języka SQL Dr inż. Paweł Kasprowski pawel@kasprowski.pl Plan wykładu Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność danych Współbieżność

Bardziej szczegółowo

Oracle11g: Wprowadzenie do SQL

Oracle11g: Wprowadzenie do SQL Oracle11g: Wprowadzenie do SQL OPIS: Kurs ten oferuje uczestnikom wprowadzenie do technologii bazy Oracle11g, koncepcji bazy relacyjnej i efektywnego języka programowania o nazwie SQL. Kurs dostarczy twórcom

Bardziej szczegółowo

Kurs programowania aplikacji bazodanowych

Kurs programowania aplikacji bazodanowych Wykład 5 Instytut Informatyki Uniwersytet Wrocławski Plan wykładu Wprowadzenie do XPO Podstawowe obiekty Utrwalanie obiektów Transakcje i współbieżność Wzorzec unit of work Odwzorowanie dziedziczenia Asocjacje

Bardziej szczegółowo

DECLARE VARIABLE zmienna1 typ danych; BEGIN

DECLARE VARIABLE zmienna1 typ danych; BEGIN Procedury zapamiętane w Interbase - samodzielne programy napisane w specjalnym języku (właściwym dla serwera baz danych Interbase), który umożliwia tworzenie zapytań, pętli, instrukcji warunkowych itp.;

Bardziej szczegółowo

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

Laboratorium nr 4. Temat: SQL część II. Polecenia DML Laboratorium nr 4 Temat: SQL część II Polecenia DML DML DML (Data Manipulation Language) słuŝy do wykonywania operacji na danych do ich umieszczania w bazie, kasowania, przeglądania, zmiany. NajwaŜniejsze

Bardziej szczegółowo

SQL (ang. Structured Query Language)

SQL (ang. Structured Query Language) SQL (ang. Structured Query Language) SELECT pobranie danych z bazy, INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Rozkaz INSERT Rozkaz insert dodaje nowe wiersze

Bardziej szczegółowo

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe Architektury Usług Internetowych Laboratorium 2. Usługi sieciowe Wstęp Celem laboratorium jest zapoznanie się z modelem usług sieciowych na przykładzie prostego serwera Apache Axis2. Apache Axis2 Apache

Bardziej szczegółowo

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x Wdrożenie modułu płatności eservice dla systemu oscommerce 2.3.x - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie

Bardziej szczegółowo

Projektowanie systemów baz danych

Projektowanie systemów baz danych Projektowanie systemów baz danych Seweryn Dobrzelewski 4. Projektowanie DBMS 1 SQL SQL (ang. Structured Query Language) Język SQL jest strukturalnym językiem zapewniającym możliwość wydawania poleceń do

Bardziej szczegółowo

Wdrożenie modułu płatności eservice. dla systemu Zen Cart 1.3.9 1.5

Wdrożenie modułu płatności eservice. dla systemu Zen Cart 1.3.9 1.5 Wdrożenie modułu płatności eservice dla systemu Zen Cart 1.3.9 1.5 - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie

Bardziej szczegółowo

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

Wdrożenie modułu płatności eservice. dla systemu Magento 1.4 1.9 Wdrożenie modułu płatności eservice dla systemu Magento 1.4 1.9 - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie do

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 13 Marcin Młotkowski 27 maja 2015 Plan wykładu Trwałość obiektów 1 Trwałość obiektów 2 Marcin Młotkowski Programowanie obiektowe 2 / 29 Trwałość (persistence) Definicja Cecha

Bardziej szczegółowo

z przedmiotu: Techniki Informatyczne Stanisław Flaga (stanislaw.flaga@agh.edu.pl)

z przedmiotu: Techniki Informatyczne Stanisław Flaga (stanislaw.flaga@agh.edu.pl) mysql relacyjna baza danych wstęp Materiały pomocnicze do laboratorium z przedmiotu: Techniki Informatyczne Stanisław Flaga () Wydział Inżynierii Mechanicznej i Robotyki Katedra Automatyzacji Procesów

Bardziej szczegółowo

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Wprowadzenie do projektowania i wykorzystania baz danych Relacje Wprowadzenie do projektowania i wykorzystania baz danych Relacje Katarzyna Klessa Dygresja nt. operatorów SELECT 2^2 SELECT 2^30 SELECT 50^50 2 Dygresja nt. operatorów SELECT 2^30 --Bitwise exclusive OR

Bardziej szczegółowo

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

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego. 77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego. Przy modelowaniu bazy danych możemy wyróżnić następujące typy połączeń relacyjnych: jeden do wielu, jeden do jednego, wiele

Bardziej szczegółowo

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

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych Języki programowania wysokiego poziomu PHP cz.4. Bazy danych PHP i bazy danych PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych: MySQL moduł mysql albo jego nowsza wersja mysqli (moduł

Bardziej szczegółowo

15. Funkcje i procedury składowane PL/SQL

15. Funkcje i procedury składowane PL/SQL 15. Funkcje i procedury składowane PLSQL 15.1. SQL i PLSQL (Structured Query Language - SQL) Język zapytań strukturalnych SQL jest zbiorem poleceń, za pomocą których programy i uŝytkownicy uzyskują dostęp

Bardziej szczegółowo

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

NHibernate Hibernate dla platformy.net. Hibernate posiada także dużą społeczność, zatem nietrudno uzyskać jakieś wsparcie w przypadku problemów. Hibernate Każda poważniejsza aplikacja wymaga przechowywania danych w jakiejś bazie danych. Można realizować to na wiele sposobów. Można obsługę bazy danych pisać samodzielnie, do zera, albo skorzystać

Bardziej szczegółowo

Bazy danych - wykład wstępny

Bazy danych - wykład wstępny Bazy danych - wykład wstępny Wykład: baza danych, modele, hierarchiczny, sieciowy, relacyjny, obiektowy, schemat logiczny, tabela, kwerenda, SQL, rekord, krotka, pole, atrybut, klucz podstawowy, relacja,

Bardziej szczegółowo

Dokumentacja interfejsu MySQL. Platforma BSMS.PL Instrukcja podłączenia po przez mysql

Dokumentacja interfejsu MySQL. Platforma BSMS.PL Instrukcja podłączenia po przez mysql Dokumentacja interfejsu MySQL Platforma BSMS.PL Instrukcja podłączenia po przez mysql Dokumentacja interfejsu mysql (strona 2) SPIS TREŚCI 1. Zawartość dokumentu str.3 2. Informacje ogólne 2.1 Zastosowanie

Bardziej szczegółowo

Paweł Cieśla. Dokumentacja projektu

Paweł Cieśla. Dokumentacja projektu Paweł Cieśla Dokumentacja projektu Projekt Project1 został utworzony i skompilowany na próbnej wersji Delphi XE 4. Po uruchomieniu programu należy kliknąć przycisk Wczytaj plik tekstowy, następnie wskazać

Bardziej szczegółowo

Gdzie jest moja tabela?

Gdzie jest moja tabela? Gdzie jest moja tabela? Czyli jak sobie radzić w Javie i SQL gdy zmienia się schemat bazy danych. Tomasz Skutnik 21 Listopada 2011 r UWIELBIAM piratów programować. Dziś koduję sklep internetowy. Jak rozmawiać

Bardziej szczegółowo

Podstawy programowania III WYKŁAD 2

Podstawy programowania III WYKŁAD 2 Podstawy programowania III WYKŁAD 2 Jan Kazimirski 1 Komunikacja z bazami danych 2 PHP i bazy danych PHP zapewnia dostęp do wielu popularnych baz danych. Kilka poziomów abstrakcji: Funkcje obsługujące

Bardziej szczegółowo

akademia androida Składowanie danych część VI

akademia androida Składowanie danych część VI akademia androida Składowanie danych część VI agenda 1. SharedPreferences. 2. Pamięć wewnętrzna i karta SD. 3. Pliki w katalogach /res/raw i /res/xml. 4. Baza danych SQLite. 5. Zadanie. 1. SharedPreferences.

Bardziej szczegółowo

Ref. 7 - Język SQL - polecenia DDL i DML

Ref. 7 - Język SQL - polecenia DDL i DML Ref. 7 - Język SQL - polecenia DDL i DML Wprowadzenie do języka SQL. Polecenia generujące strukturę bazy danych: CREATE, ALTER i DROP. Polecenia: wprowadzające dane do bazy - INSERT, modyfikujące zawartość

Bardziej szczegółowo

Wprowadzenie do Doctrine ORM

Wprowadzenie do Doctrine ORM Wprowadzenie do Doctrine ORM Przygotowanie środowiska Do wykonania ćwiczenia konieczne będzie zainstalowanie narzędzia Composer i odpowiednie skonfigurowanie Netbeans (Tools->Options->Framework & Tools->Composer,

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi 1 Rozdział 1 Wprowadzenie do PHP i MySQL Opis: W tym rozdziale kursanci poznają szczegółową charakterystykę

Bardziej szczegółowo

Relacyjne bazy danych a XML

Relacyjne bazy danych a XML Relacyjne bazy danych a XML Anna Pankowska aniap@amu.edu.pl Internet, SQLiXMLwbiznesie Internet nieoceniony sposób komunikacji z klientami, pracownikami i partnerami handlowymi przyspiesza transakcje finansowe

Bardziej szczegółowo

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS UNIWERSYTET ZIELONOGÓRSKI INSTYTUT INFORMATYKI I ELEKTROTECHNIKI ZAKŁAD INŻYNIERII KOMPUTEROWEJ Przygotowali: mgr inż. Arkadiusz Bukowiec mgr inż. Remigiusz Wiśniewski LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Bardziej szczegółowo

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań, 04.03.2010

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań, 04.03.2010 Bezpieczeństwo interoperacyjnego hostingu Gerard Frankowski, Zespół Bezpieczeństwa PCSS 4. Konferencja MIC Nowoczesne technologie bliżej nas Poznań, 04.03.2010 1 Agenda Wprowadzenie Zespół Bezpieczeństwa

Bardziej szczegółowo

Programowanie wielowarstwowe i komponentowe

Programowanie wielowarstwowe i komponentowe Programowanie wielowarstwowe i komponentowe HIBERNATE CD. Rodzaje relacji Jeden do wielu Pojedyncza Osoba ma wiele Wpisów Wiele do jednego Wiele Wpisów należy do jednej Osoby Jeden do jednego Pojedyncza

Bardziej szczegółowo

QUERY język zapytań do tworzenia raportów w AS/400

QUERY język zapytań do tworzenia raportów w AS/400 QUERY język zapytań do tworzenia raportów w AS/400 Dariusz Bober Katedra Informatyki Politechniki Lubelskiej Streszczenie: W artykule przedstawiony został język QUERY, standardowe narzędzie pracy administratora

Bardziej szczegółowo

Smarty PHP. Leksykon kieszonkowy

Smarty PHP. Leksykon kieszonkowy IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK

Bardziej szczegółowo

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

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych SQL SQL (ang. Structured Query Language): strukturalny język zapytań używany do tworzenia strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych

Bardziej szczegółowo

Język SQL, zajęcia nr 1

Język SQL, zajęcia nr 1 Język SQL, zajęcia nr 1 SQL - Structured Query Language Strukturalny język zapytań Login: student Hasło: stmeil14 Baza danych: st https://194.29.155.15/phpmyadmin/index.php Andrzej Grzebielec Najpopularniejsze

Bardziej szczegółowo

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Wprowadzenie do JDBC z wykorzystaniem bazy H2 Wprowadzenie do JDBC z wykorzystaniem bazy H2 JDBC (ang. Java DataBase Connectivity). Biblioteka stanowiąca interfejs umożliwiający aplikacjom napisanym w języku Java porozumiewać się z bazami danych za

Bardziej szczegółowo

BAZY DANYCH LABORATORIUM. Studia niestacjonarne I stopnia

BAZY DANYCH LABORATORIUM. Studia niestacjonarne I stopnia BAZY DANYCH LABORATORIUM Studia niestacjonarne I stopnia Gdańsk, 2011 1. Cel zajęć Celem zajęć laboratoryjnych jest wyrobienie praktycznej umiejętności tworzenia modelu logicznego danych a nastepnie implementacji

Bardziej szczegółowo

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

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4 Wdrożenie modułu płatności eservice dla systemu Gekosale 1.4 - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie do integracji...

Bardziej szczegółowo

NARZĘDZIA WIZUALIZACJI

NARZĘDZIA WIZUALIZACJI Kurs interaktywnej komunikacji wizualnej NARZĘDZIA WIZUALIZACJI Andrzej Łachwa andrzej.lachwa@uj.edu.pl 3 4/8 Zobacz film: http://www.ted.com/talks/david_mccandless_the_beauty_of_dat a_visualization.html

Bardziej szczegółowo

Programowanie w Ruby

Programowanie w Ruby Programowanie w Ruby Wykład 11 Marcin Młotkowski 19 grudnia 2014 Plan wykładu 1 Projekt 2 Modele danych 3 4 5 Marcin Młotkowski Programowanie w Ruby 2 / 38 Zasady Projekt Składowe projektu przynajmniej

Bardziej szczegółowo

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

Tworzenie raportów XML Publisher przy użyciu Data Templates Tworzenie raportów XML Publisher przy użyciu Data Templates Wykorzystanie Szablonów Danych (ang. Data templates) jest to jedna z metod tworzenia raportów w technologii XML Publisher bez użycia narzędzia

Bardziej szczegółowo

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

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe. Warstwa integracji wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe. 1. Ukrycie logiki dostępu do danych w osobnej warstwie 2. Oddzielenie mechanizmów trwałości od modelu obiektowego Pięciowarstwowy

Bardziej szczegółowo

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

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Przestrzenne bazy danych Podstawy języka SQL

Przestrzenne bazy danych Podstawy języka SQL Przestrzenne bazy danych Podstawy języka SQL Stanisława Porzycka-Strzelczyk porzycka@agh.edu.pl home.agh.edu.pl/~porzycka Konsultacje: wtorek godzina 16-17, p. 350 A (budynek A0) 1 SQL Język SQL (ang.structured

Bardziej szczegółowo

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1 1 LINQ 1 1. Cel zajęć Celem zajęć jest zapoznanie się z technologią LINQ oraz tworzeniem trójwarstwowej aplikacji internetowej. 2. Zadanie Proszę przygotować aplikację WWW, która: będzie pozwalała na generowanie

Bardziej szczegółowo

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Modelowanie hierarchicznych struktur w relacyjnych bazach danych Modelowanie hierarchicznych struktur w relacyjnych bazach danych Wiktor Warmus (wiktorwarmus@gmail.com) Kamil Witecki (kamil@witecki.net.pl) 5 maja 2010 Motywacje Teoria relacyjnych baz danych Do czego

Bardziej szczegółowo

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości część 2 Zaprojektowaliśmy stronę dodaj_dzial.aspx proszę jednak spróbować dodać nowy dział nie podając jego nazwy

Bardziej szczegółowo

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście. Rodzaje triggerów Triggery DML na tabelach INSERT, UPDATE, DELETE Triggery na widokach INSTEAD OF Triggery DDL CREATE, ALTER, DROP Triggery na bazie danych SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN

Bardziej szczegółowo

Relacyjne bazy danych. Podstawy SQL

Relacyjne bazy danych. Podstawy SQL Relacyjne bazy danych Podstawy SQL Język SQL SQL (Structured Query Language) język umożliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw.

Bardziej szczegółowo

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Składowe wyzwalacza ( ECA ): określenie zdarzenia ( Event ) określenie

Bardziej szczegółowo

BAZY DANYCH. CREATE TABLE dbo.wydzialy (ID INT, Akronim VARCHAR(4) NOT NULL, Wydzial VARCHAR(30) NOT NULL, CONSTRAINT Kluczyk PRIMARY KEY(ID) )

BAZY DANYCH. CREATE TABLE dbo.wydzialy (ID INT, Akronim VARCHAR(4) NOT NULL, Wydzial VARCHAR(30) NOT NULL, CONSTRAINT Kluczyk PRIMARY KEY(ID) ) BAZY DANYCH laboratorium 3 tworzenie, modyfikacje i usuwanie tabel, operacje na danych Cel Stworzenie w ramach bazy danych Biblioteka nowych tabel według specyfikacji (CREATE TABLE Ustawianie właściwości

Bardziej szczegółowo

Wprowadzenie do projektu QualitySpy

Wprowadzenie do projektu QualitySpy Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować

Bardziej szczegółowo

Programowanie w Ruby

Programowanie w Ruby Programowanie w Ruby Wykład 11 Marcin Młotkowski 19 grudnia 2012 Plan wykładu Modele danych i bazy danych Modele danych Migracje Bazy danych w Railsach Rusztowania Walidacja modeli Modele danych Definicje

Bardziej szczegółowo

Bazy danych. Dr inż. Paweł Kasprowski

Bazy danych. Dr inż. Paweł Kasprowski Plan wykładu Bazy danych Podstawy relacyjnego modelu danych Dr inż. Paweł Kasprowski pawel@kasprowski.pl Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność

Bardziej szczegółowo

Internetowe bazy danych

Internetowe bazy danych Wyższa Szkoła Technologii Teleinformatycznych w Świdnicy Internetowe bazy danych wykład 3 dr inż. Jacek Mazurkiewicz e-mail: Jacek.Mazurkiewicz@pwr.wroc.pl Typy tabel MySQL domyślny MyISAM inne możliwe:

Bardziej szczegółowo

Wstęp wprowadzający do laboratorium 2. mgr inż. Rafał Grycuk

Wstęp wprowadzający do laboratorium 2. mgr inż. Rafał Grycuk Wstęp wprowadzający do laboratorium 2 mgr inż. Rafał Grycuk Plan prezentacji 1. Czym jest T-SQL i czym się różni od standardu SQL 2. Typy zapytań 3. Zapytanie typu SELECT 4. Słowo o indeksach T-SQL (1)

Bardziej szczegółowo

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

SYSTEM MONITORINGU PARAMETRÓW WĘZŁÓW PRZECHOWYWANIA DANYCH DLA PROJEKTU KRAJOWY MAGAZYN DANYCH PODRĘCZNIK DEWELOPERA SYSTEM MONITORINGU PARAMETRÓW WĘZŁÓW PRZECHOWYWANIA DANYCH DLA PROJEKTU KRAJOWY MAGAZYN DANYCH PODRĘCZNIK DEWELOPERA 1 Spis treści: Wstęp... 3 Opis architektury systemu... 4 Architektura modułu KMD...

Bardziej szczegółowo

Biuletyn techniczny. Funkcje dodatkowe dla Clarion Report Writer CDN OPT!MA 11.0. Copyright 2006 COMARCH S.A.

Biuletyn techniczny. Funkcje dodatkowe dla Clarion Report Writer CDN OPT!MA 11.0. Copyright 2006 COMARCH S.A. Biuletyn techniczny CDN OPT!MA 11.0 Funkcje dodatkowe dla Clarion Report Writer Copyright 2006 COMARCH S.A. Funkcje dodatkowe dla Clarion Report Writer (CRW) System CDN OPT!MA oferuje zbiór kilkunastu

Bardziej szczegółowo

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

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi Systemy baz danych w zarządzaniu przedsiębiorstwem W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi Proces zarządzania danymi Zarządzanie danymi obejmuje czynności: gromadzenie

Bardziej szczegółowo

Projektowanie aplikacji z bazami danych

Projektowanie aplikacji z bazami danych Systemy mapowania relacyjno-obiektowego Instytut Informatyki Uniwersytet Wrocławski Plan wykładu Wprowadzenie do trwałości Niedopasowanie paradygmatów Architektura warstwowa Czym jest ORM? Problemy i pytania

Bardziej szczegółowo

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3 3 ASP.NET MVC Podstawy 1 1. Cel zajęć Celem zajęć jest zapoznanie się z podstawami ASP.NET MVC 2.0 Framework. 2. Zadanie Proszę zbudować prostą aplikację WWW przy zastosowaniu framework a ASP.NET MVC 2.0

Bardziej szczegółowo

Kowalski Marcin 156439 Wrocław, dn. 3.06.2009 Jaśkiewicz Kamil 148592. Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Kowalski Marcin 156439 Wrocław, dn. 3.06.2009 Jaśkiewicz Kamil 148592. Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami Kowalski Marcin 156439 Wrocław, dn. 3.06.2009 Jaśkiewicz Kamil 148592 Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami Spis treści Założenia Projektowe...1 Schemat Bazy Danych...1

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

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

LINQ TO SQL w dużym skrócie jest to zintegrowany język zapytao pozwalający na mapowanie relacyjnych baz danych na model obiektowy. LINQ TO SQL w dużym skrócie jest to zintegrowany język zapytao pozwalający na mapowanie relacyjnych baz danych na model obiektowy. Zanim ktokolwiek postanowi użyd tego w swoim projekcie, należy zaznaczyd

Bardziej szczegółowo

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013 Prowadzący: mgr inż. Tomasz Jaworski Strona WWW: http://tjaworski.kis.p.lodz.pl/ Visual Basic.NET dostęp do bazy danych Baza Microsoft SQL Server Compact

Bardziej szczegółowo

Baza danych. Baza danych to:

Baza danych. Baza danych to: Baza danych Baza danych to: zbiór danych o określonej strukturze, zapisany na zewnętrznym nośniku (najczęściej dysku twardym komputera), mogący zaspokoić potrzeby wielu użytkowników korzystających z niego

Bardziej szczegółowo

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

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

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

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław 9.06.2015 r. Bazy danych dla producenta mebli tapicerowanych Bartosz Janiak Marcin Sikora Wrocław 9.06.2015 r. Założenia Stworzyć system bazodanowy dla małej firmy produkującej meble tapicerowane. Projekt ma umożliwić

Bardziej szczegółowo

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia? D D L S Q L Co to jest DDL SQL i jakie s jego ą podstawowe polecenia? D D L S Q L - p o d s t a w y DDL SQL (Data Definition Language) Jest to zbiór instrukcji i definicji danych, którym posługujemy się

Bardziej szczegółowo

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

1 Wprowadzenie do J2EE

1 Wprowadzenie do J2EE Wprowadzenie do J2EE 1 Plan prezentacji 2 Wprowadzenie do Java 2 Enterprise Edition Aplikacje J2EE Serwer aplikacji J2EE Główne cele V Szkoły PLOUG - nowe podejścia do konstrukcji aplikacji J2EE Java 2

Bardziej szczegółowo

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

P o d s t a w y j ę z y k a S Q L P o d s t a w y j ę z y k a S Q L Adam Cakudis IFP UAM Użytkownicy System informatyczny Aplikacja Aplikacja Aplikacja System bazy danych System zarządzania baz ą danych Schemat Baza danych K o n c e p

Bardziej szczegółowo

Cele. Definiowanie wyzwalaczy

Cele. Definiowanie wyzwalaczy WYZWALACZE Definiowanie wyzwalaczy Cele Wyjaśnić cel istnienia wyzwalaczy Przedyskutować zalety wyzwalaczy Wymienić i opisać cztery typy wyzwalaczy wspieranych przez Adaptive Server Anywhere Opisać dwa

Bardziej szczegółowo

Klasy abstrakcyjne i interfejsy

Klasy abstrakcyjne i interfejsy Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie

Bardziej szczegółowo

I. Interfejs użytkownika.

I. Interfejs użytkownika. Ćwiczenia z użytkowania systemu MFG/PRO 1 I. Interfejs użytkownika. MFG/PRO w wersji eb2 umożliwia wybór użytkownikowi jednego z trzech dostępnych interfejsów graficznych: a) tekstowego (wybór z menu:

Bardziej szczegółowo

Generowanie raportów

Generowanie raportów 1 Generowanie raportów 1. Wprowadzenie przykładowy problem, podstawowe własności narzędzi raportujących. 2. JasperReports struktura raportu, parametry, zmienne i pola, generowanie raportu (API). 3. ireport

Bardziej szczegółowo

Programowanie MorphX Ax

Programowanie MorphX Ax Administrowanie Czym jest system ERP? do systemu Dynamics Ax Obsługa systemu Dynamics Ax Wyszukiwanie informacji, filtrowanie, sortowanie rekordów IntelliMorph : ukrywanie i pokazywanie ukrytych kolumn

Bardziej szczegółowo

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8 Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8 Bazowy skrypt PHP do ćwiczeń z bazą MySQL: Utwórz skrypt o nazwie cw7.php zawierający następującą treść (uzupełniając go o właściwą nazwę uŝytkownika

Bardziej szczegółowo

Bazy Danych i Usługi Sieciowe

Bazy Danych i Usługi Sieciowe Bazy Danych i Usługi Sieciowe Ćwiczenia I Paweł Daniluk Wydział Fizyki Jesień 2011 P. Daniluk (Wydział Fizyki) BDiUS ćw. I Jesień 2011 1 / 15 Strona wykładu http://bioexploratorium.pl/wiki/ Bazy_Danych_i_Usługi_Sieciowe_-_2011z

Bardziej szczegółowo

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Dr inż. Zofia Kruczkiewicz Dwa sposoby tworzenia apletów Dwa sposoby

Bardziej szczegółowo

JAVA I BAZY DANYCH. MATERIAŁY: http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html

JAVA I BAZY DANYCH. MATERIAŁY: http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html JAVA I BAZY DANYCH ZAGADNIENIA: wprowadzenie; JDBC; komunikacja z bazą danych; HSQLDB. MATERIAŁY: http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK

Bardziej szczegółowo

Połączenie Partnera z serwisem JustPay poprzez - METODĘ 2

Połączenie Partnera z serwisem JustPay poprzez - METODĘ 2 Połączenie Partnera z serwisem JustPay poprzez - METODĘ 2 Generowanie kodów: po stronie Partnera Weryfikacja kodów: po stronie Partnera Spis treści 1. Kolejne kroki w stworzeniu własnego serwisu 2. Jak

Bardziej szczegółowo

10 Płatności [ Płatności ] 69

10 Płatności [ Płatności ] 69 10 Płatności [ Płatności ] 69 Ostatnia zakładka w oknie modułu Płatności pozwala na podgląd stanu konkretnego konta. Dodatkowo, możemy także filtrować te informacje, prosząc o wyświetlenie interesującego

Bardziej szczegółowo

Projektowanie i programowanie aplikacji biznesowych. wykład 1

Projektowanie i programowanie aplikacji biznesowych. wykład 1 Projektowanie i programowanie aplikacji biznesowych wykład 1 1 Baza danych SQLite Autorem biblioteki SQLite jest Richard Hipp z firmy Hwaci - Applied Software Research. Pierwsza wersja tego oprogramowania

Bardziej szczegółowo

Tworzenie aplikacji bazodanowych w delphi dla dużych baz danych FRAMEWORK IMPET

Tworzenie aplikacji bazodanowych w delphi dla dużych baz danych FRAMEWORK IMPET Tworzenie aplikacji bazodanowych w delphi dla dużych baz danych FRAMEWORK IMPET Maciej Szymczak, maj 2001 soft@home.pl Ostatnia aktualizacja: 2012-03-31 1 Plan widoczny podczas całego wykładu Numer slajdu

Bardziej szczegółowo

Administracja i programowanie pod Microsoft SQL Server 2000

Administracja i programowanie pod Microsoft SQL Server 2000 Administracja i programowanie pod Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 5 Kursory w SQL Serverze Wprowadzenie Modele kursorów Używanie kursorów Rodzaje kursorów Praca

Bardziej szczegółowo

Tworzenie bazy danych na przykładzie Access

Tworzenie bazy danych na przykładzie Access Tworzenie bazy danych na przykładzie Access Tworzenie tabeli Kwerendy (zapytania) Selekcja Projekcja Złączenie Relacja 1 Relacja 2 Tworzenie kwedend w widoku projektu Wybór tabeli (tabel) źródłowych Wybieramy

Bardziej szczegółowo

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

4 Web Forms i ASP.NET...149 Web Forms...150 Programowanie Web Forms...150 Możliwości Web Forms...151 Przetwarzanie Web Forms...152 Wstęp...xv 1 Rozpoczynamy...1 Co to jest ASP.NET?...3 W jaki sposób ASP.NET pasuje do.net Framework...4 Co to jest.net Framework?...4 Czym są Active Server Pages (ASP)?...5 Ustawienia dla ASP.NET...7 Systemy

Bardziej szczegółowo

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski Bazy danych II Andrzej Grzybowski Instytut Fizyki, Uniwersytet Śląski Wykład 12 Zastosowanie PHP do programowania aplikacji baz danych MySQL Wsparcie programowania w PHP baz danych MySQL Obsługa baz danych

Bardziej szczegółowo