Oi, efc.
Beleza?
Eu, normalmente, uso três métodos de pesquisa na minha camada de persistência:
-
recuperarPorID(long id);
-
recuperarTodos();
-
recuperarPorCriteria(Map<String, Object> criteria).
A resposta, para o seu caso, seria o terceiro método.
O método recuperarPorCriteria retorna uma coleção de objetos que você queira baseando em um ou mais critérios de pesquisa.
Se eu quero pesquisar por nome, eu coloco uma condição de pesquisa para nome. Se eu quero pesquisar por CPF, eu coloco uma condição para filtrar pelo CPF. E assim vale para todas as outras condições que você criar.
Um exemplo:
- Tenho uma classe Cliente:
[code]public class Cliente {
private Long ID;
private String nome;
private String CPF;
// getters e setters omitidos.
}
[/code]
- Na minha classe de persistência, o método recuperarPorCriteria ficaria assim:
public class PersistenciaCliente {
public List<Cliente> recuperarPorCriteria(Map<String, Object> criteria) throws SQLException {
// Primeiro, crio uma sentença base que me retorna TUDO o que eu quiser.
String sentencaSelect = "SELECT * FROM DBO.CLIENTES WHERE 1 = 1";
//Agora, eu crio as condições que eu quero. Aqui, criarei duas condições de pesquisa:
//1. Por nome
if (criteria.containsKey("nome")) {
sentencaSelect =
String.format("%s AND UPPER(NOME) LIKE '%%s%'", sentencaSelect, criteria.get("nome"));
}
//2. Por CPF
if (criteria.containsKey("CPF")) {
sentencaSelect =
String.format("%s AND UPPER(CPF) LIKE = '%s'", sentencaSelect, criteria.get("CPF"));
}
PreparedStatement statementSelect = connectionSelect.prepareStatement(sentencaSelect);
ResultSet resultSelect = statementSelect.executeQuery();
List<Cliente> clientes = new ArrayList<Cliente>();
while (resultSelect.next()) {
clientes.add(recuperarObjeto(resultSelect));
}
return clientes;
}
public Cliente recuperarObjeto(ResultSet resultSelect) throws SQLException {
Cliente cliente = new Cliente();
// preenche o seu objeto...
return cliente;
}
}
- Agora, crio uma classe de serviços que faz as pesquisas usando esse método:
[code]public class ServicosCliente {
public List<Cliente> recuperarClientesPorNome(String nomeCliente) throws SQLException {
PersistenciaCliente persistenciaCliente = new PersistenciaCliente();
Map<String, Object> criteria = new HashMap<String, Object>();
criteria.add("nome", nomeCliente);
return persistenciaCliente.recuperarPorCriteria(criteria);
}
public List<Cliente> recuperarClientesPorCPF(String cpfCliente) throws SQLException {
PersistenciaCliente persistenciaCliente = new PersistenciaCliente();
Map<String, Object> criteria = new HashMap<String, Object>();
criteria.add("CPF", cpfCliente);
return persistenciaCliente.recuperarPorCriteria(criteria);
}
}[/code]
Após isso, na minha classe View, eu faço as chamadas de cada método dependendo da pesquisa que o cliente quiser fazer!
Isso soluciona o seu problema?
Abraços!