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
Db4oResultSet.java
PessoaDao.java
PessoaDaoTest.java
**Para rodar esse 'projeto' é necessários as libs do db4o e a lib do junit.
Abraços.
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.