dae galera, seguinte:
nunca fui fã de nenhuma solução para persistência objeto/relacional utilizando java, mais especificamente o hibernate.
No entanto, sempre procurei “esconder” meus códigos sql, seja em arquivos properties ou qualquer outra forma.
Pesquisando na internet, encontrei o projeto Squiggle SQL Builder http://joe.truemesh.com/squiggle/ que é uma pequena biblioteca para construir sentenças sql dinamicamente. Porém o Squiggle não me adiantava pois só dava suporte a select querys.
Pois bem, resolvi modificar o código original (viva o sw livre!) e incrementar na biblioteca as outras querys, como inserts, updates, deletes…
Ficou mais ou menos assim:
para updates:
Table tabela = new Table("usuario");
UpdateQuery update = new UpdateQuery(tabela);
update.addColumn(tabela, "senha");
update.addCriteria(new MatchCriteria(tabela, "id",MatchCriteria.EQUALS));
tem como saida: UPDATE usuario SET senha = ? WHERE id = ?
para inserts:
InsertQuery insert = new InsertQuery(tabela);
insert.addColumn(tabela, "nome", "senha");
saída: INSERT INTO usuario ( nome, senha ) VALUES (?,?)
para deletes:
DeleteQuery delete = new DeleteQuery(tabela);
delete.addCriteria(new MatchCriteria(tabela, "id", MatchCriteria.EQUALS));
saída: DELETE FROM usuario WHERE usuario.id = ?
para selects:
SelectQuery select = new SelectQuery(tabela);
select.addColumn(tabela, "id", "senha", "nome");
select.addCriteria(new MatchCriteria(tabela, "id", MatchCriteria.EQUALS));
select.addOrder(tabela, "nome", Order.ASCENDING);
saída: SELECT usuario.id , usuario.senha , usuario.nome FROM usuario WHERE usuario.id = ? ORDER BY usuario.nome
consultas mais elaboradas:
Table tabela = new Table("usuario");
Table tabela2 = new Table("endereco");
SelectQuery select = new SelectQuery(tabela);
select.addColumn(tabela, "id", "senha", "nome");
select.addColumn(tabela2, "rua", "cidade");
select.addJoin(tabela, "id", tabela2, "fk_id");
select.addOrder(tabela, "nome", Order.ASCENDING);
saída: SELECT usuario.id , usuario.senha , usuario.nome , endereco.rua , endereco.cidade FROM usuario , endereco WHERE usuario.id = endereco.fk_id ORDER BY usuario.nome
e assim por diante, com suporte a clausulas LIMIT, <, >, <=, >=, IN, entre outras…
bom utilizo as querys junto com a biblioteca DBUtils, em DAOs e assim tenho resolvido a persistencia ultimamente.
Ex:
public Cliente findByAttribute(String Attribute, Object valor) throws Exception {
SelectQuery select = new SelectQuery(tabela);
select.addColumn(tabela, "*");
select.addCriteria(new MatchCriteria(tabela, Attribute, MatchCriteria.EQUALS));
return (Cliente) DBUtils.getObject(select, new Object[] { valor });
}
Queria saber a opinião de vcs, um feedback sobre o Squiggle, o que melhorar, o que deixar de fora, integração com outras bibliotecasl, essas coisas…, mais para “nortear” algumas implementações futuras. Lembrando que não é um framework, mais sim classes que visam auxiliar o desenvolvimento.
valeu[/code]