SlideShare a Scribd company logo
1 of 52
Download to read offline
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Zastosowanie obiektowych baz danych na
przykładzie db4o.
Marcin Stachniuk
mstachniuk@gmail.com
15 marca 2010
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 1/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstęp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl życia obiektów
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 2/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstęp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl życia obiektów
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 3/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Trochę historii
Trochę historii...
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 4/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Zalety relacyjnych baz danych
Popularność
Szeroko stosowane w rozwiązaniach komercyjnych
Niezależność od wykorzystywanego języka programowania
Możliwości optymalizacji
Łatwość projektowania
Autoryzacja dostępu
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 5/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Wady relacyjnych baz danych
Niezgodność impedancji
Schemat struktury danych gubi znaczną część semantyki
danych
Konieczność budowania skomplikowanych zapytań SQL
Konieczność zatrudniania administratora bazy danych
Brak złożonych obiektów
Rozproszenie danych w wielu tablicach
Nietrzymanie się standardów
Konieczność mapowania obiektowo-relacyjnego
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 6/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Problem mapowania obiektowo relacyjnego (ORM)
Architektura wielowarstwowa
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 7/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Problem mapowania obiektowo relacyjnego (ORM)
Architektura wielowarstwowa
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 8/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Problem mapowania obiektowo relacyjnego (ORM)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 9/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Rozwiązanie problemu
Jak ułatwić sobie życie?
Wykorzystać obiektową bazę danych!
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 10/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Rozwiązanie problemu
Jak ułatwić sobie życie?
Wykorzystać obiektową bazę danych!
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 10/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstęp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl życia obiektów
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 11/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Podstawy db4o
www.db4o.com
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 12/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Charakterystyka db4o
Czym jest db4o?
Obiektowa baza danych open-source
Dwie licencje: darmowa i komercyjna
Natywna implementacja dla języków Java i .NET
Duża społeczność (60000 zarejestrowanych developerów)
Ponad milion ściągnięć
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 13/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Charakterystyka db4o
Firmy korzystające z db4o:
BMW Boeing
Bosch IBM
Intel Ricoh
Seagate INDRA Sistemas
Merrill Lynch Postbank
Macrix Software Mandala IT
Eastern Data Riege Software International
Die Mobilanten ITAnyplace
Pragmatyxs Electrabel
Juvander TradeWeapon
Long Island Housing Services MR Controls
Novator Clarity Medical
Syft Technologies Arum Systems
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 14/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Charakterystyka db4o
Dla kogo db4o?
Małe i średnie projekty (studenckie projekty!!!)
Nowe niskobudżetowe projekty
Gdzie nie ma narzuconej technologii wykorzystywanej bazy
danych
Baza może działać na pliku dyskowym (podobnie jak: SQLite)
Brak konieczności stawiania osobnego serwera bazodanowego
(ale oczywiście można)
Świetnie się nadaje do aplikacji typu standalone
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 15/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstęp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl życia obiektów
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 16/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Pierwsze kroki
Zanim zaczniemy programować:
Ściągnięcie db4o
Podpięcie JARa do projektu
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 17/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Pierwsza klasa cz.1
1 public class User {
2
3 private String name;
4 private String surname;
5
6 public String getName() {
7 return name;
8 }
9
10 public void setName(String name) {
11 this.name = name;
12 }
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 18/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Pierwsza klasa cz.2
1 public String getSurname() {
2 return surname;
3 }
4
5 public void setSurname(String surname) {
6 this.surname = surname;
7 }
8
9 @Override
10 public String toString() {
11 return name + ’’ ’’ + surname;
12 }
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 19/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Zapisywanie obiektu w bazie danych
1 public void save() {
2 // Otwarcie połączenia z bazą
3 ObjectContainer db = Db4o.openFile(’’baza.yap’’);
4 try {
5 // zapis
6 db.store(this);
7 System.out.println(’’Zapisano: ’’+this.toString());
8 } finally {
9 // zamknięcie połączenia
10 db.close();
11 }
12 }
13
14 public static void main(String [] args) {
15 User user = new User();
16 user.setName(’’Jan’’);
17 user.setSurname(’’Kowalski’’);
18 user.save();
19 }
User.java (wersja 1)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 20/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Wyświetlanie wszystkich obiektów z bazy danych
1 public static void showAllUsers() {
2 ObjectContainer db = Db4o.openFile(’’baza.yap’’);
3 try {
4 ObjectSet<User> userSet = db.queryByExample(User.class);
5 //ObjectSet<User> userSet = db.query(User.class);
6 for(User u : userSet) {
7 System.out.println(’’Odczytano: ’’+u);
8 }
9 } finally {
10 db.close();
11 }
12 }
User.java (wersja 2)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 21/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Zapytania poprzez QueryByExample
1 public static void showAllByName(String name) {
2 ObjectContainer db = Db4o.openFile(’’baza.yap’’);
3 try {
4 User user = new User();
5 user.setName(name);
6 ObjectSet<User> userSet = db.queryByExample(user);
7 for(User u : userSet) {
8 System.out.println(’’Znaleziono: ’’+u);
9 }
10 } finally {
11 db.close();
12 }
13 }
User.java (wersja 3)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 22/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Zapytania poprzez QueryByExample
Jak działa QueryByExample?
Wyszukuje obiekty, które mają te same pola co ustawiony
„przykład”
Dla pól ustawionych na null dopasowuje dowolne wartości
Zwraca ObjectSet poszukiwanych obiektów
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 23/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Modyfikacja obiektów
1 public static void changeAllNames(String oldName, String newName) {
2 ObjectContainer db = Db4o.openFile(’’baza.yap’’);
3 try {
4 User user = new User();
5 user.setName(oldName);
6 ObjectSet<User> userSet = db.queryByExample(user);
7 for(User u : userSet) {
8 u.setName(newName);
9 db.store(u);
10 }
11 } finally {
12 db.close();
13 }
14 }
User.java (wersja 4)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 24/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Usuwanie obiektów
1 public static void deleteAllByNames(String name) {
2 ObjectContainer db = Db4o.openFile(’’baza.yap’’);
3 try {
4 User user = new User();
5 user.setName(name);
6 ObjectSet<User> userSet = db.queryByExample(user);
7 for(User u : userSet) {
8 db.delete(u);
9 }
10 } finally {
11 db.close();
12 }
13 }
User.java (wersja 5)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 25/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstęp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl życia obiektów
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 26/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Cykl życia obiektów
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 27/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Cykl życia obiektów
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 28/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Cykl życia obiektów
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 29/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Cykl życia obiektów
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 30/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Cykl życia obiektów
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 31/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Cykl życia obiektów
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 32/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Problem zerwanego połączenia
Aby zmodyfikować obiekt, należy pobrać go z bazy, zmodyfikować i
zachować, a wszystko to w ramach jednego połączenia z bazą.
Warto więc podtrzymywać połączenie (przynajmniej przez jakiś
czas).
Rozwiązanie: Wykorzystać Db4oUtil.
Db4oUtil.java
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 33/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstęp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl życia obiektów
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 34/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Użycie Db4oUtil.java
Schemat postępowania z Db4oUtil.java:
1 // ustawienie nazwy pliku
2 Db4oUtil.setDatabaseFilename(’’baza.yap’’);
3
4 // pobranie obiektu ObjectContainer
5 ObjectContainer db = Db4oUtil.getObjectContainer();
6
7 // Kolejne operacje...
8
9 // Zamknięcie ObjectContainer gdy koniec operacji
10 Db4oUtil.closeObjectContainer();
11
12 // zamkniecie wszystkiego, przy kończeniu aplikacji
13 Db4oUtil.shutdown();
User.java (wersja 6)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 35/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Aktualizacja usuwanych obiektów
Gdy usuwamy obiekty z ObjectSet, to aby zaktualizować zbiór,
trzeba ponownie wykonać zapytanie, w celu aktualizacji zbioru
obiektów.
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 36/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstęp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl życia obiektów
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 37/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Zaawansowane zapytania Native Queries
Zapytania poprzez Native Queries:
Rozszerzamy klasę com.db4o.query.Predicate<ExtentType>
Przeciążamy metodę: public boolean match(ExtentType et)
Wywołujemy: db.query(Predicate predicate);
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 38/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Zaawansowane zapytania Native Queries
Przykładowa implementacja Predicate:
1 public class NamePredicate extends Predicate<User>{
2
3 private String name;
4
5 public NamePredicate(String name) {
6 this.name = name.toLowerCase();
7 }
8
9 @Override
10 public boolean match(User user) {
11 if(user.getName() != null) {
12 return user.getName().toLowerCase().startsWith(name);
13 }
14 return false;
15 }
16 }
NamePredicate.java
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 39/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Zaawansowane zapytania Native Queries
Użycie predykatu:
1 System.out.println(’’Wyszukuje wszystkich Janów i janków’’);
2 ObjectSet<User> users = db.query(new NamePredicate(’’Jan’’));
3
4 System.out.println(’’Znaleziono:’’);
5 showUsers(users);
User.java (wersja 7)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 40/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Podsumowanie Native Queries
Charakterystyka Native Queries:
Łatwość implementacji
Czasochłonne i zasobożerne
Konieczność przejrzenia wszystkich obiektów z bazy danych
Jedyne język Java i pomysłowość programisty ogranicza
skomplikowanie zapytania
Wolniejsze niż SODA
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 41/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Sortowanie wyników
Implementacja Comparator<T>
Wywołanie: db.query(Predicate predicate, Comparator
comparator)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 42/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Sortowanie wyników
Użycie Comparator’a cz. 1:
1 public class UserComparator implements Comparator<User>{
2
3 public int compare(User u1, User u2) {
4 String surname1 = u1.getSurname();
5 String surname2 = u2.getSurname();
6 if(surname1 == null || surname2 == null) {
7 if(surname1 == null && surname2 != null) {
8 return -1;
9 } else if(surname1 != null && surname2 == null) {
10 return 1;
11 } else {
12 return compareNames(u1, u2);
13 }
14 } else {
15 if(surname1.equalsIgnoreCase(surname2)) {
16 return compareNames(u1, u2);
17 } else {
18 return surname1.compareToIgnoreCase(surname2);
19 }
20 }
21 }
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 43/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Sortowanie wyników
1 private int compareNames(User u1, User u2) {
2 String name1 = u1.getName();
3 String name2 = u2.getName();
4 if(name1 == null || name2 == null) {
5 if(name1 == null && name2 != null) {
6 return -1;
7 } else if(name1 != null && name2 == null) {
8 return 1;
9 } else {
10 return 0;
11 }
12 } else {
13 if(name1.equalsIgnoreCase(name2)) {
14 return 0;
15 } else {
16 return name1.compareToIgnoreCase(name2);
17 }
18 }
19 }
UserComparator.java
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 44/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Zaawansowane zapytania Native Queries
Użycie sortowania:
1 Comparator<User> comp = new UserComparator();
2 System.out.println(’’Wyszukuje wszystkich Janów i janków (posortowane)’’);
3 ObjectSet<User> users = db.query(new NamePredicate(’’Jan’’), comp);
4
5 System.out.println(’’Znaleziono:’’);
6 showUsers(users);
7
8 System.out.println(’’Odwrotne sortowanie:’’);
9 comp = Collections.reverseOrder(new UserComparator());
10 users = db.query(new NamePredicate(’’Jan’’), comp);
11
12 System.out.println(’’Znaleziono:’’);
13 showUsers(users);
User.java (wersja 8)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 45/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Transakcje
Użycie transakcji:
1 // zatwierdzenie transakcji
2 db.commit();
3
4 // wycofanie transakcji, aż do ostatniego punktu zatwierdzenia
5 db.rollback();
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 46/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstęp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl życia obiektów
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 47/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Czego się dzisiaj nauczyliśmy?
Czym jest obiektowa baza danych db4o i jak jej używać.
Wykorzystanie narzędzia Db4oUtil.java
Zapisywanie, modyfikacja obiektów: db.store(...)
Usuwanie obiektów: db.delete(...)
Wyszukiwanie Query By Example: db.queryByExample(...)
Wyszukiwanie za pomocą NativeQuery: db.query(...)
Sortowanie wyników: db.query(...) i Comparator<T>
Transakcje db.commit(), db.rollback()
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 48/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Więcej informacji
Strona projektu http://www.db4o.com/
Developer Community http://developer.db4o.com/
Object Manager 7.4 http://code.google.com/p/db4o-om/
db4o Tutorial for Java
http://www.db4o.com/about/productinformation/resources/db4o-7.4-tutorial-java.pdf
Db4oUtil (aka. The Easiest Way to Get Started With Db4o)
http://developer.db4o.com/Projects/useful_snippets/db4outil_aka._the_easiest_way_to_get_
started_with_db4o.html
http://www.spaceprogram.com/knowledge/2006/07/db4outil-aka-easiest-way-to-get.html
Najpopularniejsze imiona i nazwiska w Polsce w 2009 roku
http://www.mswia.gov.pl/portal.php?serwis=pl&dzial=87&id=3057&search=74623
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 49/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Pytania
Pytania?
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 50/51
Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie
Dziękuję
Dziękuję
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 51/51

More Related Content

More from MarcinStachniuk

GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedMarcinStachniuk
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedMarcinStachniuk
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąMarcinStachniuk
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychMarcinStachniuk
 
Inicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oInicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oMarcinStachniuk
 
Automatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseAutomatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseMarcinStachniuk
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017MarcinStachniuk
 
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...MarcinStachniuk
 
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...MarcinStachniuk
 
Continuous delivery w projekcie open source - Marcin Stachniuk
Continuous delivery w projekcie open source - Marcin StachniukContinuous delivery w projekcie open source - Marcin Stachniuk
Continuous delivery w projekcie open source - Marcin StachniukMarcinStachniuk
 
Zarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danychZarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danychMarcinStachniuk
 
Nowości w Javie 8 okiem programisty
Nowości w Javie 8 okiem programistyNowości w Javie 8 okiem programisty
Nowości w Javie 8 okiem programistyMarcinStachniuk
 
Liquibase - Zarządzanie zmianami w relacyjnych bazach danych
Liquibase - Zarządzanie zmianami w relacyjnych bazach danychLiquibase - Zarządzanie zmianami w relacyjnych bazach danych
Liquibase - Zarządzanie zmianami w relacyjnych bazach danychMarcinStachniuk
 
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...MarcinStachniuk
 
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...MarcinStachniuk
 

More from MarcinStachniuk (20)

GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learnedGraphQL - when REST API is to less - lessons learned
GraphQL - when REST API is to less - lessons learned
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learned
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologią
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danych
 
Inicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4oInicjatywa NoSQL na przykładzie db4o
Inicjatywa NoSQL na przykładzie db4o
 
Automatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object databaseAutomatic mechanism data migration between relational and object database
Automatic mechanism data migration between relational and object database
 
Wprowadzenie do J2ME
Wprowadzenie do J2MEWprowadzenie do J2ME
Wprowadzenie do J2ME
 
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
 
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
 
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
 
Continuous delivery w projekcie open source - Marcin Stachniuk
Continuous delivery w projekcie open source - Marcin StachniukContinuous delivery w projekcie open source - Marcin Stachniuk
Continuous delivery w projekcie open source - Marcin Stachniuk
 
Zarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danychZarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danych
 
Nowości w Javie 8 okiem programisty
Nowości w Javie 8 okiem programistyNowości w Javie 8 okiem programisty
Nowości w Javie 8 okiem programisty
 
Liquibase - Zarządzanie zmianami w relacyjnych bazach danych
Liquibase - Zarządzanie zmianami w relacyjnych bazach danychLiquibase - Zarządzanie zmianami w relacyjnych bazach danych
Liquibase - Zarządzanie zmianami w relacyjnych bazach danych
 
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
 
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
Poznaj lepiej swoje srodowisko programistyczne i zwieksz swoja produktywnosc ...
 

Zastosowanie obiektowych baz danych na przykładzie db4o

  • 1. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Zastosowanie obiektowych baz danych na przykładzie db4o. Marcin Stachniuk mstachniuk@gmail.com 15 marca 2010 Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 1/51
  • 2. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Plan prezentacji 1 Wstęp 2 Informacje o db4o 3 Podstawy db4o 4 Cykl życia obiektów 5 Db4oUtil 6 Zapytania 7 Podsumowanie Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 2/51
  • 3. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Plan prezentacji 1 Wstęp 2 Informacje o db4o 3 Podstawy db4o 4 Cykl życia obiektów 5 Db4oUtil 6 Zapytania 7 Podsumowanie Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 3/51
  • 4. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Trochę historii Trochę historii... Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 4/51
  • 5. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Zalety relacyjnych baz danych Popularność Szeroko stosowane w rozwiązaniach komercyjnych Niezależność od wykorzystywanego języka programowania Możliwości optymalizacji Łatwość projektowania Autoryzacja dostępu Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 5/51
  • 6. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Wady relacyjnych baz danych Niezgodność impedancji Schemat struktury danych gubi znaczną część semantyki danych Konieczność budowania skomplikowanych zapytań SQL Konieczność zatrudniania administratora bazy danych Brak złożonych obiektów Rozproszenie danych w wielu tablicach Nietrzymanie się standardów Konieczność mapowania obiektowo-relacyjnego Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 6/51
  • 7. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Problem mapowania obiektowo relacyjnego (ORM) Architektura wielowarstwowa Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 7/51
  • 8. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Problem mapowania obiektowo relacyjnego (ORM) Architektura wielowarstwowa Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 8/51
  • 9. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Problem mapowania obiektowo relacyjnego (ORM) Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 9/51
  • 10. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Rozwiązanie problemu Jak ułatwić sobie życie? Wykorzystać obiektową bazę danych! Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 10/51
  • 11. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Rozwiązanie problemu Jak ułatwić sobie życie? Wykorzystać obiektową bazę danych! Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 10/51
  • 12. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Plan prezentacji 1 Wstęp 2 Informacje o db4o 3 Podstawy db4o 4 Cykl życia obiektów 5 Db4oUtil 6 Zapytania 7 Podsumowanie Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 11/51
  • 13. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Podstawy db4o www.db4o.com Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 12/51
  • 14. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Charakterystyka db4o Czym jest db4o? Obiektowa baza danych open-source Dwie licencje: darmowa i komercyjna Natywna implementacja dla języków Java i .NET Duża społeczność (60000 zarejestrowanych developerów) Ponad milion ściągnięć Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 13/51
  • 15. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Charakterystyka db4o Firmy korzystające z db4o: BMW Boeing Bosch IBM Intel Ricoh Seagate INDRA Sistemas Merrill Lynch Postbank Macrix Software Mandala IT Eastern Data Riege Software International Die Mobilanten ITAnyplace Pragmatyxs Electrabel Juvander TradeWeapon Long Island Housing Services MR Controls Novator Clarity Medical Syft Technologies Arum Systems Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 14/51
  • 16. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Charakterystyka db4o Dla kogo db4o? Małe i średnie projekty (studenckie projekty!!!) Nowe niskobudżetowe projekty Gdzie nie ma narzuconej technologii wykorzystywanej bazy danych Baza może działać na pliku dyskowym (podobnie jak: SQLite) Brak konieczności stawiania osobnego serwera bazodanowego (ale oczywiście można) Świetnie się nadaje do aplikacji typu standalone Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 15/51
  • 17. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Plan prezentacji 1 Wstęp 2 Informacje o db4o 3 Podstawy db4o 4 Cykl życia obiektów 5 Db4oUtil 6 Zapytania 7 Podsumowanie Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 16/51
  • 18. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Pierwsze kroki Zanim zaczniemy programować: Ściągnięcie db4o Podpięcie JARa do projektu Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 17/51
  • 19. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Pierwsza klasa cz.1 1 public class User { 2 3 private String name; 4 private String surname; 5 6 public String getName() { 7 return name; 8 } 9 10 public void setName(String name) { 11 this.name = name; 12 } Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 18/51
  • 20. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Pierwsza klasa cz.2 1 public String getSurname() { 2 return surname; 3 } 4 5 public void setSurname(String surname) { 6 this.surname = surname; 7 } 8 9 @Override 10 public String toString() { 11 return name + ’’ ’’ + surname; 12 } Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 19/51
  • 21. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Zapisywanie obiektu w bazie danych 1 public void save() { 2 // Otwarcie połączenia z bazą 3 ObjectContainer db = Db4o.openFile(’’baza.yap’’); 4 try { 5 // zapis 6 db.store(this); 7 System.out.println(’’Zapisano: ’’+this.toString()); 8 } finally { 9 // zamknięcie połączenia 10 db.close(); 11 } 12 } 13 14 public static void main(String [] args) { 15 User user = new User(); 16 user.setName(’’Jan’’); 17 user.setSurname(’’Kowalski’’); 18 user.save(); 19 } User.java (wersja 1) Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 20/51
  • 22. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Wyświetlanie wszystkich obiektów z bazy danych 1 public static void showAllUsers() { 2 ObjectContainer db = Db4o.openFile(’’baza.yap’’); 3 try { 4 ObjectSet<User> userSet = db.queryByExample(User.class); 5 //ObjectSet<User> userSet = db.query(User.class); 6 for(User u : userSet) { 7 System.out.println(’’Odczytano: ’’+u); 8 } 9 } finally { 10 db.close(); 11 } 12 } User.java (wersja 2) Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 21/51
  • 23. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Zapytania poprzez QueryByExample 1 public static void showAllByName(String name) { 2 ObjectContainer db = Db4o.openFile(’’baza.yap’’); 3 try { 4 User user = new User(); 5 user.setName(name); 6 ObjectSet<User> userSet = db.queryByExample(user); 7 for(User u : userSet) { 8 System.out.println(’’Znaleziono: ’’+u); 9 } 10 } finally { 11 db.close(); 12 } 13 } User.java (wersja 3) Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 22/51
  • 24. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Zapytania poprzez QueryByExample Jak działa QueryByExample? Wyszukuje obiekty, które mają te same pola co ustawiony „przykład” Dla pól ustawionych na null dopasowuje dowolne wartości Zwraca ObjectSet poszukiwanych obiektów Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 23/51
  • 25. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Modyfikacja obiektów 1 public static void changeAllNames(String oldName, String newName) { 2 ObjectContainer db = Db4o.openFile(’’baza.yap’’); 3 try { 4 User user = new User(); 5 user.setName(oldName); 6 ObjectSet<User> userSet = db.queryByExample(user); 7 for(User u : userSet) { 8 u.setName(newName); 9 db.store(u); 10 } 11 } finally { 12 db.close(); 13 } 14 } User.java (wersja 4) Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 24/51
  • 26. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Usuwanie obiektów 1 public static void deleteAllByNames(String name) { 2 ObjectContainer db = Db4o.openFile(’’baza.yap’’); 3 try { 4 User user = new User(); 5 user.setName(name); 6 ObjectSet<User> userSet = db.queryByExample(user); 7 for(User u : userSet) { 8 db.delete(u); 9 } 10 } finally { 11 db.close(); 12 } 13 } User.java (wersja 5) Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 25/51
  • 27. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Plan prezentacji 1 Wstęp 2 Informacje o db4o 3 Podstawy db4o 4 Cykl życia obiektów 5 Db4oUtil 6 Zapytania 7 Podsumowanie Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 26/51
  • 28. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Cykl życia obiektów Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 27/51
  • 29. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Cykl życia obiektów Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 28/51
  • 30. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Cykl życia obiektów Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 29/51
  • 31. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Cykl życia obiektów Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 30/51
  • 32. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Cykl życia obiektów Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 31/51
  • 33. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Cykl życia obiektów Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 32/51
  • 34. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Problem zerwanego połączenia Aby zmodyfikować obiekt, należy pobrać go z bazy, zmodyfikować i zachować, a wszystko to w ramach jednego połączenia z bazą. Warto więc podtrzymywać połączenie (przynajmniej przez jakiś czas). Rozwiązanie: Wykorzystać Db4oUtil. Db4oUtil.java Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 33/51
  • 35. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Plan prezentacji 1 Wstęp 2 Informacje o db4o 3 Podstawy db4o 4 Cykl życia obiektów 5 Db4oUtil 6 Zapytania 7 Podsumowanie Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 34/51
  • 36. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Użycie Db4oUtil.java Schemat postępowania z Db4oUtil.java: 1 // ustawienie nazwy pliku 2 Db4oUtil.setDatabaseFilename(’’baza.yap’’); 3 4 // pobranie obiektu ObjectContainer 5 ObjectContainer db = Db4oUtil.getObjectContainer(); 6 7 // Kolejne operacje... 8 9 // Zamknięcie ObjectContainer gdy koniec operacji 10 Db4oUtil.closeObjectContainer(); 11 12 // zamkniecie wszystkiego, przy kończeniu aplikacji 13 Db4oUtil.shutdown(); User.java (wersja 6) Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 35/51
  • 37. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Aktualizacja usuwanych obiektów Gdy usuwamy obiekty z ObjectSet, to aby zaktualizować zbiór, trzeba ponownie wykonać zapytanie, w celu aktualizacji zbioru obiektów. Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 36/51
  • 38. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Plan prezentacji 1 Wstęp 2 Informacje o db4o 3 Podstawy db4o 4 Cykl życia obiektów 5 Db4oUtil 6 Zapytania 7 Podsumowanie Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 37/51
  • 39. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Zaawansowane zapytania Native Queries Zapytania poprzez Native Queries: Rozszerzamy klasę com.db4o.query.Predicate<ExtentType> Przeciążamy metodę: public boolean match(ExtentType et) Wywołujemy: db.query(Predicate predicate); Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 38/51
  • 40. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Zaawansowane zapytania Native Queries Przykładowa implementacja Predicate: 1 public class NamePredicate extends Predicate<User>{ 2 3 private String name; 4 5 public NamePredicate(String name) { 6 this.name = name.toLowerCase(); 7 } 8 9 @Override 10 public boolean match(User user) { 11 if(user.getName() != null) { 12 return user.getName().toLowerCase().startsWith(name); 13 } 14 return false; 15 } 16 } NamePredicate.java Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 39/51
  • 41. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Zaawansowane zapytania Native Queries Użycie predykatu: 1 System.out.println(’’Wyszukuje wszystkich Janów i janków’’); 2 ObjectSet<User> users = db.query(new NamePredicate(’’Jan’’)); 3 4 System.out.println(’’Znaleziono:’’); 5 showUsers(users); User.java (wersja 7) Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 40/51
  • 42. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Podsumowanie Native Queries Charakterystyka Native Queries: Łatwość implementacji Czasochłonne i zasobożerne Konieczność przejrzenia wszystkich obiektów z bazy danych Jedyne język Java i pomysłowość programisty ogranicza skomplikowanie zapytania Wolniejsze niż SODA Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 41/51
  • 43. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Sortowanie wyników Implementacja Comparator<T> Wywołanie: db.query(Predicate predicate, Comparator comparator) Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 42/51
  • 44. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Sortowanie wyników Użycie Comparator’a cz. 1: 1 public class UserComparator implements Comparator<User>{ 2 3 public int compare(User u1, User u2) { 4 String surname1 = u1.getSurname(); 5 String surname2 = u2.getSurname(); 6 if(surname1 == null || surname2 == null) { 7 if(surname1 == null && surname2 != null) { 8 return -1; 9 } else if(surname1 != null && surname2 == null) { 10 return 1; 11 } else { 12 return compareNames(u1, u2); 13 } 14 } else { 15 if(surname1.equalsIgnoreCase(surname2)) { 16 return compareNames(u1, u2); 17 } else { 18 return surname1.compareToIgnoreCase(surname2); 19 } 20 } 21 } Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 43/51
  • 45. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Sortowanie wyników 1 private int compareNames(User u1, User u2) { 2 String name1 = u1.getName(); 3 String name2 = u2.getName(); 4 if(name1 == null || name2 == null) { 5 if(name1 == null && name2 != null) { 6 return -1; 7 } else if(name1 != null && name2 == null) { 8 return 1; 9 } else { 10 return 0; 11 } 12 } else { 13 if(name1.equalsIgnoreCase(name2)) { 14 return 0; 15 } else { 16 return name1.compareToIgnoreCase(name2); 17 } 18 } 19 } UserComparator.java Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 44/51
  • 46. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Zaawansowane zapytania Native Queries Użycie sortowania: 1 Comparator<User> comp = new UserComparator(); 2 System.out.println(’’Wyszukuje wszystkich Janów i janków (posortowane)’’); 3 ObjectSet<User> users = db.query(new NamePredicate(’’Jan’’), comp); 4 5 System.out.println(’’Znaleziono:’’); 6 showUsers(users); 7 8 System.out.println(’’Odwrotne sortowanie:’’); 9 comp = Collections.reverseOrder(new UserComparator()); 10 users = db.query(new NamePredicate(’’Jan’’), comp); 11 12 System.out.println(’’Znaleziono:’’); 13 showUsers(users); User.java (wersja 8) Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 45/51
  • 47. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Transakcje Użycie transakcji: 1 // zatwierdzenie transakcji 2 db.commit(); 3 4 // wycofanie transakcji, aż do ostatniego punktu zatwierdzenia 5 db.rollback(); Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 46/51
  • 48. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Plan prezentacji 1 Wstęp 2 Informacje o db4o 3 Podstawy db4o 4 Cykl życia obiektów 5 Db4oUtil 6 Zapytania 7 Podsumowanie Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 47/51
  • 49. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Czego się dzisiaj nauczyliśmy? Czym jest obiektowa baza danych db4o i jak jej używać. Wykorzystanie narzędzia Db4oUtil.java Zapisywanie, modyfikacja obiektów: db.store(...) Usuwanie obiektów: db.delete(...) Wyszukiwanie Query By Example: db.queryByExample(...) Wyszukiwanie za pomocą NativeQuery: db.query(...) Sortowanie wyników: db.query(...) i Comparator<T> Transakcje db.commit(), db.rollback() Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 48/51
  • 50. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Więcej informacji Strona projektu http://www.db4o.com/ Developer Community http://developer.db4o.com/ Object Manager 7.4 http://code.google.com/p/db4o-om/ db4o Tutorial for Java http://www.db4o.com/about/productinformation/resources/db4o-7.4-tutorial-java.pdf Db4oUtil (aka. The Easiest Way to Get Started With Db4o) http://developer.db4o.com/Projects/useful_snippets/db4outil_aka._the_easiest_way_to_get_ started_with_db4o.html http://www.spaceprogram.com/knowledge/2006/07/db4outil-aka-easiest-way-to-get.html Najpopularniejsze imiona i nazwiska w Polsce w 2009 roku http://www.mswia.gov.pl/portal.php?serwis=pl&dzial=87&id=3057&search=74623 Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 49/51
  • 51. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Pytania Pytania? Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 50/51
  • 52. Wstęp Informacje o db4o Podstawy db4o Cykl życia obiektów Db4oUtil Zapytania Podsumowanie Dziękuję Dziękuję Marcin Stachniuk Zastosowanie obiektowych baz danych na przykładzie db4o. 51/51