Consulta com filtros de formar elegante

8 respostas
R

Entao pessoal, estou criando filtros para uma determinada consulta e estou com duvida de como faze-la de forma elegante, basicamente tenho os seguintes filtros …

1 - Data Inicio
2 - Data Fim
3 - Dia da semana
4 - Tipo Ingresso
5 - Cliente

Comecei fazendo uma porrada de ifs, mas tah uma porcaria, tanto para ler, quanto para dar manutencao, ag tem alguma sugestao/exemplo de como fazer isso?

8 Respostas

V

Posta o código.

Hebert_Coelho

Você está usando oq para acesso ao DB?

anderson.bonavides

Você quer consultar de forma elegante poe uma DBA gostosa pra fazer a consulta, agora coloca teu código ai para ficar mais fácil que todos podemos ajudar.

charleston10

Use no seu SQL

Cabeçalho;
Corpo;
Rodapé;

Eu ensino isso para o pessoal fazer consultas dinâmicas, ao invés de usar 900 linhas de códigos como eu já peguei nego aqui da empresa
e você consegue diminuir pra 90 linhas.

Por exemplo seria assim:
date DataInicio; 
date DataFim; 
int DiaSemana; 
int TipoIngresso; 
int Cliente; 

//Cabeçalho
String sSQL = "SELECT * FROM TABELA WHERE idCliente =" + Cliente

//Corpo
if ((DataInicio <> Null)&&(DataFim<>Null)) sSQL += sSQL + ' AND BETWEEN '+ DataInicio + ' AND ' + DataFim
if (DiaSemana <> Null) sSQL += sSQL + ' AND DiaSemana = ' + DiaSemana

//Rodapé
sSQL += sSQL + ' ORDER BY idCliente ASC'

Algo desse tipo man, só adaptar fiz no olhometro..

Hebert_Coelho

anderson.bonavides:
Você quer consultar de forma elegante poe uma DBA gostosa pra fazer a consulta, agora coloca teu código ai para ficar mais fácil que todos podemos ajudar.
honestamente não entendi como um DBA poderá ajudar nesse caso… O.o

DaniloAndrade

isso ai foi uma piada Hebert, “Como fazer Consulta com filtros de formar elegante ?” “poe uma DBA gostosa pra fazer a consulta”… eu achei engraçado :lol:

charleston10

Concordo… hahhahaha

R
charleston10:
Use no seu SQL

Cabeçalho;
Corpo;
Rodapé;

Eu ensino isso para o pessoal fazer consultas dinâmicas, ao invés de usar 900 linhas de códigos como eu já peguei nego aqui da empresa
e você consegue diminuir pra 90 linhas.

Por exemplo seria assim:
date DataInicio; 
date DataFim; 
int DiaSemana; 
int TipoIngresso; 
int Cliente; 

//Cabeçalho
String sSQL = "SELECT * FROM TABELA WHERE idCliente =" + Cliente

//Corpo
if ((DataInicio <> Null)&&(DataFim<>Null)) sSQL += sSQL + ' AND BETWEEN '+ DataInicio + ' AND ' + DataFim
if (DiaSemana <> Null) sSQL += sSQL + ' AND DiaSemana = ' + DiaSemana

//Rodapé
sSQL += sSQL + ' ORDER BY idCliente ASC'

Algo desse tipo man, só adaptar fiz no olhometro..

Com Hibernate dá pra fazer nesse estilo tbm:
public List<Curso> findByExample(Curso filtro) {
		List<Curso> lista = new ArrayList<Curso>();
		Criteria c = criaCriteria();
		if(filtro.getNome()!=null && !(filtro.getNome().isEmpty())){
			c.add(Restrictions.ilike("nome", filtro.getNome(),MatchMode.ANYWHERE));
		}

		if(filtro.getDataInicioCurso()!=null){
			c.add(Restrictions.ge("dataInicioCurso", filtro.getDataInicioCurso()));
		}

		if(filtro.getDataFinalCurso()!=null){
			c.add(Restrictions.le("dataFinalCurso", filtro.getDataFinalCurso()));
		}
		c.addOrder(Order.asc("dataInicioCurso"));
		lista = (List<Curso>)c.list();
		return lista;
	}
Criado 19 de dezembro de 2012
Ultima resposta 20 de dez. de 2012
Respostas 8
Participantes 7