image

Unlimited bootcamps + English course forever

80
%OFF
Laélia Fernandes
Laélia Fernandes18/03/2025 19:12
Share
Microsoft Certification Challenge #3 DP-100Recommended for youMicrosoft Certification Challenge #3 DP-100

O que é DAO ?

    DAO (Data Access Object): Entendendo sua Importância e Evolução com JPA

    Introdução

    O desenvolvimento de software requer uma abordagem organizada para lidar com dados armazenados em bancos de dados. Uma das padrões mais utilizados para essa interação é o DAO (Data Access Object), um conceito essencial na arquitetura de software. Este artigo explora a origem do DAO, os problemas que ele resolve, sua relação com SQL e como JPA e ORM surgiram para aprimorar essa abordagem.

    O que é DAO?

    DAO é um padrão de projeto (design pattern) que separa a lógica de acesso a dados da lógica de negócio em uma aplicação. Ele encapsula toda a interação com o banco de dados, permitindo que a lógica de negócio não precise lidar diretamente com comandos SQL.

    Em uma arquitetura baseada em DAO, uma classe DAO é responsável por realizar as operações CRUD (Create, Read, Update, Delete) sobre uma entidade, proporcionando uma camada de abstração entre o banco de dados e a lógica da aplicação.

    Origem e Problema Resolvido

    O conceito de DAO surgiu no contexto da programação orientada a objetos como uma solução para reduzir o acoplamento entre a camada de negócio e a camada de persistência. Antes do uso de DAOs, a própria lógica de negócio continha instruções SQL espalhadas pelo código, tornando a manutenção difícil e a migração entre bancos de dados custosa.

    A introdução do DAO resolveu esse problema ao:

    • Criar uma camada intermediária entre o banco de dados e a lógica de negócio;
    • Permitir a reutilização de código para operações comuns no banco de dados;
    • Facilitar a troca de fornecedores de banco de dados sem grandes impactos na lógica da aplicação;
    • Melhorar a testabilidade, pois permite substituir DAOs reais por implementações simuladas (mock) durante os testes.

    DAO e SQL

    Os DAOs interagem diretamente com o banco de dados por meio de comandos SQL. Para isso nós fazemos o uso direto de comandos SQL. O então DAO contém consultas SQL escritas manualmente, como "SELECT * FROM usuario WHERE id = ?" ou "INSERT INTO ...". Embora eficiente, isso pode resultar em um alto acoplamento com um banco de dados específico, dificultando a migração para outro sistema de gerenciamento de banco de dados (SGBD).

    O problema do alto acoplamento entre o DAO e o SQL é que, ao mudar de um banco de dados para outro (por exemplo, de MySQL para PostgreSQL), é possível que seja necessária uma reescrita significativa das consultas SQL.

    A Evolução: JPA e ORM

    Para resolver o problema do acoplamento dos DAOs com bancos de dados específicos, surgiram os frameworks ORM (Object-Relational Mapping). O JPA (Java Persistence API) é uma especificação do Java que padroniza a maneira como objetos Java são mapeados para tabelas do banco de dados, tornando a persistência mais abstrata e independente do SQL específico de um SGBD.

    Como o JPA Resolve os Problemas do DAO

    Com o uso do JPA, o DAO tradicional, que precisava lidar diretamente com SQL, passa a ser substituído por uma abordagem baseada em entidades e repositórios:

    • O desenvolvedor define entidades Java anotadas com @Entity, e o JPA cuida do mapeamento dessas classes para tabelas do banco de dados.
    • As consultas podem ser escritas usando JPQL (Java Persistence Query Language) ou usando Criteria API, que evitam o uso de SQL específico de um banco de dados.
    • O JPA permite que a troca do provedor de banco de dados seja feita sem alteração significativa no código, bastando modificar a configuração do provedor ORM (como Hibernate, EclipseLink, entre outros).

    Exemplo de DAO com JPA

    Sem JPA, um DAO tradicional poderia ter um método assim:

    public Usuario buscarPorId(int id) {
      Connection conexao = DriverManager.getConnection(...);
      PreparedStatement stmt = conexao.prepareStatement("SELECT * FROM usuario WHERE id = ?");
      stmt.setInt(1, id);
      ResultSet rs = stmt.executeQuery();
      // Processamento do resultado
    }
    

    Com JPA, a abordagem muda para algo mais abstrato e independente de SQL:

    @Entity
    public class Usuario {
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
      private String nome;
      // Getters e Setters
    }
    
    public interface UsuarioRepository extends JpaRepository<Usuario, Long> {
    }
    

    Agora, o acesso a dados é feito de forma muito mais simples:

    Usuario usuario = usuarioRepository.findById(1L).orElse(null);
    

    Conclusão

    O padrão DAO ajudou a organizar o acesso a dados em aplicações, reduzindo o acoplamento entre a lógica de negócio e o banco de dados. No entanto, ao depender fortemente de SQL, ele ainda apresentava desafios relacionados à portabilidade entre diferentes bancos de dados.

    A introdução de ORM e JPA trouxe uma abordagem mais flexível e independente de SGBD, eliminando a necessidade de SQL escrito manualmente na maioria dos casos. Com isso, a camada de persistência se tornou mais simples, reutilizável e fácil de manter.

    Compreender essa evolução é essencial para arquitetar sistemas robustos e escaláveis, garantindo que a escolha entre DAO tradicional e JPA seja feita conforme a necessidade do projeto.

    Share
    Recommended for you
    Microsoft 50 Anos - Prompts Inteligentes
    Microsoft 50 Anos - GitHub Copilot
    Microsoft 50 Anos - Computação em Nuvem com Azure
    Comments (1)
    Edilson Silva
    Edilson Silva - 18/03/2025 23:26

    Artigo excelente Laélia ! A explicação sobre o DAO e sua evolução com o JPA foi clara e concisa. A forma como você abordou a transição do SQL direto para o uso de entidades e repositórios com JPA foi muito didática. PARABÉNS!

    Recommended for youMicrosoft Certification Challenge #3 DP-100