Mapeo Manual de Objetos a base de datos Parte IV Final

185 views
Skip to first unread message

Edwin Ilovares

unread,
Sep 11, 2013, 8:58:41 PM9/11/13
to apunte...@googlegroups.com

Después de rato a par de prueba y error tengo la prueba hecha.

 

Primero los cambios que hice,

 

En la Clase Crud, agregamos este fragmento de código para obtener el nombre de la base de datos en nuestros querys.

@Override
    public String getLib() {
        return super.getLib();
    }

También en el archivo de configuraciones debemos sobrescribir

sakila.tools.ip por sakila.tools.url

 

Y en realidad eso es todo… :| Compilamos y creamos el jar, el cual vamos a importar en nuestro proyecto de pruebas, también debemos agregar la librería de Bean Utils y la librería con el driver de la base de datos que utilizaremos. Ahora que pueden meter todo es un solo paquete y crear una nueva librería.


Vamos a crear una clase que heredará a nuestra clase Crud, aquí la tengo( estoy utilizando una base de datos de pruebas que viene con la última versión de MySQL)

 

public class MySQL extends Crud{

public MySQL() {
        super("com.mysql.jdbc.Driver","sakila.properties","sakila");               
    }
   
}
Como ven al heredar a Crud me obliga a utilizar su constructor al que pasamos de parametro:

  • Driver de conexión(MySQL en este caso pero funciona para todos)
    • Lo eh probado con MySQL, DB2, Oracle, MSSQL, MS Access, Paradox,  DBF files.
  • Ubicación del archivo de propiedades
  • Prefijo de las propiedad que tienen los datos de conexión.

 

Eh creado una estructura de paquetes en el proyecto que me ayuda mucho a controlar el proyecto por capas y se las comparto.

 

La siguiente clase en la lista es el objeto de dominio Actor, nada fuera de los normal. lo importante aquí es que los nombres de las propiedades y tipo de datos sean como en la base de datos de allí el "mapeo" de base de datos


public class Actor {

    private int actor_id;
    private String first_name;
    private String last_name;
    private Date last_update;

 

//gets y sets

}

 

La clase ActorDao (Data Access Object como yo lo llamo :3 ), es la que tendrá la lógica de negocios, de nuestro proyecto.

 

 

public class ActorDao {

 

private MySQL mysql = new MySQL();

public Actor consultarActorPorId(int actorId) {
        try {
            mysql.ConexionAutomatica();
            StringBuilder sql = new StringBuilder();
            sql.append("SELECT actor_id, first_name, first_name, last_name, last_update FROM  ").append(mysql.getLib())
                    .append(".actor where actor_id=? ");

//aquí ocurre la consulta, mapeo y abstracción
           return mysql.QueryRow(sql, new Object[]{actorId},
                    Actor.class,
                    new String[]{"actor_id", "first_name", "first_name", "last_name", "last_update"});

} catch (SQLException ex) {
            System.out.println(ex);
        }
        return null;
    }

}

 

Y para terminar la vamos a crear un Main para probar el código.

 

public static void main(String[] args) {
        ActorDao dao = new ActorDao();
        Actor actor = dao.consultarActorPorId(1);
        System.out.println(actor);
    }

Resultado final:

 

Actor{actor_id=1, first_name=PENELOPE, last_name=GUINESS, last_update=2006-02-15 04:34:33.0}

 

 

De esta manera fácil y rápido se puede transformar tablas de bases de datos relacional en objetos heredables.  Entre mas compleja la consulta mas interesando se vuelve la POO, la librería te obliga a utilizar mucho sobrecarga, sobreescritura, herencia, a crear clases fachadas, es muy interesante espero haber sido de ayuda a alguien que esté interesado en esto.

 

Saludos y estamos a su servicio.

 

Más ejemplos:

 

Consulta con varios registros

 

public ArrayList<Actor> consultarActores() {
        try {
            mysql.ConexionAutomatica();
            StringBuilder sql = new StringBuilder();
            sql.append("SELECT actor_id, first_name, first_name, last_name, last_update FROM  ").append(mysql.getLib())
                    .append(".actor ");
            return mysql.QueryRows(sql, new Object[]{},
                    Actor.class,
                    new String[]{"actor_id", "first_name", "first_name", "last_name", "last_update"});
        } catch (SQLException ex) {
            System.out.println(ex);
        }
        return null;
    }

public static void main(String[] args) {
        ActorDao dao = new ActorDao();       
        ArrayList<Actor> actores = dao.consultarActores();
        for (Actor actor1 : actores) {
            System.out.println(actor1);
        }
    }

Resultado final:

 

Actor{actor_id=1, first_name=PENELOPE, last_name=GUINESS, last_update=2006-02-15 04:34:33.0}

Actor{actor_id=2, first_name=NICK, last_name=WAHLBERG, last_update=2006-02-15 04:34:33.0}

Actor{actor_id=3, first_name=ED, last_name=CHASE, last_update=2006-02-15 04:34:33.0}

Actor{actor_id=4, first_name=JENNIFER, last_name=DAVIS, last_update=2006-02-15 04:34:33.0}

Actor{actor_id=5, first_name=JOHNNY, last_name=LOLLOBRIGIDA, last_update=2006-02-15 04:34:33.0}

Actor{actor_id=6, first_name=BETTE, last_name=NICHOLSON, last_update=2006-02-15 04:34:33.0}

Actor{actor_id=7, first_name=GRACE, last_name=MOSTEL, last_update=2006-02-15 04:34:33.0}

Actor{actor_id=8, first_name=MATTHEW, last_name=JOHANSSON, last_update=2006-02-15 04:34:33.0}

Actor{actor_id=9, first_name=JOE, last_name=SWANK, last_update=2006-02-15 04:34:33.0}

Actor{actor_id=10, first_name=CHRISTIAN, last_name=GABLE, last_update=2006-02-15 04:34:33.0}

 

Insertar registros

 

public boolean nuevoActor(Actor actor) {
        try {
            mysql.ConexionAutomatica();
            StringBuilder sql = new StringBuilder();
            sql.append("insert into ").append(mysql.getLib()).append(".actor (actor_id, first_name, last_name,last_update) ")
                    .append(" values(?,?,?,CURDATE())");

            return mysql.Insert(sql,
                    new Object[]{actor.getActor_id(),
                        actor.getFirst_name(),
                        actor.getLast_name()});

} catch (SQLException ex) {
            System.out.println(ex);
        }
        return false;
    }

public static void main(String[] args) {
        ActorDao dao = new ActorDao();
        Actor actor = new Actor();
        actor.setActor_id(201);
        actor.setFirst_name("Edwin");
        actor.setLast_name("Ilovares");
        dao.nuevoActor(actor);
    }

Reply all
Reply to author
Forward
0 new messages