zastosowanie obiektowych baz danych na przykładzie db4o
TRANSCRIPT
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Zastosowanie obiektowych baz danych naprzykadzie db4o.
Marcin [email protected]
15 marca 2010
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 1/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl ycia obiektw
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 2/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl ycia obiektw
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 3/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Troch historii
Troch historii...
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 4/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Zalety relacyjnych baz danych
Popularno
Szeroko stosowane w rozwizaniach komercyjnych
Niezaleno od wykorzystywanego jzyka programowania
Moliwoci optymalizacji
atwo projektowania
Autoryzacja dostpu
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 5/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Wady relacyjnych baz danych
Niezgodno impedancji
Schemat struktury danych gubi znaczn cz semantykidanych
Konieczno budowania skomplikowanych zapyta SQL
Konieczno zatrudniania administratora bazy danych
Brak zoonych obiektw
Rozproszenie danych w wielu tablicach
Nietrzymanie si standardw
Konieczno mapowania obiektowo-relacyjnego
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 6/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Problem mapowania obiektowo relacyjnego (ORM)
Architektura wielowarstwowa
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 7/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Problem mapowania obiektowo relacyjnego (ORM)
Architektura wielowarstwowa
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 8/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Problem mapowania obiektowo relacyjnego (ORM)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 9/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Rozwizanie problemu
Jak uatwi sobie ycie?
Wykorzysta obiektow baz danych!
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 10/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Rozwizanie problemu
Jak uatwi sobie ycie?
Wykorzysta obiektow baz danych!
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 10/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl ycia obiektw
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 11/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Podstawy db4o
www.db4o.com
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 12/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Charakterystyka db4o
Czym jest db4o?
Obiektowa baza danych open-source
Dwie licencje: darmowa i komercyjna
Natywna implementacja dla jzykw Java i .NET
Dua spoeczno (60000 zarejestrowanych developerw)
Ponad milion cigni
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 13/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Charakterystyka db4o
Firmy korzystajce z db4o:
BMW BoeingBosch IBMIntel RicohSeagate INDRA SistemasMerrill Lynch PostbankMacrix Software Mandala ITEastern Data Riege Software InternationalDie Mobilanten ITAnyplacePragmatyxs ElectrabelJuvander TradeWeaponLong Island Housing Services MR ControlsNovator Clarity MedicalSyft Technologies Arum Systems
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 14/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Charakterystyka db4o
Dla kogo db4o?
Mae i rednie projekty (studenckie projekty!!!)
Nowe niskobudetowe projekty
Gdzie nie ma narzuconej technologii wykorzystywanej bazydanych
Baza moe dziaa na pliku dyskowym (podobnie jak: SQLite)
Brak koniecznoci stawiania osobnego serwera bazodanowego(ale oczywicie mona)
wietnie si nadaje do aplikacji typu standalone
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 15/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl ycia obiektw
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 16/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Pierwsze kroki
Zanim zaczniemy programowa:
cignicie db4o
Podpicie JARa do projektu
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 17/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Pierwsza klasa cz.1
1 public class User {23 private String name;4 private String surname;56 public String getName() {7 return name;8 }910 public void setName(String name) {11 this.name = name;12 }
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 18/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Pierwsza klasa cz.2
1 public String getSurname() {2 return surname;3 }45 public void setSurname(String surname) {6 this.surname = surname;7 }89 @Override10 public String toString() {11 return name + + surname;12 }
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 19/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Zapisywanie obiektu w bazie danych
1 public void save() {2 // Otwarcie poczenia z baz3 ObjectContainer db = Db4o.openFile(baza.yap);4 try {5 // zapis6 db.store(this);7 System.out.println(Zapisano: +this.toString());8 } finally {9 // zamknicie poczenia10 db.close();11 }12 }1314 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 przykadzie db4o. 20/51
Userv1.java/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedb4otutorial;
importcom.db4o.Db4o;
importcom.db4o.ObjectContainer;
/**
*
*@authorStaszek
*/
publicclassUser{
privateStringname;
privateStringsurname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSurname(){
returnsurname;
}
publicvoidsetSurname(Stringsurname){
this.surname=surname;
}
@Override
publicStringtoString(){
returnname+""+surname;
}
publicvoidsave(){
//Otwarciepoczeniazbaz
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
db.store(this);//zapis
System.out.println("Zapisano:"+this.toString());
}finally{
db.close();//zamkniciepoczenia
}
}
publicstaticvoidmain(String[]args){
Useruser=newUser();
user.setName("Jan");
user.setSurname("Kowalski");
user.save();
}
}//endofclassUser
Klasa User i zapisywanie w bazie danych
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Wywietlanie wszystkich obiektw z bazy danych
1 public static void showAllUsers() {2 ObjectContainer db = Db4o.openFile(baza.yap);3 try {4 ObjectSet userSet = db.queryByExample(User.class);5 //ObjectSet 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 przykadzie db4o. 21/51
Userv2.java/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedb4otutorial;
importcom.db4o.Db4o;
importcom.db4o.ObjectContainer;
importcom.db4o.ObjectSet;
/**
*
*@authorStaszek
*/
publicclassUser{
privateStringname;
privateStringsurname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSurname(){
returnsurname;
}
publicvoidsetSurname(Stringsurname){
this.surname=surname;
}
@Override
publicStringtoString(){
returnname+""+surname;
}
publicvoidsave(){
//Otwarciepoczeniazbaz
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
db.store(this);//zapis
System.out.println("Zapisano:"+this.toString());
}finally{
db.close();//zamkniciepoczenia
}
}
publicstaticvoidshowAllUsers(){
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
ObjectSetuserSet=db.queryByExample(User.class);
//ObjectSetuserSet=db.query(User.class);
for(Useru:userSet){
System.out.println("Odczytano:"+u);
}
}finally{
db.close();
}
}
publicstaticvoidmain(String[]args){
//Useruser=newUser();
//user.setName("Jan");
//user.setSurname("Kowalski");
//user.save();
User.showAllUsers();
}
}//endofclassUser
Klasa User i wyswietlanie wszystkich rekordw z bazy danych
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw 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 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 przykadzie db4o. 22/51
Userv3.java/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedb4otutorial;
importcom.db4o.Db4o;
importcom.db4o.ObjectContainer;
importcom.db4o.ObjectSet;
/**
*
*@authorStaszek
*/
publicclassUser{
privateStringname;
privateStringsurname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSurname(){
returnsurname;
}
publicvoidsetSurname(Stringsurname){
this.surname=surname;
}
@Override
publicStringtoString(){
returnname+""+surname;
}
publicvoidsave(){
//Otwarciepoczeniazbaz
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
db.store(this);//zapis
System.out.println("Zapisano:"+this.toString());
}finally{
db.close();
}
}
publicstaticvoidshowAllUsers(){
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
ObjectSetuserSet=db.queryByExample(User.class);
//ObjectSetuserSet=db.query(User.class);
for(Useru:userSet){
System.out.println("Odczytano:"+u);
}
}finally{
db.close();
}
}
publicstaticvoidshowAllByName(Stringname){
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
Useruser=newUser();
user.setName(name);
ObjectSetuserSet=db.queryByExample(user);
for(Useru:userSet){
System.out.println("Znaleziono:"+u);
}
}finally{
db.close();
}
}
publicstaticvoidmain(String[]args){
System.out.println("PoszukajmyJana:");
showAllByName("Jan");
System.out.println("Wszyscy:");
showAllUsers();
}
}//endofclassUser
Klasa User i przykadow zapytanie poprzez QueryByExample
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Zapytania poprzez QueryByExample
Jak dziaa QueryByExample?
Wyszukuje obiekty, ktre maj te same pola co ustawionyprzykad
Dla pl ustawionych na null dopasowuje dowolne wartoci
Zwraca ObjectSet poszukiwanych obiektw
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 23/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Modyfikacja obiektw
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 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 przykadzie db4o. 24/51
Userv4.java/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedb4otutorial;
importcom.db4o.Db4o;
importcom.db4o.ObjectContainer;
importcom.db4o.ObjectSet;
/**
*
*@authorStaszek
*/
publicclassUser{
privateStringname;
privateStringsurname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSurname(){
returnsurname;
}
publicvoidsetSurname(Stringsurname){
this.surname=surname;
}
@Override
publicStringtoString(){
returnname+""+surname;
}
publicvoidsave(){
//Otwarciepoczeniazbaz
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
db.store(this);//zapis
System.out.println("Zapisano:"+this.toString());
}finally{
db.close();
}
}
publicstaticvoidshowAllUsers(){
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
ObjectSetuserSet=db.queryByExample(User.class);
//ObjectSetuserSet=db.query(User.class);
for(Useru:userSet){
System.out.println("Odczytano:"+u);
}
}finally{
db.close();
}
}
publicstaticvoidshowAllByName(Stringname){
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
Useruser=newUser();
user.setName(name);
ObjectSetuserSet=db.queryByExample(user);
for(Useru:userSet){
System.out.println("Znaleziono:"+u);
}
}finally{
db.close();
}
}
publicstaticvoidchangeAllNames(StringoldName,StringnewName){
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
Useruser=newUser();
user.setName(oldName);
ObjectSetuserSet=db.queryByExample(user);
for(Useru:userSet){
u.setName(newName);
db.store(u);
}
}finally{
db.close();
}
}
publicstaticvoidmain(String[]args){
System.out.println("Przedzmianimion:");
showAllUsers();
System.out.println("Zmiana");
changeAllNames("Jan","Piotr");
System.out.println("Wszyscy:");
showAllUsers();
}
}//endofclassUser
Klasa User i modyfikacja obiektw w bazie danych
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Usuwanie obiektw
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 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 przykadzie db4o. 25/51
Userv5.java/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedb4otutorial;
importcom.db4o.Db4o;
importcom.db4o.ObjectContainer;
importcom.db4o.ObjectSet;
/**
*
*@authorStaszek
*/
publicclassUser{
privateStringname;
privateStringsurname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSurname(){
returnsurname;
}
publicvoidsetSurname(Stringsurname){
this.surname=surname;
}
@Override
publicStringtoString(){
returnname+""+surname;
}
publicvoidsave(){
//Otwarciepoczeniazbaz
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
db.store(this);//zapis
System.out.println("Zapisano:"+this.toString());
}finally{
db.close();
}
}
publicstaticvoidshowAllUsers(){
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
ObjectSetuserSet=db.queryByExample(User.class);
//ObjectSetuserSet=db.query(User.class);
for(Useru:userSet){
System.out.println("Odczytano:"+u);
}
}finally{
db.close();
}
}
publicstaticvoidshowAllByName(Stringname){
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
Useruser=newUser();
user.setName(name);
ObjectSetuserSet=db.queryByExample(user);
for(Useru:userSet){
System.out.println("Znaleziono:"+u);
}
}finally{
db.close();
}
}
publicstaticvoidchangeAllNames(StringoldName,StringnewName){
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
Useruser=newUser();
user.setName(oldName);
ObjectSetuserSet=db.queryByExample(user);
for(Useru:userSet){
u.setName(newName);
db.store(u);
}
}finally{
db.close();
}
}
publicstaticvoiddeleteAllByNames(Stringname){
ObjectContainerdb=Db4o.openFile("baza.yap");
try{
Useruser=newUser();
user.setName(name);
ObjectSetuserSet=db.queryByExample(user);
for(Useru:userSet){
db.delete(u);
}
}finally{
db.close();
}
}
publicstaticvoidmain(String[]args){
System.out.println("Napocztku:");
showAllUsers();
System.out.println("UsuwamyPiotrw");
deleteAllByNames("Piotr");
System.out.println("Po:");
showAllUsers();
}
}//endofclassUser
Klasa User i usuwanie obiektw z bazy danych
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl ycia obiektw
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 26/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Cykl ycia obiektw
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 27/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Cykl ycia obiektw
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 28/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Cykl ycia obiektw
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 29/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Cykl ycia obiektw
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 30/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Cykl ycia obiektw
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 31/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Cykl ycia obiektw
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 32/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Problem zerwanego poczenia
Aby zmodyfikowa obiekt, naley pobra go z bazy, zmodyfikowa izachowa, a wszystko to w ramach jednego poczenia z baz.Warto wic podtrzymywa poczenie (przynajmniej przez jakiczas).
Rozwizanie: Wykorzysta Db4oUtil.
Db4oUtil.java
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 33/51
Db4oUtil.java
packagedb4otutorial;
importcom.db4o.Db4o;
importcom.db4o.ObjectContainer;
importcom.db4o.ObjectServer;
publicclassDb4oUtil{
privatestaticStringdatabaseFilename="db4o.yap";
privatestaticfinalintPORT=0;
privatestaticObjectServerobjectServer;
privatestaticfinalThreadLocaldbThreadLocal=newThreadLocal();
publicstaticObjectContainergetObjectContainer(){
ObjectContaineroc=(ObjectContainer)dbThreadLocal.get();
if(oc==null||oc.ext().isClosed()){
oc=getObjectServer().openClient();
dbThreadLocal.set(oc);
}
returnoc;
}
publicstaticvoidcloseObjectContainer(){
ObjectContaineroc=(ObjectContainer)dbThreadLocal.get();
dbThreadLocal.set(null);
if(oc!=null)oc.close();
}
privatesynchronizedstaticObjectServergetObjectServer(){
if(objectServer==null){
objectServer=getObjectServerForFilename(databaseFilename,PORT);
}
returnobjectServer;
}
publicstaticvoidshutdown(){
if(objectServer!=null){
objectServer.close();
}
}
privatestaticObjectServergetObjectServerForFilename(Stringyapfilename,intport){
ObjectServerobjectServerFromFile=Db4o.openServer(yapfilename,port);
returnobjectServerFromFile;
}
publicstaticStringgetDatabaseFilename(){
returndatabaseFilename;
}
publicstaticvoidsetDatabaseFilename(StringdatabaseFilename){
Db4oUtil.databaseFilename=databaseFilename;
}
}
Db4oUtil (aka. The Easiest Way to Get Started With Db4o)
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl ycia obiektw
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 34/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Uycie Db4oUtil.java
Schemat postpowania z Db4oUtil.java:1 // ustawienie nazwy pliku2 Db4oUtil.setDatabaseFilename(baza.yap);34 // pobranie obiektu ObjectContainer5 ObjectContainer db = Db4oUtil.getObjectContainer();67 // Kolejne operacje...89 // Zamknicie ObjectContainer gdy koniec operacji10 Db4oUtil.closeObjectContainer();1112 // zamkniecie wszystkiego, przy koczeniu aplikacji13 Db4oUtil.shutdown();
User.java (wersja 6)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 35/51
Userv6.java/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedb4otutorial;
importcom.db4o.Db4o;
importcom.db4o.ObjectContainer;
importcom.db4o.ObjectSet;
importjava.util.List;
/**
*
*@authorStaszek
*/
publicclassUser{
privateStringname;
privateStringsurname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSurname(){
returnsurname;
}
publicvoidsetSurname(Stringsurname){
this.surname=surname;
}
@Override
publicStringtoString(){
returnname+""+surname;
}
publicvoidsave(ObjectContainerdb){
db.store(this);
}
privatestaticObjectSetloadAllUsers(ObjectContainerdb){
returndb.queryByExample(User.class);
}
publicvoiddelete(ObjectContainerdb){
db.delete(this);
}
publicstaticvoidshowUsers(Listlist){
for(Useru:list){
System.out.println(u);
}
}
publicstaticvoidmain(String[]args){
//ustawienienazwypliku
Db4oUtil.setDatabaseFilename("baza.yap");
//pobranieobiektuObjectContainer
ObjectContainerdb=Db4oUtil.getObjectContainer();
System.out.println("Pobraniewszystkichuytkownikw");
ObjectSetusers=loadAllUsers(db);
System.out.println("Wyswietlenieuytkownikow:");
showUsers(users);
if(users.hasNext()){
Useru=users.next();
u.setName("Noweimie");
u.save(db);
System.out.println("Zmienionoimi");
}
if(users.hasNext()){
Useru=users.next();
u.delete(db);
System.out.println("usunietousera");
}
Useruser=newUser();
user.setName("Piotr");
user.setSurname("Nowak");
user.save(db);
System.out.println("Uytkownicypomodyfikacji");
showUsers(users);
//ZamknicieObjectContainergdykoniecoperacji
Db4oUtil.closeObjectContainer();
//zamknieciewszystkiego,przykoczeniuaplikacji
Db4oUtil.shutdown();
}
}//endofclassUser
Klasa User po refactoringu z wykorzystaniem Db4oUtil
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Aktualizacja usuwanych obiektw
Gdy usuwamy obiekty z ObjectSet, to aby zaktualizowa zbir,trzeba ponownie wykona zapytanie, w celu aktualizacji zbioruobiektw.
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 36/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl ycia obiektw
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 37/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Zaawansowane zapytania Native Queries
Zapytania poprzez Native Queries:
Rozszerzamy klas com.db4o.query.Predicate
Przeciamy metod: public boolean match(ExtentType et)
Wywoujemy: db.query(Predicate predicate);
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 38/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Zaawansowane zapytania Native Queries
Przykadowa implementacja Predicate:1 public class NamePredicate extends Predicate{23 private String name;45 public NamePredicate(String name) {6 this.name = name.toLowerCase();7 }89 @Override10 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 przykadzie db4o. 39/51
NamePredicate.java/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedb4otutorial;
importcom.db4o.query.Predicate;
/**
*
*@authorStaszek
*/
publicclassNamePredicateextendsPredicate{
privateStringname;
publicNamePredicate(Stringname){
this.name=name.toLowerCase();
}
@Override
publicbooleanmatch(Useruser){
if(user.getName()!=null){
returnuser.getName().toLowerCase().startsWith(name);
}
returnfalse;
}
}
Klasa NamePredicate
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Zaawansowane zapytania Native Queries
Uycie predykatu:1 System.out.println(Wyszukuje wszystkich Janw i jankw);2 ObjectSet users = db.query(new NamePredicate(Jan));34 System.out.println(Znaleziono:);5 showUsers(users);
User.java (wersja 7)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 40/51
Userv7.java/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedb4otutorial;
importcom.db4o.Db4o;
importcom.db4o.ObjectContainer;
importcom.db4o.ObjectSet;
importjava.util.List;
/**
*
*@authorStaszek
*/
publicclassUser{
privateStringname;
privateStringsurname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSurname(){
returnsurname;
}
publicvoidsetSurname(Stringsurname){
this.surname=surname;
}
@Override
publicStringtoString(){
returnname+""+surname;
}
publicvoidsave(ObjectContainerdb){
db.store(this);
}
privatestaticObjectSetloadAllUsers(ObjectContainerdb){
returndb.queryByExample(User.class);
}
publicvoiddelete(ObjectContainerdb){
db.delete(this);
}
publicstaticvoidshowUsers(Listlist){
for(Useru:list){
System.out.println(u);
}
}
publicstaticvoidmain(String[]args){
//ustawienienazwypliku
Db4oUtil.setDatabaseFilename("baza.yap");
//pobranieobiektuObjectContainer
ObjectContainerdb=Db4oUtil.getObjectContainer();
Useruser=newUser();
user.setName("Jan");
user.setSurname("Kowalski");
user.save(db);
user=newUser();
user.setName("janek");
user.setSurname("Kowalski");
user.save(db);
System.out.println("WyszukujewszystkichJanwijankw");
ObjectSetusers=db.query(newNamePredicate("Jan"));
System.out.println("Znaklezono:");
showUsers(users);
System.out.println("Wszystkierekordywbazie:");
users=loadAllUsers(db);
showUsers(users);
//ZamknicieObjectContainergdykoniecoperacji
Db4oUtil.closeObjectContainer();
//zamknieciewszystkiego,przykoczeniuaplikacji
Db4oUtil.shutdown();
}
}//endofclassUser
Klasa User pokazujaca dziaanie Native Queries
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Podsumowanie Native Queries
Charakterystyka Native Queries:
atwo implementacji
Czasochonne i zasoboerne
Konieczno przejrzenia wszystkich obiektw z bazy danych
Jedyne jzyk Java i pomysowo programisty ograniczaskomplikowanie zapytania
Wolniejsze ni SODA
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 41/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Sortowanie wynikw
Implementacja Comparator
Wywoanie: db.query(Predicate predicate, Comparatorcomparator)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 42/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Sortowanie wynikw
Uycie Comparatora cz. 1:1 public class UserComparator implements Comparator{23 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 przykadzie db4o. 43/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Sortowanie wynikw
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.javaMarcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 44/51
UserComparator.java/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedb4otutorial;
importjava.util.Comparator;
/**
*
*@authorStaszek
*/
publicclassUserComparatorimplementsComparator{
publicintcompare(Useru1,Useru2){
Stringsurname1=u1.getSurname();
Stringsurname2=u2.getSurname();
if(surname1==null||surname2==null){
if(surname1==null&&surname2!=null){
return-1;
}elseif(surname1!=null&&surname2==null){
return1;
}else{
returncompareNames(u1,u2);
}
}else{
if(surname1.equalsIgnoreCase(surname2)){
returncompareNames(u1,u2);
}else{
returnsurname1.compareToIgnoreCase(surname2);
}
}
}
privateintcompareNames(Useru1,Useru2){
Stringname1=u1.getName();
Stringname2=u2.getName();
if(name1==null||name2==null){
if(name1==null&&name2!=null){
return-1;
}elseif(name1!=null&&name2==null){
return1;
}else{
return0;
}
}else{
if(name1.equalsIgnoreCase(name2)){
return0;
}else{
returnname1.compareToIgnoreCase(name2);
}
}
}
}
Klasa UserComparator sortujaca obiekty typu User
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Zaawansowane zapytania Native Queries
Uycie sortowania:1 Comparator comp = new UserComparator();2 System.out.println(Wyszukuje wszystkich Janw i jankw (posortowane));3 ObjectSet users = db.query(new NamePredicate(Jan), comp);45 System.out.println(Znaleziono:);6 showUsers(users);78 System.out.println(Odwrotne sortowanie:);9 comp = Collections.reverseOrder(new UserComparator());10 users = db.query(new NamePredicate(Jan), comp);1112 System.out.println(Znaleziono:);13 showUsers(users);
User.java (wersja 8)
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 45/51
Userv8.java/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedb4otutorial;
importcom.db4o.Db4o;
importcom.db4o.ObjectContainer;
importcom.db4o.ObjectSet;
importjava.util.Collections;
importjava.util.List;
/**
*
*@authorStaszek
*/
publicclassUser{
privateStringname;
privateStringsurname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSurname(){
returnsurname;
}
publicvoidsetSurname(Stringsurname){
this.surname=surname;
}
@Override
publicStringtoString(){
returnname+""+surname;
}
publicvoidsave(ObjectContainerdb){
db.store(this);
}
privatestaticObjectSetloadAllUsers(ObjectContainerdb){
returndb.queryByExample(User.class);
}
publicvoiddelete(ObjectContainerdb){
db.delete(this);
}
publicstaticvoidshowUsers(Listlist){
for(Useru:list){
System.out.println(u);
}
}
publicstaticvoidmain(String[]args){
//ustawienienazwypliku
Db4oUtil.setDatabaseFilename("baza.yap");
//pobranieobiektuObjectContainer
ObjectContainerdb=Db4oUtil.getObjectContainer();
Useruser=newUser();
user.setName("Jan");
user.setSurname("Kowalski");
user.save(db);
user=newUser();
user.setName("janek");
user.setSurname("Kowalski");
user.save(db);
System.out.println("WyszukujewszystkichJanwijankw");
ObjectSetusers=db.query(newNamePredicate("Jan"),newUserComparator());
System.out.println("Znaleziono:");
showUsers(users);
System.out.println("Odwrotnesortowanie:");
users=db.query(newNamePredicate("Jan"),Collections.reverseOrder(newUserComparator()));
System.out.println("Znaleziono:");
showUsers(users);
System.out.println("Wszystkierekordywbazie:");
users=loadAllUsers(db);
showUsers(users);
//ZamknicieObjectContainergdykoniecoperacji
Db4oUtil.closeObjectContainer();
//zamknieciewszystkiego,przykoczeniuaplikacji
Db4oUtil.shutdown();
}
}//endofclassUser
Klasa User pokazujaca dziaanie sortowania wynikw
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Transakcje
Uycie transakcji:1 // zatwierdzenie transakcji2 db.commit();34 // wycofanie transakcji, a do ostatniego punktu zatwierdzenia5 db.rollback();
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 46/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Plan prezentacji
1 Wstp
2 Informacje o db4o
3 Podstawy db4o
4 Cykl ycia obiektw
5 Db4oUtil
6 Zapytania
7 Podsumowanie
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 47/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Czego si dzisiaj nauczylimy?
Czym jest obiektowa baza danych db4o i jak jej uywa.
Wykorzystanie narzdzia Db4oUtil.java
Zapisywanie, modyfikacja obiektw: db.store(...)
Usuwanie obiektw: db.delete(...)
Wyszukiwanie Query By Example: db.queryByExample(...)
Wyszukiwanie za pomoc NativeQuery: db.query(...)
Sortowanie wynikw: db.query(...) i Comparator
Transakcje db.commit(), db.rollback()
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 48/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Wicej 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 Javahttp://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.htmlhttp://www.spaceprogram.com/knowledge/2006/07/db4outil-aka-easiest-way-to-get.html
Najpopularniejsze imiona i nazwiska w Polsce w 2009 rokuhttp://www.mswia.gov.pl/portal.php?serwis=pl&dzial=87&id=3057&search=74623
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 49/51
http://www.db4o.com/http://developer.db4o.com/http://code.google.com/p/db4o-om/http://www.db4o.com/about/productinformation/resources/db4o-7.4-tutorial-java.pdfhttp://developer.db4o.com/Projects/useful_snippets/db4outil_aka._the_easiest_way_to_get_started_with_db4o.htmlhttp://developer.db4o.com/Projects/useful_snippets/db4outil_aka._the_easiest_way_to_get_started_with_db4o.htmlhttp://www.spaceprogram.com/knowledge/2006/07/db4outil-aka-easiest-way-to-get.htmlhttp://www.mswia.gov.pl/portal.php?serwis=pl&dzial=87&id=3057&search=74623
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Pytania
Pytania?
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 50/51
-
Wstp Informacje o db4o Podstawy db4o Cykl ycia obiektw Db4oUtil Zapytania Podsumowanie
Dzikuj
Dzikuj
Marcin Stachniuk Zastosowanie obiektowych baz danych na przykadzie db4o. 51/51
WstepInformacje o db4oPodstawy db4oCykl zycia obiektwDb4oUtilZapytaniaPodsumowanie