Implementa el patrón DAO en Java para acceder a PostgreSQL: interfaces, implementaciones, responsabilidades y una estructura limpia para proyectos reales.
Patrón DAO con Java y PostgreSQL

El patrón DAO (Data Access Object) consiste en encapsular todo el acceso a base de datos en una capa específica. Así, tu lógica de negocio no depende de SQL ni de JDBC directamente.

1) Qué problemas resuelve DAO

  • Evita mezclar SQL con la lógica de la aplicación.
  • Hace el código más mantenible y testeable.
  • Permite cambiar de BD o de tecnología con menos impacto.

2) Estructura típica

  • model/: clases de dominio (por ejemplo Bird).
  • dao/: interfaces (por ejemplo BirdsDAO).
  • dao/impl/: implementación concreta (por ejemplo BirdDAOPG).
  • db/: conexión y utilidades (DatabaseConnection).

3) Interfaz DAO (ejemplo)

public interface BirdsDAO {
  List<Bird> findAll();
  Bird findById(int id);
  Bird create(Bird bird);
  Bird update(Bird bird);
  boolean delete(int id);
}

4) Implementación PostgreSQL (idea)

public class BirdDAOPG implements BirdsDAO {
  private final Connection conn;

  public BirdDAOPG(Connection conn) {
    this.conn = conn;
  }

  @Override
  public List<Bird> findAll() {
    // PreparedStatement + ResultSet + mapeo a objetos
    return new ArrayList<>();
  }
}

5) Buenas prácticas

  • Usa PreparedStatement (evita SQL injection).
  • Centraliza la conexión (o usa un pool si aplica).
  • No devuelvas ResultSet fuera del DAO: devuelve objetos de dominio.