3 de fev. de 2020

Java Desktop, Cadastro CRUD - 2.2: MVC IntelliJ

Nesta segunda parte vamos criar e organizar o projeto em pacotes, criar a classe bean e classes auxiliares, usando a IDE IntelliJ IDEA. Confira a Parte 1.2 neste link.

O projeto funcionará no padrão de arquitetura MVC (Model-View-Controler). Veja mais detalhes sobre este padrão neste link.

Criando um novo projeto


Crie um novo projeto - Menu File - New - Project. Na parte 1.2 você pode ver como dar os primeiros passos na ferramenta. As duas primeiras janelas você clica em Next e na terceira, digite o nome do projeto de sua preferência. Neste guia adotei o nome CadCliente.
java-desktop-crud-intellij

Abrindo o conteúdo do projeto clicando na seta à esquerda do projeto, clique com o botão direito do mouse em src para criar os pacotes.
java-desktop-crud-intellij

Opção New - Package:
java-desktop-crud-intellij

Nomeie no padrão invertido de um endereço de site (o seu site ou blog, se for o caso), o pacote bean, onde ficam as classes com os atributos dos clientes (br.com.nomedoseusite.bean).
java-desktop-crud-intellij

Repetindo o processo para o pacote onde ficam as classes de acesso ao objeto - DAO - Data Access Object, br.com.nomedoseusite.dao. Desta vez, clique como botão direito do mouse no pacote que você criou e altere apenas a última palavra, substituindo bean por dao


A seguir, o pacote util, para as classes de conexão com o banco de dados, a classe principal com o método main e a classe das máscaras de preenchimento.

Pacote controle, onde ficam as classes que atribuem os métodos da classe DAO à um objeto, para posteriormente fazer as alterações nos formulários. Neste caso, no formulário de cadastro de clientes.



E o último pacote, view, para o formulário. O resultado será esse:
java-desktop-crud-intellij

Dentro do pacote bean ficará a classe Cliente com os atributos e métodos assessores (Lembrando: botão direito do mouse sobre o pacote br.com.nomedoseusite.bean - New - Class):


Na classe Cliente digite os atributos privados. Recomendo digitar para melhor fixar os códigos, para fins de estudo.
1  package br.com.cliente.bean;
2  
3  public class Cliente {
4   private Integer id;
5   private String nome;
6   private String endereco;
7   private String municipio;
8   private String cep;
9   private String tel;
10  private String cel;
11  private String cpf;
12  private String cnpj;
13  private String genero; 

Crie os métodos assessores, com o curso abaixo dos atributos, pressione Alt + Insert no seu teclado e selecione Getters and Setters:
java-desktop-crud-intellij


Pressione Ctrl + A para selecionar todos da lista e clique em OK:
java-desktop-crud-intellij

Os métodos assessores são criados automaticamente:
1 package br.com.cliente.bean;
2 
3 public class Cliente {
4  private Integer id;
5  private String nome;
6  private String endereco;
7  private String municipio;
8  private String cep;
9  private String tel;
10 private String cel;
11 private String cpf;
12 private String cnpj;
13 private String genero;
14 
15 public Integer getId() {
16  return id;
17 }
18 public void setId(Integer id) {
19  this.id = id;
20 }
21 public String getNome() {
22  return nome;
23 }
24 public void setNome(String nome) {
25  this.nome = nome;
26 }
27 public String getEndereco() {
28  return endereco;
29 }
30 public void setEndereco(String endereco) {
31  this.endereco = endereco;
32 }
33 public String getMunicipio() {
34  return municipio;
35 }
36 public void setMunicipio(String municipio) {
37  this.municipio = municipio;
38 }
39 public String getCep() {
40  return cep;
41 }
42 public void setCep(String cep) {
43  this.cep = cep;
44 }
45 public String getTel() {
46  return tel;
47 }
48 public void setTel(String tel) {
49  this.tel = tel;
50 }
51 public String getCel() {
52  return cel;
53 }
54 public void setCel(String cel) {
55  this.cel = cel;
56 }
57 public String getCpf() {
58  return cpf;
59 }
60 public void setCpf(String cpf) {
61  this.cpf = cpf;
62 }
63 public String getCnpj() {
64  return cnpj;
65 }
66 public void setCnpj(String cnpj) {
67  this.cnpj = cnpj;
68 }
69 public String getGenero() {
70  return genero;
71 }
72 public void setGenero(String genero) {
73  this.genero = genero;
74 }
75 
76 
77 @Override
78 public String toString() {
79  // TODO Auto-generated method stub
80  return getNome();
81 }
82 }

Após os métodos assessores, é preciso subscrever o método toString, que servirá mais adiante na pesquisa do formulário. Usando o recurso da IDE IntelliJ, pressione novamente Alt + Insert e a opção toString...

Para concluir esta parte 2, mais três classes auxiliares no pacote br.com.controle.util

  • a classe Principal com o método main, que dá a "partida" ao sistema; 
  • a classe MaskCampos, para as máscaras de preenchimento usando MaskFormatter
  • a classe Conectar, para fazer a conexão ao banco e a interface Dao, com métodos a serem implementados posteriormente na classe ClenteDao.

Da mesma forma que você criou a classe Cliente, clique com o botão direito do mouse agora no pacote br.com.cliente.util para criar a classe Principal, e digite o método main manualmente (o que recomendo aos iniciantes para ajudar a fixar na memória), ou o atalho psvm:
public static void main(String[] args){
}
O código da classe MaskCampos é o seguinte, com um método para cada campo que haverá no futuro formulaŕio (maskTel, maskCel, maskCpf, maskCep, maskCnpj):
6:  public class MaskCampos{  
7:    DefaultFormatterFactory dff;  
8:      public MaskFormatter maskTel(JFormattedTextField textField) throws ParseException{  
9:      MaskFormatter mask;  
10:      mask = new MaskFormatter("(##)####-####");  
11:      mask.setOverwriteMode(true);  
12:     
13:      mask.setValidCharacters("0123456789");  
14:      mask.setPlaceholderCharacter('_');  
15:      dff = new DefaultFormatterFactory(mask);  
16:        textField.setFormatterFactory(dff);  
17:      return mask;  
18:    }  
19:    public MaskFormatter maskCel(JFormattedTextField textField) throws ParseException{  
20:      MaskFormatter mask;  
21:      mask = new MaskFormatter("(##)#####-####");  
22:      mask.setOverwriteMode(true);  
23:      mask.setValidCharacters("0123456789");  
24:      dff = new DefaultFormatterFactory(mask);  
25:      textField.setFormatterFactory(dff);  
26:      return mask;  
27:    }  
28:    public MaskFormatter maskCpf(JFormattedTextField textField) throws ParseException{  
29:      MaskFormatter mask;  
30:      mask = new MaskFormatter("###.###.###-##");  
31:      mask.setOverwriteMode(true);  
32:      mask.setValidCharacters("0123456789");  
33:      mask.setPlaceholderCharacter('_');  
34:      dff = new DefaultFormatterFactory(mask);  
35:      textField.setFormatterFactory(dff);  
36:      return mask;  
37:    }  
38:    public MaskFormatter maskCep(JFormattedTextField textField) throws ParseException{  
39:      MaskFormatter mask;  
40:      mask = new MaskFormatter("#####-###");  
41:      mask.setOverwriteMode(true);  
42:      mask.setValidCharacters("0123456789");  
43:      mask.setPlaceholderCharacter('_');  
44:      dff = new DefaultFormatterFactory(mask);  
45:      textField.setFormatterFactory(dff);  
46:      return mask;  
47:    }  
48:    public MaskFormatter maskCnpj(JFormattedTextField textField) throws ParseException{  
49:      MaskFormatter mask;  
50:      mask = new MaskFormatter("##.###.###/####-##");  
51:      mask.setOverwriteMode(true);  
52:      mask.setValidCharacters("0123456789");  
53:      mask.setPlaceholderCharacter('_');  
54:      dff = new DefaultFormatterFactory(mask);  
55:      textField.setFormatterFactory(dff);  
56:      return mask;  
57:    }  
58:  }  

Estes métodos serão usados posteriormente na classe do pacote view, onde estará o formulário de cadastro.


Concluindo...


Para terminar, vamos criar a classe de conexão e a interface Dao. Crie a classe Conector no pacote br.com.nomedoseusite.util:


1 package br.com.crissantosinfo.util;
O código para fazer a conexão com o banco (nas publicações seguintes terá a orientação para criar o banco de dados no MySQL):

2 
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.SQLException;
6 
7 public class Conector {
8  static String url = "jdbc:mysql://localhost/cadastrocliente";
9  static String usuario = "root";
10 static String senha = "";
11 static Connection con;
12 
13 public static Connection getConexao() throws SQLException{
14  try{
15
16   if(con == null){
17    con = (Connection) DriverManager.getConnection(url, usuario, senha);
18   }
19   return con;
20  }catch(SQLException e){
21   throw new SQLException(e.getMessage());
22  }
23 }

E a interface Dao - (botão direito em br.com.nomedoseusite.util New - Class) e escolha abaixo a opção Interface:
java-desktop-crud-intellij

Nomeie como feito nas classes:

A interface terá os seguintes métodos, correspondente ao CRUD do banco de dados:

1 package br.com.cliente.util;
2 
3 import java.util.List;
4 
5 public interface Dao {
6  void insert(Object o);
7  void update(Object o);
8  void delete(Object o);
9  Object select(int i);
10 List select();
11 }
Na próxima parte veremos a criação da base de dados (BD) no MySQL Server com o Workbench e nas partes seguintes as classes restantes: ClienteDao, implementando os métodos da interface Dao; ClienteCT para atribuir os métodos de ClienteDao a um objeto e a classe FormCliente, para o formulário.

Veja também: Java Desktop, Cadastro CRUD (IDE Eclipse) - Parte 3

Nenhum comentário:

AD