DB4O

Ao ler o artigo db4o(Developers works) resolvi fazer um teste parecido com o do artigo. Percebi que é muito fácil usar o db4o e acredito que ele seja mais fácil que MySQL e até mesmo Hsqldb ou H2. Com o Db4o não precisamos de mapeamento, para uma coisa pequena ou para algum teste que precisa de persistência acho que ele é muito util. Segue o exemplo:



Pessoa.java
/**
* Java Bean(Pojo) de Pessoa
* @author Diego Pacheco
*
*/
public class Pessoa {

private String nome;
private String end;
private Integer idade;

public Pessoa() {}

public Pessoa(String nome, String end, Integer idade) {
super();
this.nome = nome;
this.end = end;
this.idade = idade;
}

public String getEnd() {
return end;
}
public void setEnd(String end) {
this.end = end;
}

public Integer getIdade() {
return idade;
}
public void setIdade(Integer idade) {
this.idade = idade;
}

public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}

@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((end == null) ? 0 : end.hashCode());
result = PRIME * result + ((idade == null) ? 0 : idade.hashCode());
result = PRIME * result + ((nome == null) ? 0 : nome.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Pessoa other = (Pessoa) obj;
if (end == null) {
if (other.end != null)
return false;
} else if (!end.equals(other.end))
return false;
if (idade == null) {
if (other.idade != null)
return false;
} else if (!idade.equals(other.idade))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
return true;
}

@Override
public String toString() {
return "nome: " + nome + " end: " + end + " idade: " + idade;
}


}

Db4oResultSet.java
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;

public class Db4oResultSet {

private ObjectContainer objectContainer;
private ObjectSet objectSet;

public Db4oResultSet(ObjectContainer objectContainer, ObjectSet objectSet) {
super();
this.objectContainer = objectContainer;
this.objectSet = objectSet;
}

public ObjectContainer getObjectContainer() {
return objectContainer;
}
public ObjectSet getObjectSet() {
return objectSet;
}

}

PessoaDao.java
import com.db4o.Db4o;
import com.db4o.ObjectContainer;

/**
* Dao pattern, que tem os metodos de acesso a dados de Pessoa.
* @author Diego Pacheco
*
*/
public class PessoaDao {

/**
* Insere uma pessoa na base.
* @param pessoa
*/
public void insertPessoa(Pessoa pessoa){

ObjectContainer db = null;
try
{
// pega a 'base', set o bean a ser persistido
// e comita na base.
db = Db4o.openFile(pessoa.getClass() + ".data");           
db.set(pessoa);
db.commit();
}
finally
{
if (db != null)
db.close();
}

}

/**
* busca uma pessoa na base.
* @param pessoa
* @return
*/
public Db4oResultSet findPessoa(Pessoa pessoa){

// obtem a base e revolve um
// Db4oResultSet com o ObjectContainer + o
// resultado da busca na base.
ObjectContainer db = null;
db = Db4o.openFile(pessoa.getClass() + ".data");
return new Db4oResultSet(db,db.get(pessoa));

}

}

PessoaDaoTest.java
import junit.framework.TestCase;

/**
* Classe de testes.
* @author Diego Pacheco
*
*/
public class PessoaDaoTest extends TestCase{

public static void testPessoaDao(){

// define um pojo de pessoa.
Pessoa p = new Pessoa();
p.setNome("Diego");
p.setEnd("Gravataí");
p.setIdade(22);

// obtem uma instancia de PessoaDao
// e persiste na base.
PessoaDao dao = new PessoaDao();
dao.insertPessoa(p);

// faz uma pesquisa na base.
// faz teste junit
Db4oResultSet rs = dao.findPessoa(p); 
assertNotNull(rs);

// varre todos os resultados.
while(rs.getObjectSet().hasNext()){
System.out.println(rs.getObjectSet().next());
}

// teste junit e fecha a conexcao.
assertNotNull(rs.getObjectContainer());
rs.getObjectContainer().close();

}
}

**Para rodar esse 'projeto' é necessários as libs do db4o e a lib do junit.

Abraços.

Popular posts from this blog

C Unit Testing with Check

Having fun with Zig Language

HMAC in Java