MVC com DAO e relacionamentos

Estou com uma dúvida em MVC-DAO com duas tabelas relacionadas, Produto e Categoria.
Os campos são simples:

Produtos:
id_prod
nome_prod
id_categ

Categoria
id_categ
nome_categ

Minha duvida seria em montar o DAO. Como seria a Classe Modelo já que as duas entidades estão relacionadas?
Alguém teria um tutorial sobre isso ou pode me ajudar? Não é pra fazer o projeto é só me ajudar nessa dúvida. Montar essa classe.

Agradeço a todos e que tenham um bom ano.

Cria a classe dao com os atributos relacionados ao banco de dados, no caso ai seria duas classe DAO, uma classe ProdutoDAO e outra CategoriaDAO, e quando voce fosse fazer os metodos por exemplo de listagem dos dados, consulta, voce implementaria os sql correto pra trazer os dados…

1 curtida

Então, eu não sei como faz pois tem relacionamentos. Como que seria isso. Sei que tem que fazer essas duas Classes, mas não sei como seria os get e set.

Classe ProdutoDAO
`public class ProdutoDAO {

private Integer idProduto;
private String nomeProduto;
private Integer idCategoria;
public Integer getIdProduto() {
	return idProduto;
}
public void setIdProduto(Integer idProduto) {
	this.idProduto = idProduto;
}
public String getNomeProduto() {
	return nomeProduto;
}
public void setNomeProduto(String nomeProduto) {
	this.nomeProduto = nomeProduto;
}
public Integer getIdCategoria() {
	return idCategoria;
}
public void setIdCategoria(Integer idCategoria) {
	this.idCategoria = idCategoria;
}

}`

Classe CategoriaDAO
`public class ProdutoDAO {

private Integer idCategoria;
String nomeCategoria;
public Integer getIdCategoria() {
	return idCategoria;
}
public void setIdCategoria(Integer idCategoria) {
	this.idCategoria = idCategoria;
}
public String getNomeCategoria() {
	return nomeCategoria;
}
public void setNomeCategoria(String nomeCategoria) {
	this.nomeCategoria = nomeCategoria;
}`
1 curtida

Você vai ter duas classes POJO da seguinte forma:

public class Categoria {
    private Long id;
    private String nome;
}

public class Produto {
    private Long id;
    private String nome;
    private Categoria categoria;
}

Cada uma com os getters e setters normalmente.

E nas classes DAO, também serão duas, conforme disse o @fbrigatt.
A CategoriaDAO vai ser simples, sem qualquer relacionamento e na ProdutoDAO você vai ter os SQLs de consulta que contenha um join entre produto e categoria, sendo assim será retornado um Produto com os dados da categoria.

1 curtida

Qual seria o mais prático, colocar o atributo ou a classe inteira como o Diego_Melo fez? Agora embananou, rs. Como seria um exemplo de insert usando o modelo do Diego_Melo?

voce vai ter 4 classes

as duas que mostrei e mais 2 DAO

essas classes DAO vão ficar da seguinte forma

public class ProdutoDAO() {
   
    //metodo para obter todos os produtos do banco
    public List<Produto> getAll() throws Exception{
        List<Produto> produtos = new ArrayList<Produto>();
        String sql = "select p.id as idProd, p.nome as nomeProd, p.categoria_id, c.id as idCat, c.nome as nomeCat from produto p join categoria c on p.id = c.id";
        PreparedStatement p = con.prepareStatement(sql);
        ResultSet rs = p.executeQuery();
        while(rs.next()){
             //seta os dados do produto
            Produto produto = new Produto();
            produto.setId(rs.getInt("idProd"));
            produto.setNome(rs.getString("nomeProd"));
             //seta os dados da categoria
            Categoria categoria = new Categoria();
            categoria.setId(rs.getInt("idCat")).
            categoria.setNome(rs.getString("nomeCat")).
            //add a categoria ao produto
            produto.setCategoria(categoria);
            //add o produto na lista            
            produtos.add(produto)
        }
        rs.close();
        p.close();
    return produtos;
}

Da mesma forma você teria os outros métodos getById, update, delete, etc,

Já para a classe CategoriaDAO segue a mesma linha, porém nela não ha necessidade de join no select.

1 curtida

Tem como fazer um exemplo disso ai? Pq tem que listar as Categorias para cadastrar, certo?

Tem skype, Diego_Melo. O meu é frederico.brigatte@itelefonica.com.br

Essa ai seria para listar, certo?

Isso, esse é para listar os produtos.
E os produtos ja irão vir com os dados da categoria.

Veja esse vídeo do canal sistemas robustos sobre Mvc https://youtu.be/rMafP3EvckM