Consulta com filtros de formar elegante

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?

Posta o código.

Você está usando oq para acesso ao DB?

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.

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:

[code]
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’[/code]

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

[quote=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.[/quote]honestamente não entendi como um DBA poderá ajudar nesse caso… O.o

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:

Concordo… hahhahaha

[quote=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:

[code]
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’[/code]

Algo desse tipo man, só adaptar fiz no olhometro…[/quote]

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;
	}