Olá 😀
Este post é uma continuação do post anterior, nele irei exemplificar uma arquitetura MVC com C.R.U.D – [CREATE,READ,UPDATE,DELETE].
Cada classe será responsável unicamente por sua tarefa, seguindo o padrão singleton.
Teremos a seguinte estrutura:

Esta é a tabela que precisamos criar no banco de dados:
--execute este DDL, antes de executar o programa
CREATE TABLE EMPREGADO(
ID NUMBER(8),
CONSTRAINT ID_PK PRIMARY KEY(ID),
NOME VARCHAR(30),
DAT_NASC DATE,
SALARIO NUMBER(15,2)
);
COMMIT WORK;
Vamos criar os pacotes, aperte a combinação [CTRL+N] digite package ou vá na aba Java > package, crie os pacotes:
br.modelo
br.visual
No pacote br.modelo aperte a combinação [CTRL+N], digite class ou vá na aba Java > class, coloque o nome de Empregado, esta classe é do tipo padrão chamado JavaBeans
Primeiro escreva a classe e seus atributos:
package br.modelo;
import java.sql.Date;
/**
* classe Bean tem os campos da entidade EMPREGADO
* @author Roberto Silva
*
*/
public class Empregado {
private int id;
private String nome;
private Date dat_nasc;
private double salario;
}
Agora vamos gerar os métodos, clique com botão direito do mouse sobre a classe, siga para Source > Generate Getters and Setters, selecione todos atributos [OK].
Após isto iremos criar o método toString(), ele irá exibir o nosso Empregado de forma legível, siga para Source > Generate toString() [OK].
Após estes processos teremos os seguinte resultado:
package br.modelo;
import java.sql.Date;
/**
* classe Bean tem os campos da entidade EMPREGADO
* @author Roberto Silva
*
*/
public class Empregado {
private int id;
private String nome;
private Date dat_nasc;
private double salario;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @return the date
*/
public Date getDat_nasc() {
return dat_nasc;
}
/**
* @param date the date to set
*/
public void setDat_nasc(Date dat_nasc) {
this.dat_nasc = dat_nasc;
}
/**
* @return the salario
*/
public double getSalario() {
return salario;
}
/**
* @param salario the salario to set
*/
public void setSalario(double salario) {
this.salario = salario;
}
/* (non-Javadoc) - exibe os atributos de Empregado
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return " id=" + id + ", nome=" + nome + ", dat_nasc="
+ dat_nasc + ", salario=" + salario + " \n ";
}
}
Agora vamos criar a classe responsável pela persistência dos dados em Empregado,
ficará no pacote br.modelo e chama-se EmpregadoDAO.Esta classe é do tipo DAO-Data Acess Object.
package br.modelo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import br.controle.AcessoBD;
/**
* classe faz a persistencia com a entidade EMPREGADOS do ORACLE
* @author Roberto Silva
* criado em: 04/07/2013
*/
public class EmpregadoDAO {
private Connection conn;
private PreparedStatement pstm;
private ResultSet rs;
private final String SELECT=" SELECT * FROM EMPREGADO ";
private final String INSERT=" INSERT INTO EMPREGADO(ID,NOME,DAT_NASC,SALARIO)VALUES(?,?,?,?) ";
private final String UPDATE=" UPDATE EMPREGADO SET NOME=?,DAT_NASC=?,SALARIO=? WHERE ID=? ";
private final String DELETE=" DELETE FROM EMPREGADO WHERE ID=? ";
/**
* metodo seleciona registros de EMPREGADO
* @param nome
* @return
* @throws Exception
*/
public List selecionar(){
List empregados=new ArrayList();
Empregado emp=null;
try {
conn=AcessoBD.conectar();
pstm=conn.prepareStatement(SELECT);
rs=pstm.executeQuery();
while(rs.next()){
emp=new Empregado();
emp.setId(rs.getInt("id"));
emp.setNome(rs.getString("nome"));
emp.setDat_nasc(rs.getDate("dat_nasc"));
emp.setSalario(rs.getDouble("salario"));
empregados.add(emp);
}
} catch (Exception e) {
System.err.println("Ocorreu um erro, causa:"+e.getMessage());
e.printStackTrace();
}finally{
AcessoBD.desconectar(conn, pstm, rs);
}
return empregados;
}
/**
* faz a inserção de EMPREGADO
* @param empregado
* @throws Exception
*/
public void inserir(Empregado emp){
try {
conn=AcessoBD.conectar();
pstm=conn.prepareStatement(INSERT);
pstm.setInt(1, emp.getId());
pstm.setString(2, emp.getNome());
pstm.setDate(3, emp.getDat_nasc());
pstm.setDouble(4, emp.getSalario());
pstm.executeUpdate();
} catch (Exception e) {
System.err.println("Ocorreu um erro, causa:"+e.getMessage());
e.printStackTrace();
}finally{
AcessoBD.desconectar(conn, pstm, rs);
}
}
/**
* faz a atualização de EMPREGADO
* @param empregado
* @throws Exception
*/
public void atualizar(Empregado emp){
try {
conn=AcessoBD.conectar();
pstm=conn.prepareStatement(UPDATE);
pstm.setString(1, emp.getNome());
pstm.setDate(2, emp.getDat_nasc());
pstm.setDouble(3, emp.getSalario());
pstm.setInt(4, emp.getId());
pstm.executeUpdate();
} catch (Exception e) {
System.err.println("Ocorreu um erro, causa:"+e.getMessage());
e.printStackTrace();
}finally{
AcessoBD.desconectar(conn, pstm, rs);
}
}
/**
* faz a exclusão de Empregado
* @param id
* @throws Exception
*/
public void excluir(int id){
try {
conn=AcessoBD.conectar();
pstm=conn.prepareStatement(DELETE);
pstm.setInt(1, id);
pstm.executeUpdate();
} catch (Exception e) {
System.err.println("Ocorreu um erro, causa:"+e.getMessage());
e.printStackTrace();
}finally{
AcessoBD.desconectar(conn, pstm, rs);
}
}
}
E por último temos a classe visual, que será criada no pacote br.visual, o nome dela será Principal:
package br.visual;
import java.sql.Date;
import java.text.SimpleDateFormat;
import br.modelo.Empregado;
import br.modelo.EmpregadoDAO;
/**
* classe onde executa o programa
* @author Roberto Silva
*
*/
public class Principal {
public static void main(String[] args) throws Exception{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
EmpregadoDAO empDao=new EmpregadoDAO();
Empregado emp1=new Empregado();
Empregado emp2=new Empregado();
Empregado emp3=new Empregado();
//setando o empregado 1
emp1.setId(1);
emp1.setNome("Roberto");
emp1.setDat_nasc(new Date(sdf.parse("1983-08-12").getTime()));
emp1.setSalario(5500.45);
//setando o empregado 2
emp2.setId(2);
emp2.setNome("Katia");
emp2.setDat_nasc(new Date(sdf.parse("1983-08-12").getTime()));
emp2.setSalario(4500.50);
//setando o empregado 3
emp3.setId(3);
emp3.setNome("Rose");
emp3.setDat_nasc(new Date(sdf.parse("1983-08-12").getTime()));
emp3.setSalario(6500.50);
//inserindo
empDao.inserir(emp1);
empDao.inserir(emp2);
empDao.inserir(emp3);
//exibe os dados após a inserção
System.out.println("Inserção:\n"+empDao.selecionar());
//alterando os salarios, tiveram um aumento 🙂
emp1.setSalario(6000.70);
emp2.setSalario(5000.50);
emp3.setSalario(7000.70);
//atualizando os dados
empDao.atualizar(emp1);
empDao.atualizar(emp2);
empDao.atualizar(emp3);
//exibe os dados após a atualização
System.out.println("Alteração do sálario:\n"+empDao.selecionar());
//coloca em um array de Empregado
Empregado []emps={emp1,emp2,emp3};
//for each irá exclui um a um empregado do array
for(Empregado empIn:emps)
empDao.excluir(empIn.getId());
System.out.println("Exclusão, total de registros :"+empDao.selecionar().size());
}
}
Código simples e bem comentado, procurei deixar de maneira que fique “auto-explicativo”.
Execute o programa com banco de dados levantado.
A saída será:

Github:clique aqui
Download do projeto:clique aqui
Obrigado pela visita, até mais 😉