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.