persistência utilizando sql dinâmico do Squiggle

1 resposta
P

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&#40;String Attribute, Object valor&#41; throws Exception &#123;
	SelectQuery select = new SelectQuery&#40;tabela&#41;;
	select.addColumn&#40;tabela, "*"&#41;;
	select.addCriteria&#40;new MatchCriteria&#40;tabela, Attribute, MatchCriteria.EQUALS&#41;&#41;;
return &#40;Cliente&#41; DBUtils.getObject&#40;select, new Object&#91;&#93; &#123; valor &#125;&#41;;
&#125;

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]

1 Resposta

N

Olá pivoto,

Li o seu post e me interessei pelo Squiggle.
Será que vc pederia complartilhar a alteração que vc fez em cima do Squiggle Sql Builder?

desde já obrigado

noris

Criado 11 de agosto de 2007
Ultima resposta 27 de ago. de 2009
Respostas 1
Participantes 2