Introducción a DB4O

Se trata de bases de datos que mantienen "vivos" a nuestros objetos hasta que volvamos a utilizarlos, su principal ventaja radica en la ausencia total de cambio de paradigma, a que nos referimos con esto, a que no debemos preocuparnos por saber si nuestros objetos se "mapearán" como xml's, archivos binarios, RDB (este es el caso mas común, por lo que veremos Hibernate mas adelante), en fin, nos dan la felicidad que caracteriza al mundo objetoso, yo le doy mi o mis objetos a la base y ella se ocupa de guardarlos y de tenerlos allí para cuando los necesite, ofreciéndome métodos de búsqueda y filtrado que se escriben y diagraman en el mismo lenguaje en el cual estoy programando el resto del sistema, en breve veremos algunos ejemplos de esto.

db4o Base de Objetos de Código Abierto

    • Nativa a Java y .NET

    • 100% orientada a objetos, sin mapeo objeto-relacional

    • Diseñada para uso embebido

    • De código abierto y libre bajo la GPL

Ejemplos felices :)

En db4o todas las operaciones se realizan a través de una clase llamada ObjectManager, luego de un breve setup tendremos una instancia del mismo por la cual pasarán todas las operaciones que nuestro sistema haga contra la BD.

Inicialización:

ObjectContainer db=Db4o.openFile("database.yap");

Por ejemplo, si yo tengo un objeto de la clase Superheroe del cual se que su atributo nombre es "Batman" y lo quiero traer de la DB solo debo hacer:

Superheroe proto = new Superheroe();

proto.setNombre("Batman");

ObjectSet<Superheroe> results = db.get(proto);

feliz no? lo que que acabamos de hacer se llama "query by example" básicamente lo que hacemos es crear un objeto del tipo que deseamos, y seteándole los parámetros que queremos utilizar a modo de filtro, la BD nos retornara una colección con todos los objetos cuyos atributos coincidan con los que marcamos.

y como no podía ser de otra forma grabar un objeto se reduce a

db.set(objeto); //tener en cuenta que si vamos a seguir trabajando con ese objeto se debe pisar su referencia por una obtenida de la base de datos, ya que como es una base de objetos, los objetos se diferencian por la identidad y no es lo mismo el objeto que le di, que el que ahora conoce la db

db.commit(); // el commit asegura que los datos se graben en ese momento, de no existir la base los bajara a disco cuando crea conveniente

bueno ahora vamos a ver a que nos referíamos con búsquedas y filtros en el lenguaje nativo en que estoy trabajando

supongamos ahora que queremos encontrar los Sayajines que tengan mas poder que 1000.

Mediante la API SODA seria algo así

Query q = db.query();

q.constrain(Sayajin.class);

q.descend("poder").constrain(100).greater();

ObjectSet<Sayajin> result = q.execute();

Pero tmb existe otro método mucho mas intuitivo a mi parecer que es el siguiente

ObjectSet<Sayajin> result = db.query(new Predicate<Sayajin>() {

@Override

public boolean match(Sayajin geurrero) {

return guerrero.getPoder() > 100;

}

});

como se puede ver las posibilidades son infinitas, y en ningún momento dejamos de programar en Java!