He subido a github estas dos clases que son realmente la base del sistema de persistencia.

Resumen de las clases:

  • Entidad (en el paquete net.sargue.base.dominio): una clase muy sencilla de base para derivar las clases de entidad con un sólo método getId() representando la clave primaria.
  • BaseDB: clase de base con algunos métodos genéricos JDBC que incluso puede utilizarse sin el requerimiento del entero como clave primaria.
  • EntidadDB: esta es la clase básica para gestionar entidades, y se define utilizado _generics _y asociada a una subclase de Entidad. Es la que implementa la mayoría de operaciones.La clase Entidad (en realidad es un simple interfaz) sólo obliga a disponer del método para leer el identificador del objeto ya que es el único requisito sobre los tipos de datos.La clase EntidadDB ya tiene chicha. Algo más del millar de líneas de código aunque, como se puede ver, con muchos métodos similares. Esta clase se parametriza con una subclase de Entidad. La idea es tener una de cada de estas para cada tabla o entidad en el dominio de nuestro problema. Por ejemplo, si nuestro sistema manipula clientes tendríamos la clase Cliente (implementando Entidad) y la clase ClienteDB (derivada de EntidadDB). Los nombres podrían ser cualquier, simplemente es cómodo usar un patrón similar.
public class Cliente implements Entidad { ... }

public class ClienteDB extends EntidadDB<Cliente> { ... }

En la clase derivada de EntidadDB tan sólo hay un método obligatorio para implementar, el que dado un puntero ResultSet devuelve un objeto del dominio.

  /**
   * Este método ha de ser implementado por la clase derivada y es el que se encarga de construir
   * nuevas instancias de la entidad a partir del puntero actual del ResultSet proporcionado. Se
   * proporciona el id ya que es la única columna que conocemos de la tabla.
   * 
   * @param c la conexión a la base de datos
   * @param rs el ResultSet apuntando al registro a construir
   * @param id el identificador del registro que corresponde al valor de la columna 'id'
   * @return el objeto representando el valor concreto de esta entidad
   * @throws SQLException error en la bdd
   */
  protected abstract E getEntidad(Connection c, ResultSet rs, int id) throws SQLException;

A partir de ahi existen multitud de métodos para las operaciones más básicas de consultas y carga de registros, actualizaciones y borrados. La creación de registros debe implementarse desde cero.