Bom dia pessoal !
Após muitas dicas de vários colegas daqui cheguei ao código abaixo, no entanto não sei dizer se ele atende ao modelo MVC, sendo assim gostaria de pedir que vocês o analisassem e me indicassem o que devo mudar.
Vou tentar reproduzir a forma como acabei implementando e se voces puderem analisar e apontar onde estão os erros na abordagem vou ficar muito agradecido.
Primeiro a minha Interface com o usuario, suponho que seria minha View:
package app;
import java.util.List;
public class CadastroUsuario_2 extends javax.swing.JFrame {
private Usuario user;
//private List <Usuario> userLista;
private UsuarioModel userModel = new UsuarioModel();
/** Creates new form CadastroUsuario */
public CadastroUsuario_2() {
initComponents();
user = userModel.atual();
MostraDados(user);
}
private void MostraDados(Usuario u) {
txtus_usID.setText(String.valueOf(u.getUsusId()));
txtus_usLogin.setText(u.getUsusLogin());
txtus_usNome.setText(u.getUsusNome());
txtus_pePerfil.setText(u.getUspePerfil());
}
private void btAnteriorActionPerformed(java.awt.event.ActionEvent evt) {
user = userModel.anterior();
MostraDados(user);
}
private void btProximoActionPerformed(java.awt.event.ActionEvent evt) {
user = userModel.proximo();
MostraDados(user);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new CadastroUsuario_2().setVisible(true);
}
});
}
}
Agora a minha classe Usuario (não sei como classifica-la, acredito que faça parte da camada Model):
package app;
@Entity
@Table(name = "usuario")
@NamedQueries( {
@NamedQuery(name = "Usuario.findByUsusId", query = "SELECT u FROM Usuario u WHERE u.ususId = :ususId"),
@NamedQuery(name = "Usuario.findByUsusLogin", query = "SELECT u FROM Usuario u WHERE u.ususLogin = :ususLogin"),
@NamedQuery(name = "Usuario.findByUsusPassoword", query = "SELECT u FROM Usuario u WHERE u.ususPassoword = :ususPassoword"),
@NamedQuery(name = "Usuario.findByUsusNome", query = "SELECT u FROM Usuario u WHERE u.ususNome = :ususNome"),
@NamedQuery(name = "Usuario.findByUspePerfil", query = "SELECT u FROM Usuario u WHERE u.uspePerfil = :uspePerfil")
})
public class Usuario implements Serializable {
@Id
@Column(name = "us_usId", nullable = false)
private Integer ususId;
@Column(name = "us_usLogin")
private String ususLogin;
@Column(name = "us_usPassoword")
private String ususPassoword;
@Column(name = "us_usNome")
private String ususNome;
@Column(name = "us_pePerfil")
private String uspePerfil;
/** Creates a new instance of Usuario */
public Usuario() {
}
/**
* Cria uma nova instância de Usuario com os valores especificados.
* @param ususId o ususId do Usuario
*/
public Usuario(Integer ususId) {
Usuario userTemp = UsuarioDAO.BuscarUsuario(ususId);
this.ususId = userTemp.getUsusId();
this.ususLogin = userTemp.getUsusLogin();
this.ususNome = userTemp.getUsusNome();
this.uspePerfil = userTemp.getUspePerfil();
this.ususPassoword = userTemp.getUsusPassoword();
}
public Integer getUsusId() {
return this.ususId;
}
public void setUsusId(Integer ususId) {
this.ususId = ususId;
}
public String getUsusLogin() {
return this.ususLogin;
}
public void setUsusLogin(String ususLogin) {
this.ususLogin = ususLogin;
}
/* Todos os outros getters e setters estariam aqui
/**
* Retorna um valor de código hash para o objeto. Esta implementação computa
* um valor de código hash baseado nos campos id deste objeto.
* @return um valor de código hash para este objeto.
*/
@Override
public int hashCode() {
int hash = 0;
hash += (this.ususId != null ? this.ususId.hashCode() : 0);
return hash;
}
}
Agora a classe que chamei de UsuarioModel, mas agora não sei se ela representa esta camada:
package app;
import java.util.List;
import javax.swing.JOptionPane;
public class UsuarioModel {
private Usuario userAtual;
private List <Usuario> listaUser = null;
/** Creates a new instance of UsuarioModel */
public UsuarioModel() {
listaUser = UsuarioDAO.BuscarListaUsuario();
userAtual = listaUser.get(0);
}
public Usuario proximo() {
if (listaUser.indexOf(userAtual) < listaUser.size() - 1)
userAtual = listaUser.get(listaUser.indexOf(userAtual)+1);
else
JOptionPane.showMessageDialog(null, "Ultimo");
return userAtual;
}
public Usuario anterior() {
if (listaUser.indexOf(userAtual) > 0)
userAtual = listaUser.get(listaUser.indexOf(userAtual)-1);
return userAtual;
}
public Usuario atual() {
return userAtual;
}
}
E por fim uma classe responsável pela conexão com o banco, é nessa classe que eu pretendo colocar os métodos de persistencia, insert, update e delete, alem do select que já coloquei:
package app;
public class UsuarioDAO {
private static Connection conn = null;
private static Statement st;
private static ResultSet rs;
/** Creates a new instance of UsuarioDAO */
public UsuarioDAO() {
}
private static void Conecta(){
try {
conn = ConnectionFactory.getConnection();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
public static List <Usuario> BuscarListaUsuario() {
Usuario userTemp;
List <Usuario> listaUserTemp = new ArrayList <Usuario> ();
try {
Conecta();
st = conn.createStatement();
rs = st.executeQuery("Select * from Usuario");
while (rs.next()) {
userTemp = new Usuario();
userTemp.setUsusId(rs.getInt("us_usID"));
userTemp.setUsusNome(rs.getString("us_usNome"));
userTemp.setUsusLogin(rs.getString("us_usLogin"));
userTemp.setUsusPassoword(rs.getString("us_usPassoword"));
userTemp.setUspePerfil(rs.getString
("us_pePerfil"));
listaUserTemp.add(userTemp);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return listaUserTemp;
}
}
Para tentar diminuir cortei algumas coisas, por exemplo os métodos criados pelo NetBeans 5.5, como o initComponents(), imports e declaração de JTextFiels e JLabels, mas no meu código esta completo e aparentemente funcionando.
Bom se alguém tiver boa vontade e paciência para analisar meus códigos e me orientar, vou ficar realmente muito grato. De coração.
Um abraço a todos.