Pessoal, na minha aplicação tenho um pacote chamado repositório, com classe separada para cada classe do pacote modelo, gostaria de saber com fazer para tornar os métodos todos genérico usando apenas um DAO para todas as classe do pacote modelo, um DAO genérico consigo fazer o problema é transformar esse métodos específicos que tenho em métodos genéricos. estou colocando um exemplo da umas das classe do meu repositório, esse métodos são comuns para todos as classe do pacote repositório.
public class RepositorioUsuario implements IRepositorioUsuario {
Session sessao = null;
Transaction tx = null;
public void salvarUsuario(Usuario a) {
sessao = HibernateUtil.getSession();
try {
tx = sessao.beginTransaction();
if (procurar(a.getLogin()) == null) {
sessao.save(a);
tx.commit();
JOptionPane.showMessageDialog(null,
"Usuário salvo com sucesso!");
} else {
JOptionPane
.showMessageDialog(null,
"Usuário não pode ser cadastrato, verifique se o usuário já existente!");
}
} catch (Exception e) {
e.printStackTrace();
}
sessao.close();
}
public void removerUsuario(long id) {
try {
sessao = HibernateUtil.currentSession();
tx = sessao.beginTransaction();
Query selecao = sessao
.createQuery("FROM Usuario WHERE id =:idUsuario");
selecao.setLong("idUsuario", id);
Usuario a = (Usuario) selecao.uniqueResult();
if (a != null) {
// CODIGO PARA JOPTIONPANE APARECER SIM OU NÃ?O
String[] opcoes = { "Sim", "Nao" };
int n = JOptionPane.showOptionDialog(null,
"Deseja remover Usuario?", " ",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]);
if (n == 0) {
sessao.delete(a);
tx.commit();
}
}
} catch (Exception e) {
e.printStackTrace();
}
sessao.close();
}
public void atualizarUsuario(long id) {
sessao = HibernateUtil.currentSession();
try {
tx = sessao.beginTransaction();
Query selecao = sessao
.createQuery("FROM Usuario WHERE id =:idUsuario");
selecao.setLong("idUsuario", id);
Usuario a = (Usuario) selecao.uniqueResult();
if (a != null) {
// CODIGO PARA JOPTIONPANE APARECER SIM OU NÃ?O
String[] opcoes = { "Sim", "Nao" };
int n = JOptionPane.showOptionDialog(null,
"Deseja Aleterar Usuário?", " ",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]);
if (n == 0) {
sessao.update(a);
tx.commit();
}
sessao.close();
}
} catch (Exception e) {
e.printStackTrace();
}
sessao.close();
}
private Usuario procurar(String login) {
Query selecao = sessao.createQuery("FROM Usuario WHERE login =:LoginUsuario");
selecao.setString("LoginUsuario", login);
Usuario a = (Usuario) selecao.uniqueResult();
return a;
}
public Usuario procurarFuncaco(String login) {
sessao = HibernateUtil.getSession();
tx = sessao.beginTransaction();
Query selecao = sessao.createQuery("FROM Usuario WHERE login =:LoginUsuario");
selecao.setString("LoginUsuario", login);
Usuario a = (Usuario) selecao.uniqueResult();
return a;
}
public boolean procurarPeloNomeeSenha(String login, String senha) {
sessao = HibernateUtil.getSession();
tx = sessao.beginTransaction();
Criteria c = sessao.createCriteria(Usuario.class);
Criterion _login = Restrictions.eq("login", login);
c.add(_login);
Criterion _senha = Restrictions.eq("senha", senha);
c.add(_senha);
return c.uniqueResult() != null;
}
@SuppressWarnings("unchecked")
public List<Usuario> listarTodosUsuarios() {
sessao = HibernateUtil.currentSession();
tx = sessao.beginTransaction();
List<Usuario> la = null;
Criteria todos = sessao.createCriteria(Usuario.class);
la = todos.list();
if (la == null) {
JOptionPane.showMessageDialog(null, "Nenhum registro encontrado!");
}
sessao.close();
return la;
}
@SuppressWarnings("unchecked")
public List<Usuario> listarUsuarioLikeNome(String texto) {
sessao = HibernateUtil.currentSession();
tx = sessao.beginTransaction();
Criteria criteira = sessao.createCriteria(Usuario.class).add(
Restrictions.ilike("nome", "texto%"));
List<Usuario> resultados = criteira.list();
if (resultados == null) {
JOptionPane.showMessageDialog(null, "Nenhum registro encontrado!");
}
sessao.close();
return resultados;
}
}
Fico no aguardo da ajuda de vocês,