11 dao-jdbc
TRANSCRIPT
![Page 1: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/1.jpg)
Padrões de Projeto na Prática
Como os padrões resolvem
problemas, como selecionálos
e utilizá-los.
![Page 2: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/2.jpg)
DAO (Data Access Object)
• DAO (Data Access Object)
– Cria uma abstração responsável pelo acesso a
banco de dados.
– DAOs encapsulam todo o acesso a dados
referente às nossas entidades.
– É um padrão JEE
• Baseado no padrão de projeto Strategy (Gamma, 1995)
![Page 3: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/3.jpg)
• Data Access Object
• Encapsula as operações JDBC, provendo
acesso de nível mais alto aos demais
componentes da aplicação
• Pode ser usado em conjunto com outros
padrões, como o Singleton
![Page 4: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/4.jpg)
Data Access Object - DAO
Aplicação
(Objeto de negócio)
DAO
BDs XMLs Outras aplicações
![Page 5: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/5.jpg)
DAO - Data Access Object
• Data Access Object é um padrão da camada
de integração para recuperação de dados,
independente da fonte, ou seja,
– podem ser utilizadas vários data sources (de uma
mesma maneira), deixando o acesso totalmente
transparente para a aplicação;
– possibilita a troca do mecanismo de persistência
de forma transparente para a aplicação;
– Separa as lógicas de negócio e de acesso a
dados;
– Aumenta a portabilidade.
![Page 6: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/6.jpg)
Estrutura do padrão DAO
![Page 7: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/7.jpg)
DAO
• Participantes
– BusinessObject (BO)
• Requisita acesso para armazenar ou requisitar algum dado de
algum base.
– DataAccessObject (DAO)
• Oferece serviços para o BusinessObject de forma transparente.
– DataSource
• Representa a fonte de dados (ex: BD, outro sistema, repositório
XML, etc). Acessada pelo DAO.
– TransferObject (TO)
• Usado para representar os dados obtidos pelo DAO e para serem
compreendidos pelo BusinessObject.
![Page 8: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/8.jpg)
aplicação prática usando DAO
public class ClienteTO {
// atributos
// getters e setters
}
public interface ClienteDAOInterface {
ClienteTO create () ;
void insert ( ClienteTO c ) ;
void update (ClienteTO c ) ;
void delete (ClienteTO c ) ;
ClienteTO findByID ( Integer id ) ;
ClienteTO finfByNumber ( String number ) ;
}
![Page 9: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/9.jpg)
Aplicação prática usando DAO public class JDBCClienteDAO implements ClienteDAOInterface {
public ClienteTO create () {
…
}
public void insert (ClienteTO c ) {
…
}
public void update (ClienteTO c ) {
…
}
public void delete (ClienteTO c ) {
…
}
public ClienteTO findByID ( Integer id ) {
…
}
public ClienteTO finfByNumber ( String number ){
…
}
}
![Page 10: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/10.jpg)
Características do uso do padrão DAO
• TO - Objetos de transporte. Eles são encarregados de manter os dados em memoria na forma de objetos e estruturas de objetos. Exemplo: ClientePOJO
• Interface DAO - Interface para o DAO de um certo tipo de TO. Exemplo: ClienteDAOInterface
• Implementação DAO - Implementação da interface para o DAO de um certo tipo de TO e um certo tipo de API de persistência. Exemplo: JDBCClienteDAO
![Page 11: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/11.jpg)
DAO Genérico
• Usando tipos genéricos ajuda a diminuir o numero de métodos por interface DAO utilizando interfaces comuns. – Portanto, usar Generics não nos ajuda a diminuir o número
de classes ou simplificar a implementação!
• Com “Genérico”, diminui-se a quantidade de métodos na interface DAO específica de cada objeto de transporte, mas não ganhamos muito. – Criamos mais uma classe e a implementação ainda
continua específica.
![Page 12: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/12.jpg)
Exemplo de DAO Genérico
public interface GenericDAO<T> {
T create () ;
void insert ( <T> obj ) ;
void update ( <T> obj ) ;
void delete ( <T> obj ) ;
T findByID ( Integer id ) ;
}
public interface CustomerDAO extends GenericDAO<Customer> {
Customer finfByCustomerNumber ( String customerNumber ) ;
}
![Page 13: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/13.jpg)
![Page 14: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/14.jpg)
• Java Database Connectivity
• Provê acesso SQL ao banco de dados
• Principais componentes:
– DriverManager
– Connection
– Statement
– PreparedStatement
– ResultSet
– SQLException
![Page 15: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/15.jpg)
• Usa um driver disponível para realizar uma
conexão com o banco de dados
• Método estático getConnection que retorna
uma Connection e recebe os seguintes
parâmetros:
– Localização do host, porta e schema
– Usuário
– Senha
![Page 16: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/16.jpg)
• Representa uma conexão com o banco de
dados e pode ser usada para criar um
Statement ou para preparar um
PreparedStatement, por meio,
respectivamente dos métodos:
– createStatement()
– prepareStatement(sql)
![Page 17: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/17.jpg)
String driver = "org.gjt.mm.mysql.Driver";
String strConexao = "jdbc:mysql://localhost/persistenciaUmaTabela";
String usuario = "root";
String senha = "";
try {
Class.forName(driver);
Connection conn =
DriverManager.getConnection(
strConexao, usuario, senha);
} catch (ClassNotFoundException ex) {
System.out.println(
"Driver do banco nao encontrado.");
}
![Page 18: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/18.jpg)
• Representa um instrução SEM parâmetros, a
ser enviada para o banco de dados, pelo
acionamento dos métodos:
– int executeUpdate(), para instruções INSERT,
UPDATE e DELETE
– ResultSet executeQuery(), para instruções
SELECT
![Page 19: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/19.jpg)
• Representa um instrução COM
parâmetros a ser enviada para o banco de
dados pelo acionamento dos métodos:
– int executeUpdate(), para instruções INSERT,
UPDATE e DALETE
– ResultSet executeQuery(), para instruções
SELECT
• Antes da execução dos métodos acima,
os parâmetros devem ser configurados
com os métodos setString(), setInt(), etc
![Page 20: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/20.jpg)
• Conjunto de registros retornados depois
da execução de
Statement.executeQuery() ou
PreparedStatement.executeQuery()
• Principais métodos:
– boolena next(): avança e cursor e indica se
há dados
– int getInt(String) e String getString(String):
retorna o dado de uma coluna com um nome
especificado.
![Page 21: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/21.jpg)
• Representa uma exceção retornada pela API
JDBC
• Deve ser tratada (try-catch) ou declarada
para ser passada (throws) ao método
chamador
![Page 22: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/22.jpg)
try {
Statement stmt = conn.createStatement();
ResultSet rs =
stmt.executeQuery("SELECT * FROM empregado");
while (rs.next()) {
System.out.println(rs.getString("codigo"));
System.out.println(rs.getString("nome"));
System.out.println(rs.getInt("idade"));
}
} catch (SQLException e) {
// tratamento da exceção
}
![Page 23: 11 DAO-JDBC](https://reader034.vdocuments.mx/reader034/viewer/2022050720/54dee6e24a7959df518b4b1f/html5/thumbnails/23.jpg)
try {
PreparedStatement stmt =
conn.createStatement(
"SELECT * FROM empregado WHERE codigo = ?");
stmt.setString(1, codigoDePesquisa);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
System.out.println(rs.getString("codigo"));
System.out.println(rs.getString("nome"));
System.out.println(rs.getInt("idade"));
}
} catch (SQLException e) {
// tratamento da exceção
}