sexta-feira, março 04, 2011

Spring template: queryForObject() method. Retorno de queries vazias.

A post visa basicamente esclarecer a abordagem dada pelo spring framework, mais precisamente, sua implementação do JDBC, spring-jdbc.

Sem entrar em maiores detalhes sobre a implementação e utilização do módulo spring-jdbc, eu gostaria de compartilhar com todos uma experiência que me pareceu inusitada enquanto montava um DAO usando como base este módulo do spring framework.

Sem mais, às formalidades:

Meu DAO de exemplo, é o seguinte:

public class MeuBeanDao extends JdbcDaoSupport {

public MeuBean selectByDescription(String description){
return (MeuBean) getJdbcTemplate().queryForObject(SQL, new Object[]{description}, new MeuBeanRowMapper());

}

}

É uma implementação básica do método queryForObject() usando um array de Object para passar os argumentos e uma implementação do RowMapper, que visa mapear o resultado obtido de cada linha para o objeto a ser retornado.

Até aí tudo bem. Está tudo certo. Meu teste de unidade se saiu perfeito. Porém, num cenário onde não há resultados, exceções podem acontecer.

Por quê?

Porque sim.

O spring framework tem a abordagem de levantar exceções para ambos casos: resultado vazio e non-unique error (quando mais de uma linha é obtida da consulta). No meu caso, eu obtive um EmptyResultDataAccessException. O Spring opta por escolher representar os dois casos como exceções. Todavia, nos parece mais intuitivo se este, ao não encontrar nenhum registro, retornasse um simples java null.

A solução!

A solução encontrada é circundá-lo com um bloco try/catch. Veja abaixo como ficou.

public MeuBean selectByDescription(String description) {
MeuBean result = null;

try{
result = (MeuBean) getJdbcTemplate().queryForObject(SQL, new Object[]{description}, new MeuBeanRowMapper());

}catch(EmptyResultDataAccessException e){
// do nothing... thanks Spring framework...
}

return result;
}

Bom, mais uma postagem colaborativa. Maiores detalhes sobre spring-jdbc, visite o site: http://static.springsource.org/spring/docs/2.0.x/reference/jdbc.html

Abraços!

quinta-feira, março 03, 2011

Programação orientada a aspectos: AOP.

What the fuck is that?

Pelo menos, diminui o número de linhas de código...

Continua...