Boas práticas para aplicar filtros em cosulta, utilizando DAO

9 respostas
Bruno_M_Gasparotto

Boa tarde galera, tudo bem?

Em um de meus DAOs, tenho um método chamado getLista(), que simplesmente faz um select * from tabela e retorna uma lista de objetos.
Porém, quero filtrar a pesquisa em aproximadamente 3 formas diferentes, portanto, seria uma boa prática sobrecarregar esse método? exemplo:

getLista()

getLista(String nome)

getLista(Calendar dataInicial, Calendar dataFinal)

getLista(Sring nome, Calendar dataInicial, Calendar dataFinal)

E no corpo de todos esses métodos, eu escrevo a mesma query, apenas complementando com a cláusula WHERE? E quanto a repetição do código, seria um problema?

Pensei ao invés de criar o objeto dentro do método getLista, eu enviar o result set para um método de nome sei la, “resultSetToList” e evitar repetir essa parte do código. O que acham?

Obrigado a quem puder ajudar!

Abraços,

9 Respostas

Hebert_Coelho

Nunca vi uma abordagem “mais correta” para esse caso.

Ou você cria uma query para casa, ou faz IF para saber se o parâmetro será adicionado ou não.

Bruno_M_Gasparotto

Entendi, então eu acho que ficaria mais legível eu implementar como mencionei (depois de editar o post). ao invés de criar a lista de objetos dentro do método getLista(), eu chamar um método que recebe o resultset como parâmero e retorna a lista, dai eu reaproveitaria muito código.

Não é gambiarra fazer isso não né? Desculpem as perguntas bobas, to meio que aprendendo sozinho e não quero fazer muita POG.

Hebert_Coelho

Bruno M Gasparotto:
Entendi, então eu acho que ficaria mais legível eu implementar como mencionei (depois de editar o post). ao invés de criar a lista de objetos dentro do método getLista(), eu chamar um método que recebe o resultset como parâmero e retorna a lista, dai eu reaproveitaria muito código.

Não é gambiarra fazer isso não né? Desculpem as perguntas bobas, to meio que aprendendo sozinho e não quero fazer muita POG.

Esquenta não, se mais pessoas fizessem esse tipo de pergunta aqui, o mundo seria mais tranquilo. :lol: :lol: :lol:

Eu prefiro vários métodos do que um apenas, não vejo como POG.

Quando se tem um método apenas, qualquer alteração no método vai resultar em alteração a um código utilizado por várias consultas. E alterar um método que é utilizado por diversos lugares é cutucar onça com vara curta. Repare que ao utilizar um método apenas, você não vai estar reutilizando código de regra de negócio, mas sim uma sintax de query. [=

Bruno_M_Gasparotto

Verdade haha, morro de medo de mexer no que já está funcionando e dar problema.

Bom, vou implementar então :slight_smile: e logo mais volto com perguntinhas desse tipo aqui! Muito obrigado cara.

renanreismartins

bruno, talvez esses parametros que vc está enviando para o DAO sejam parte de um objeto do seu negocio ao inves de parametros soltos. Se essa afirmação for verdadeira, procure por um pattern chamado QUERY BY EXAMPLE, pode facilitar bem sua vida.

Ele inclusive já vem implementado no hibernate.

abrasss

Bruno_M_Gasparotto

Na verdade são objetos soltos.

É de costume utilizar um próprio objeto com os atributos já preenchidos para filtrar a consulta?

Mesmo eu não utilizando, vou dar uma pesquisada.

renanreismartins

de uma pesquisada sobre query by example.

Imagine que está buscando por Pessoa, ao invés de programar prodecural, passando pro metodo de busca vários parametros soltos, nome, sobreNome dataNascimento.

vc passa um objeto Pessoa para seu método e ele faz todas as condições baseadas nos atributos preenchidos do obj. :smiley:

abrasss

Bruno_M_Gasparotto

Na verdade quero estudar Hibernate como um todo, inclusive essa info que vocês me passaram.

Estou terminando de ler o Use a Cabeça Java, pra fixar bem o conceito do mais básico, por isso estou utilizando DAO com parâmetros soltos, mas é ótimo saber que terei essas facilidades o futuro haha.

Obrigado :slight_smile:

renanreismartins

tá fazendo certinho então! antes do hibernate, aprenda fazer um dao com jdbc.

abrassss

Criado 24 de outubro de 2012
Ultima resposta 25 de out. de 2012
Respostas 9
Participantes 3