Aula 07 - Realizando persistência de dados
1- Introdução
A persistência de dados é um assunto independente da linguagem java para web. Persistir dados em um banco de dados, arquivo ou qualquer outra forma é essencial para qualquer aplicação. Como iremos persistir estes dados é uma decisão importante a ser tomada pelo desenvolvedor.
Nesta aula iremos desenvolver uma forma bastante "primitiva" de persistência de dados e utilizaremos as classes de acesso (DAO - data access object). Estas classes isolam a persistência dos dados e utiliza strings para realizar as operações na base de dados.
2- Inicializando um novo projeto
Para o projeto dessa aula iremos utilizar também a arquitetura MVC (model, view, controler). Nesta arquitetura iremos separar cada parte do projeto web para que eles realizem uma função específica.
Model: irá conter as informações de cada entidade do banco de dados, assim como as definições de funções que poderão realizar a manipulação da base.
View: é responsável por manipular a interface (HTML) e enviar informações para o controler.
Controler: responsável por controlar a camada de view e model contendo as regras de negócio.
Considerando o padrão MVC, iremos criar 3 novos pacotes dentro de nosso projeto de exemplo dessa aula:
3- Criando um modelo básico de "pessoa"
Após a criação dos pacotes onde iremos guardar nossas classes, iremos começar criando um modelo muito simples de uma "pessoa". Esta classe é muito utilizada para realizar cadastro de clientes. Veja a implementação:package Model;
public class Pessoa {
private int idPessoa;
private String nomePessoa;
private String emailPessoa;
private String senhaPessoa;
public Pessoa(int idPessoa, String nomePessoa, String emailPessoa, String senhaPessoa) {
this.idPessoa = idPessoa;
this.nomePessoa = nomePessoa;
this.emailPessoa = emailPessoa;
this.senhaPessoa = senhaPessoa;
}
public Pessoa() {
}
public int getIdPessoa() {
return idPessoa;
}
public void setIdPessoa(int idPessoa) {
this.idPessoa = idPessoa;
}
public String getNomePessoa() {
return nomePessoa;
}
public void setNomePessoa(String nomePessoa) {
this.nomePessoa = nomePessoa;
}
public String getEmailPessoa() {
return emailPessoa;
}
public void setEmailPessoa(String emailPessoa) {
this.emailPessoa = emailPessoa;
}
public String getSenhaPessoa() {
return senhaPessoa;
}
public void setSenhaPessoa(String senhaPessoa) {
this.senhaPessoa = senhaPessoa;
}
@Override
public String toString() {
return "Pessoa{" + "idPessoa=" + idPessoa + ", nomePessoa=" + nomePessoa + ", emailPessoa=" + emailPessoa + ", senhaPessoa=" + senhaPessoa + '}';
}
}
4- Criando um controler (DAO)
No pacote denominado Controler iremos armazenar uma classe que utiliza um modelo e realiza a persistência dos dados no banco de dados. Para isso iremos definir 5 funções que são as principais de um sistema (CRUD). São elas: criar, ler por id, ler todos, atualizar e deletar.
Veja como os protótipos desta classe ficam (ainda sem a implementação da busca na base de dados):
package Controler;
import Model.Pessoa;
import java.util.ArrayList;
import java.util.List;
public class PessoaDAO {
public boolean criar(Pessoa p) {
return true;
}
public boolean update(Pessoa p) {
return true;
}
public boolean delete(Pessoa p) {
return true;
}
public Pessoa lerPorId(int id) {
Pessoa p = new Pessoa();
return p;
}
public List<Pessoa> lerTodas() {
List<Pessoa> listaDePessoas = new ArrayList<>();
return listaDePessoas;
}
}
Porém, para criar realizar estas operações é necessário especificar qual a base de dados utilizada, driver, string de conexão e principalmente abrir uma conexão com a base de dados. Então implementaremos uma classe chamada DbConnect que realizará esta conexão e armazenaremos dentro de um novo pacote denominado "Util".
package Util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DbConnect {
public static String status = "Não conectou...";
public DbConnect() {
}
public static java.sql.Connection getConexaoMySQL() {
Connection connection = null; //atributo do tipo Connection
try {
String driverName = "com.mysql.jdbc.Driver";
Class.forName(driverName);
String serverName = "localhost"; //caminho do servidor do BD
String mydatabase = "mysql"; //nome do seu banco de dados
String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
String username = "root"; //nome de um usuário de seu BD
String password = "12345"; //sua senha de acesso
connection = DriverManager.getConnection(url, username, password);
if (connection != null) {
status = ("STATUS--->Conectado com sucesso!");
} else {
status = ("STATUS--->Não foi possivel realizar conexão");
}
return connection;
} catch (ClassNotFoundException e) { //Driver não encontrado
System.out.println("O driver expecificado nao foi encontrado.");
return null;
} catch (SQLException e) {
System.out.println("Nao foi possivel conectar ao Banco de Dados.");
return null;
}
}
public static String statusConection() {
return status;
}
public static boolean FecharConexao() {
try {
DbConnect.getConexaoMySQL().close();
return true;
} catch (SQLException e) {
return false;
}
}
public static java.sql.Connection ReiniciarConexao() {
FecharConexao();
return DbConnect.getConexaoMySQL();
}
}
Veja que a classe implementada acima possui métodos de pegar uma conexão e fechar uma conexão. Porém, são métodos estáticos (static) e não precisam de uma instância para serem executados.
O primeiro passo para a persistência de dados é criar uma conexão no controler (conn) e posteriormente criar um statement. A partir do statement criado você poderá executar qualquer operação da base de dados (CRUD).
Veja abaixo como fica o código do comando criar:
public boolean criar(Pessoa p) {
Connection conn = DbConnect.getConexaoMySQL();
String insertSQL = "INSERT INTO Pessoa (nomePessoa, senhaPessoa, emailPessoa) VALUES ('"
+ p.getNomePessoa() + "','"
+ p.getSenhaPessoa() + "','"
+ p.getEmailPessoa() + "')";
try {
Statement st = conn.createStatement();
st.executeUpdate(insertSQL);
return true;
} catch (SQLException ex) {
Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
}
A seguir, temos o exemplo do comando de realizar uma leitura no banco de dados utilizando um ResultSet como objeto de retorno:
public Pessoa lerPorId(int id) {
Pessoa p = new Pessoa();
Connection conn = DbConnect.getConexaoMySQL();
String selectSQL = "SELECT * FROM Pessoa WHERE idPessoa = " + id;
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(selectSQL);
while (rs.next()) {
p.setNomePessoa(rs.getString("nomePessoa"));
p.setSenhaPessoa(rs.getString("senhaPessoa"));
p.setEmailPessoa(rs.getString("emailPessoa"));
}
} catch (SQLException ex) {
Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return p;
}
public Pessoa lerPorId(int id) {
Pessoa p = new Pessoa();
Connection conn = DbConnect.getConexaoMySQL();
String selectSQL = "SELECT * FROM Pessoa WHERE idPessoa = " + id;
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(selectSQL);
while (rs.next()) {
p.setNomePessoa(rs.getString("nomePessoa"));
p.setSenhaPessoa(rs.getString("senhaPessoa"));
p.setEmailPessoa(rs.getString("emailPessoa"));
}
} catch (SQLException ex) {
Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return p;
}
Para testarmos a persistência de dados criaremos uma classe no pacote de testes que realizara uma simples adição no banco e consulta.
public class TestandoPersistencia {
public static void main(String[] args) {
Pessoa p = new Pessoa(0, "vinicius", "vinistos@gmail.com", "12345");
PessoaDAO pDao = new PessoaDAO();
pDao.criar(p);
System.out.println(pDao.lerPorId(1));
}
}
Post a Comment