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
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