Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

DAO ou Tablegateway

Olá,

Este código trazido pelo Guilherme,

package br.com.caelum.jdbc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import br.com.caelum.jdbc.modelo.Categoria;
import br.com.caelum.jdbc.modelo.Produto;

public class ProdutosDAO {

    private final Connection con;

    public ProdutosDAO(Connection con) {
        this.con = con;
    }

    public void salva(Produto produto) throws SQLException {
        String sql = "insert into Produto (nome, descricao) values (?,?)";

        try (PreparedStatement stmt = con.prepareStatement(sql,
                Statement.RETURN_GENERATED_KEYS)) {

            stmt.setString(1, produto.getNome());
            stmt.setString(2, produto.getDescricao());
            stmt.execute();

            try (ResultSet rs = stmt.getGeneratedKeys()) {
                if (rs.next()) {
                    int id = rs.getInt("id");
                    produto.setId(id);
                }
            }

        }
    }
}

parece-me mais um Tablegateway, em minha opinião.

Para ser um DAO, ele não teria que "se salvar", "se excluir" etc ? Ou seja, algo como

class Pessoa {

    private String nome;

    public void salvar() {
         // salvar no banco this.nome
    }

}
4 respostas

Oi Marcelo, tudo bem? Essa é uma boa pergunta, parece muito mesmo, mas de acordo com a descrição do Martin Fowler, um table data gateway (https://martinfowler.com/eaaCatalog/tableDataGateway.html) em única instância, cuida dos registros de toda a tabela.

Em quanto o DAO me parece cuidar apenas de um registro em particular.

Faz sentido?

"Em quanto o DAO me parece cuidar apenas de um registro em particular."

Então basicamente foi o que expus, não? :-)

solução

Olá,

Se bem que no curso "Spring MVC I" ele cria o ProdutoDAO em que há o método gravar(Produto).

Portanto, ele também parece estar usando o DAO como um tablegateway.... não te parece ?

Talvez o PROFESSOR possa ajudar nessa...

Não por que o grava Produto, ele grava apenas um produto. Agora, se você tivesse um método que grava vários produtos de uma vez, ai sim teríamos algo parecido com o Table Gateway... Isso é o que me parece.