Opa Galera, perai...
Lembrando que um dos motivos da utilização de linguagens orientadas a objetos eh a reutilizacao de codigo, logo nao se deve confundir as coisas.
Uma coisa sao as suas classes de negocio (JavaBeans) e outra coisa eh persistencia.
Se vc poe informacoes de persistencia diretamente no seu bean vc esta matando a sua reutilização, no exemplo que vcs estao usando, a classe usuario, quantos sistemas diferente poderao ser feitos se utilizando dessa classe?? Muitos, mas cada um em um BANCO/TABELA diferentes ;)
A Melhor maneira eh sem duvida a utilizacao de DAO como ja disse o douglasfs, onde TODA informacao referente a persistencia (banco/tabela/ mapeamento objeto-relacional) sera armazenada.
E apenas comentando o codigo enviado pelo douglasfs.
1) Nunca utilize classes de collections como retorno, sempre use as Interfaces, isso possibilita que vc altere o tipo de collection sem se preoculpar com quem usa, a assinatura do metodo ficaria assim:
public Collection findUserByName(Usuario criteria) { ...
2) Nunca retorne null caso nada tenha vindo, crie uma Exception de Negocio, como UsuarioNotFoundException e sempre que nada for encontrado lance a Exception, o modelo de Exception foi criado para esses casos tb, e a migracao para algum tipo de framework distribuido (ejb por exemplo) ficaria mais facil uma fez que eles trabalham dessa forma (FinderException), o codigo ficara assim:
public Collection findUserByName(Usuario criteria) throws UserNotFoundException {
ArrayList listaUsuarios = new ArrayList();
// codigo para efetuar o select, vou por em alto nivel
select nome, senha from tabela where nome=criteria.getNome();
// executa o método next do ResultSet
// primeiro verifico se eu tenho alguma ocorrência
if (rs.next()) {
do {
Usuario usuario = new Usuario(rs.getString("nome"),rs.getString("senha"));
listaUsuarios.add(usuario);
}
while(rs.next());
}
else
throw new UserNotFoundException("Nenhum usuario encontrado!");
return listaUsuarios;
}
Agora uma frescura minha ;), eu costumo pedir aos alunos para tentar deixar o codigo o mais claro possivel uma vez que varias pessoas na empresa talvez leiam ele, entao eu evito if com do while, eu faria assim:
public Collection findUserByName(Usuario criteria) throws UserNotFoundException {
ArrayList listaUsuarios = new ArrayList();
// codigo para efetuar o select, vou por em alto nivel
select nome, senha from tabela where nome=criteria.getNome();
// executa o método next do ResultSet
// primeiro verifico se eu tenho alguma ocorrência
while(rs.next()){
Usuario usuario = new Usuario(rs.getString("nome"),rs.getString("senha"));
listaUsuarios.add(usuario);
}
if (usuario.size() == 0){
throw new UserNotFoundException("Nenhum usuario encontrado!");
}
return listaUsuarios;
}
Abraco,