O passo a passo para a criação de uma aplicação usando Java, com Banco de Dados (BD) chamado H2 na estrutura MVC (Modelo, Visão e Controle)....
O passo a passo para a criação de uma aplicação usando Java, com Banco de Dados (BD) chamado H2 na estrutura MVC (Modelo, Visão e Controle).
Será um exemplo com uma única classe sendo armazenada no BD.

Para os códigos que seguem abaixo, em todas as classes deve-se incluir o package correto e adicionar os imports necessários. Observe a divisão abaixo:
A primeira classe contém o famoso psvm (public static void main), que inicia a execução da aplicação:
A classe ApiculturaController.java controla a janela de Login e a que contém o Menu.
Se o usuário acertar a senha, que é única, a janela com menu será apresentada, caso contrário a aplicação é finalizada.
São instanciadas as classes com a interface gráfica e aqui são tratados os eventos.
A classe LoginGUI.java deve conter os componentes em seu método construtor e a adição dos eventos, que são tratados na classe de controle (ApiculturaController.java).
Um exemplo para a interface gráfica de Login é a seguinte:

A classe ApiculturaGUI.java é a que contém o menu, usando as classes DesktopPane e JInternalFrame. Observe a implementação:
Como aconteceu na classe LoginGUI.java, a classe ApiculturaGUI deve conter os componentes para a criação do menu em seu método construtor e a adição dos eventos, que são tratados na classe de controle (ApiculturaController.java).
Veja como fica o Front-end da aplicação:

Observe que o JPanel contém uma imagem de fundo. Para maiores detalhes, acesse a explicação clicando aqui.
A próxima classe é a IncluirClienteController.java que chama a interface gráfica para a classe Cliente e trata os eventos que serão adicionados pela classe ClienteGUI.java.
A classe ClienteGUI.java contém apresentação da interface gráfica para tratar os dados do Cliente.
Veja o exemplo:

Veja o trecho do código:
O menu está no JDesktopPane e as demais janelas serão JInternalFrame.
A classe que controla Cliente (IncluirClienteController.java) também precisa da classe Cliente.java que tem a definição dos atributos e dos métodos acessores (get) e modificadores (set).
Veja parte do código:
A classe ClienteDAO.java (Data Access Object) trata das rotinas de inclusão, exclusão, alteração e consulta, ou seja, trabalha diretamente com a fonte de dados (o BD). Todos os seus métodos realizarão a conexão com o Banco de Dados, sendo assim, precisam instanciar um objeto da classe FactoryConnection.java.
Ex.: Connection con = FactoryConnection.getConnection();
Para maiores detalhes, clique aqui e acesse o Fórum Programação Java - Dicas que contém detalhes da classe ClienteDAO.
A classe FactoryConnection apresenta a conexão com o Banco de Dados, que neste exemplo será o H2.
Trabalhando dessa forma, suas classes ficam menores e bem dividas por assunto!
O códigos foram didaticamente apresentados! Portanto, use sua criatividade e melhore-os!
Links para pesquisa:
Padrões de Projeto : O modelo MVC
Será um exemplo com uma única classe sendo armazenada no BD.

Para os códigos que seguem abaixo, em todas as classes deve-se incluir o package correto e adicionar os imports necessários. Observe a divisão abaixo:
- gui (Visão)
- LoginGUI
- ApiculturaGUI
- ClienteGUI
- controller (Controle)
- ApiculturaController
- IncluirClienteController
- persistência (Modelo)
- ClienteDAO
- FactoryConnection
- dominio (Modelo)
- Cliente
A primeira classe contém o famoso psvm (public static void main), que inicia a execução da aplicação:
public class Apicultura {
public static void main(String[] args) {
ApiculturaController app = new ApiculturaController();
}
}
A classe ApiculturaController.java controla a janela de Login e a que contém o Menu.
Se o usuário acertar a senha, que é única, a janela com menu será apresentada, caso contrário a aplicação é finalizada.
São instanciadas as classes com a interface gráfica e aqui são tratados os eventos.
public class ApiculturaController {
private ApiculturaGUI gui = null;
private LoginGUI guiLog = null;
public ApiculturaController() {
guiLog = new LoginGUI();
guiLog.adicionarOuvinteLogin (new OuvinteLogin());
}
class OuvinteLogin implements ActionListener {
public void actionPerformed (ActionEvent ev){
if (ev.getActionCommand() == "OK") {
String senha = String.valueOf(guiLog.pfSenha.getPassword());
if (senha.compareTo("SENHA")==0) {
guiLog.dispose(); // fecha a janela de login
gui = new ApiculturaGUI();
gui.adicionarOuvinte(new OuvinteIncluir());
}
else {
JOptionPane.showMessageDialog(null, "Senha Inválida!");
System.exit(0);
}
}
else System.exit(0);
}
}
class OuvinteIncluir implements ActionListener {
public void actionPerformed (ActionEvent ev) {
Object fonte = ev.getSource();
if (ev.getSource() instanceof JMenuItem) {
if (fonte == gui.mcSair) {
System.exit (0);
}
else
if (fonte == gui.mcCadastro) {
IncluirClienteController clienteController =
new IncluirClienteController();
gui.desktop.add(clienteController.guiCli);
}
}
}
}
}
A classe LoginGUI.java deve conter os componentes em seu método construtor e a adição dos eventos, que são tratados na classe de controle (ApiculturaController.java).
public class LoginGUI extends JFrame {
// declarar os componentes aqui como public
public LoginGUI() {
// tratar a parte gráfica aqui
}
public void adicionarOuvinteLogin (ActionListener ouvinte) {
this.btOK.addActionListener(ouvinte);
this.btCancelar.addActionListener(ouvinte);
}
}
Um exemplo para a interface gráfica de Login é a seguinte:

A classe ApiculturaGUI.java é a que contém o menu, usando as classes DesktopPane e JInternalFrame. Observe a implementação:
public class ApiculturaGUI extends JFrame {
public JDesktopPane desktop;
public JMenuBar barraDeMenu;
public JMenuItem mcCadastro, mpCadastro, mcSair, miSobre;
public ApiculturaGUI() {
this.setTitle("Sistema de Controle de Produção Apícula");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
barraDeMenu = criaMenu();
this.setJMenuBar(barraDeMenu);
desktop = new JDesktopPane();
this.setContentPane(desktop);
this.setVisible(true);
}
public JMenuBar criaMenu() {
// crie seu menu com os componentes JMenu, JMenuBar e JMenuItem
}
public void adicionarOuvinte (ActionListener ouvinte) {
this.mcCadastro.addActionListener(ouvinte);
this.mcSair.addActionListener(ouvinte);
}
}
Como aconteceu na classe LoginGUI.java, a classe ApiculturaGUI deve conter os componentes para a criação do menu em seu método construtor e a adição dos eventos, que são tratados na classe de controle (ApiculturaController.java).
Veja como fica o Front-end da aplicação:

Observe que o JPanel contém uma imagem de fundo. Para maiores detalhes, acesse a explicação clicando aqui.
A próxima classe é a IncluirClienteController.java que chama a interface gráfica para a classe Cliente e trata os eventos que serão adicionados pela classe ClienteGUI.java.
public class IncluirClienteController {
public ClienteGUI guiCli;
public IncluirClienteController() {
guiCli = new ClienteGUI();
guiCli.adicionarOuvinteCliente1 (new OuvinteIncluirCliente1());
}
class OuvinteIncluirCliente1 implements ActionListener {
public void actionPerformed(ActionEvent ev){
Object fonte = ev.getSource();
if (fonte == guiCli.bSaiCli)
guiCli.dispose();
else if (fonte == guiCli.bLimCli)
guiCli.limparCampos();
else if (fonte == guiCli.bExcCli) {
ClienteDAO clienteDAO = new ClienteDAO();
clienteDAO.excluirCliente(guiCli.tfcodcli.getText());
guiCli.limparCampos();
}
else if (fonte == guiCli.bConCli) {
ClienteDAO clienteDAO = new ClienteDAO();
Cliente cliente = clienteDAO.consultarCliente();
if (cliente != null)
mostrarCliente(cliente);
}
else if (fonte == guiCli.bIncCli) {
ClienteDAO clienteDAO = new ClienteDAO();
Cliente cliente = obterCliente();
clienteDAO.incluirCliente(cliente);
guiCli.limparCampos();
}
else if (fonte == guiCli.bAltCli)
ClienteDAO clienteDAO = new ClienteDAO();
Cliente cliente = obterCliente();
clienteDAO.alterarCliente(cliente);
}
}
}
}
public Cliente obterCliente(){
Cliente cliente = new Cliente();
// Aqui deve-se obter todos os dados contidos nos componentes
// e preencher o objeto cliente.
// Exemplo: cliente.setNomCli(guiCli.tfnomcli.getText());
return cliente;
}
public void mostrarCliente(Cliente cliente){
// Aqui deve-se obter todos os dados contidos no objeto cliente
// e preencher os componentes da interface gráfica
// Exemplo: guiCli.tfnomcli.setText(cliente.getNomCli());
}
}
A classe ClienteGUI.java contém apresentação da interface gráfica para tratar os dados do Cliente.
Veja o exemplo:

Veja o trecho do código:
public class ClienteGUI extends JInternalFrame {
// declarar os componentes da interface
public ClienteGUI() {
// criar a interface gráfica
}
public void adicionarOuvinteCliente1 (ActionListener ouvinte) {
// adicionar os ouvintes aos botões
// Ex.: this.bIncCli.addActionListener(ouvinte);
}
public void limparCampos() {
// comandos para limpar os componentes
}
}
O menu está no JDesktopPane e as demais janelas serão JInternalFrame.
A classe que controla Cliente (IncluirClienteController.java) também precisa da classe Cliente.java que tem a definição dos atributos e dos métodos acessores (get) e modificadores (set).
Veja parte do código:
public class Cliente {
// declare todos os atributos como private
private int codcli;
private String nomcli;
public Cliente() {
super();
}
public Cliente (int codcli, String nomcli){
super();
this.codcli = codcli;
this.nomcli = nomcli;
}
public int getCodCli(){
return this.codcli;
}
public String getNomCli(){
return this.nomcli;
}
public void setCodCli(int codcli) {
this.codcli = codcli;
}
public void setNomCli(String nomcli) {
this.nomcli = nomcli;
}
}
A classe ClienteDAO.java (Data Access Object) trata das rotinas de inclusão, exclusão, alteração e consulta, ou seja, trabalha diretamente com a fonte de dados (o BD). Todos os seus métodos realizarão a conexão com o Banco de Dados, sendo assim, precisam instanciar um objeto da classe FactoryConnection.java.
Ex.: Connection con = FactoryConnection.getConnection();
public class ClienteDAO {
public void incluirCliente(Cliente cliente) {
// tratar inclusão
}
public Cliente consultarCliente() {
// tratar consulta
return cliente;
}
public void alterarCliente(Cliente cliente) {
// tratar alteração
}
public void excluirCliente(String strcod) {
// tratar exclusão
}
}
Para maiores detalhes, clique aqui e acesse o Fórum Programação Java - Dicas que contém detalhes da classe ClienteDAO.
A classe FactoryConnection apresenta a conexão com o Banco de Dados, que neste exemplo será o H2.
public class FactoryConnection {
public static Connection getConnection(){
Connection con = null;
try {
Class.forName("org.h2.Driver");
String url = "jdbc:h2:tcp://localhost:9092/C:/DB/Banco";
String user = "admin";
String password = "senha";
con = DriverManager.getConnection(url, user, password);
} catch (Exception e){
e.printStackTrace();
}
return con;
}
}
Trabalhando dessa forma, suas classes ficam menores e bem dividas por assunto!
O códigos foram didaticamente apresentados! Portanto, use sua criatividade e melhore-os!
Links para pesquisa:
Padrões de Projeto : O modelo MVC
Muito bom esse artigo..
ResponderExcluircara valeu vc salvou meu dia!!!
ResponderExcluirFala mano, sou faltou o codigo fonte para baixar :) mesmo assim vlw
ResponderExcluirExcelente escritura rapaz! até favoritei! :D
ResponderExcluirMuito bom, deu para ter uma ideia, mas para ilucidar melhor quem está a começar, aconselharia colocar uma classe completa. Parabéns
ResponderExcluirOla pessoal,preciso fazer uma sintese sobre o artigo acima,mais não faço ideia de como fazer....alguem poderia me ajudar????
ResponderExcluirDesde ja agradeço.....
Opa excelente explicação!! agora como o companheiro a ei em cima falou só falto o código para download, se caso tiver manda pro meu maio ok?! estou precisando irei apresentar um trabalho a respeito na facul, vlw!
ResponderExcluir** rodrigobegoti@hotmail.com **
Ué? Não é só copiar e colar?
ResponderExcluirrealmente perfeito.. show de boa....so queria o código fonte a parti desse aplicativo conseguiria fazer qualquer outro CRUD em MVC perfeito..
ResponderExcluirAmigo, bom o seu artigo, mas uma coisa é 3 camadas, outra coisa é MVC.
ResponderExcluir3 camadas é quando tem cliente->servidor_aplicação->servidor_dados
MVC é outra coisa. É possível utilizar 3 camadas com MVC, mas são duas coisas distintas.
Jonatas Fischer
Ola! Gostei muito do tutorial.
ResponderExcluirMas alguém conseguiu completar o código?
Estou com vontade de completar e disponibilizar.
Tenho certeza que será uma boa contribuição.
Será que alguém tem algun outro link com turoial parecido?
SDS
Deluqui
Excelente cara...
ResponderExcluirSystem.out.print("Blog Adcionado aos favoritos com Sucesso ");
SDS.
Olá, tenho feito um sistema com sua ajuda com a ajuda deste forum, mas preciso de umas dicas ainda, tem como entrar em contato?
ResponderExcluirdoug_sciani@hotmail.com
obrigado pelo tuto.
oi bom dia, vc teria a classe3 adicionarOuvinteCliente1 para ter uma idéia de como fazer, obrigado
ResponderExcluirrs-galhardo@bol.com.br
Ótimo post, suas informações são muito importantes, boa iniciativa
ResponderExcluirAbraços,
Ranieri Marinho de Souza
SEGR - Segurança da Informação
http://blog.segr.com.br
Ótimo post, suas informações são muito importantes, boa iniciativa
ResponderExcluirAbraços,
Ranieri Marinho de Souza
SEGR - Segurança da Informação
http://blog.segr.com.br
Artigo espetacular a muito tempo venho procurando algo assim e finalmente encontrei muito obrigado
ResponderExcluirArtigo excelente!
ResponderExcluirMuito obrigado, tirou muitas das minhas dúvidas!
Abraços.
A profa. Gilene ficará muito feliz com os agradecimentos e de saber que o texto está dirimindo muitas dúvidas. Lembrando que o post está aberto à saudável discussão acadêmica.
ResponderExcluirAbraços.
Excelente post fico feliz por ter pessoas inteligentes e solidarias ajudarem outras como você me ajudou.Vou desenvolver desta forma.Muito obrigado e boas festas.
ResponderExcluirboas eu gostei do artigo se bem que estou a ter alguns problemas.. epossivel por todo o codigo do programa desde a parte grafica ate aao mais minimo codigo? eu sei que é estar a pedir a papa toda mas estou a ter alguns problemas visto que estou a entrar no Mundo JAVA
ResponderExcluircaso queira contactar minibytexxx@hotmail.com
MUITO BOM!
ResponderExcluirBrigadão aí!
Nossa! Ótimo post!
ResponderExcluirAjudou pra caramba na organização dos códigos de um projeto que estou fazendo.
Só tenho uma dúvida... A classe Cliente que contém os atributos privados e os métodos GET e SET fica em que nível nesse exemplo?? isto é, que pacote??
Seria possível postar como ficaria o diagrama de classes desse exemplo?
Olá, ajudou bastante. Mas poderia disponibilizar o código para baixar, ou colocar as classes completas.
ResponderExcluir