Mapeo Manual de objetos a base de datos Parte II a

279 views
Skip to first unread message

Edwin Ilovares

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

Segunda parte lógica de abstracción.

Voy hacer uso de una librería Bean Util de apache

 

Vamos a crear la clase que implementará la interface TransacionImpl.java

 

Clic derecho sobre el proyecto ->New -> Java Class ->Class name Crud.java -> Finish

public class Crud extends SetUp implements TransacionImpl

La clase SetUp aquí heredara se utiliza para el manejo de la url, usuario y clave de conexión; que en lo personal lo hago a travez de un archivo de propiedades, pero ustedes pueden elegir el método que prefieran. Mas adelante veremos esa clase SetUp

 

Vamos agregar una variable privada que nos manejara la conexión,

 

private Connection conexion = null;

private String _ClassForName;//para manejar el driver de conexión

 

 

También hay que crear unos métodos para abrir y cerrar la conexión.

 

public Connection CerrarConexion() throws SQLException {

        automatico = false;

        if (conexion != null) {
            conexion.close();
        }
        return conexion;
    }

 

public Connection AbrirConexion() throws SQLException {
        try {

            automatico = false;
            Class.forName(this._ClassForName).newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
            throw new SQLException("Imposible abrir Conexion=>" + ex.getMessage());
        }
        conexion = DriverManager.getConnection(this.getUrl(), this.getUsuario(), this.getClave());
        return conexion;
    }

 

En lo personal también creo un tercero que abre y cierra la conexión automáticamente. Para lo que creare una nueva variable global boleana.

 

private boolean automatico = false;

 

public void ConexionAutomatica() throws SQLException {
        try {
            automatico = true;
            Class.forName(this._ClassForName).newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
            throw new SQLException("Imposible abrir Conexion=>" + ex.getMessage());
        }
        conexion = DriverManager.getConnection(Servidor, Usuario, Clave);
    }

 

Hasta el momento todo va normal(espero) y creo que vamos claros, pasemos a los métodos que es lo importante de todo esto.

 

QueryRows


@Override
    public <T> ArrayList<T> QueryRows(StringBuilder sentencia, Object[] parametros, Class<T> dominio, String[] propiedades) throws SQLException {
        if (conexion != null) {
            ResultSet rs = null;
            PreparedStatement ps = null;
            ArrayList<T> result = new ArrayList<>();
            try {
                ps = conexion.prepareStatement(sentencia.toString());
                for (int i = 0; i < parametros.length; i++) {//Agregar a statement los parametros
                    ps.setString(i + 1, parametros[i] != null ? parametros[i].toString() : null);
                }
                rs = ps.executeQuery();//Ejecutar consulta
                ResultSetMetaData rsMetaData = rs.getMetaData();
                int numberOfColumns = rsMetaData.getColumnCount();

while (rs.next()) {
                    T beanme = dominio.newInstance();//Crear un objeto del tipo dominio
                    for (int i = 0; i < numberOfColumns; i++) {
                        //setear el valor de cada columna en las po
                        PropertyUtils.setProperty(beanme, propiedades[i], rs.getObject(i + 1));
                    }
                    result.add(beanme);
                }
            } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException ex) {
                throw new SQLException("Imposible realizar consulta=>" + ex.getMessage());
            }
            rs.close();
            ps.close();
            return result;
        } else {
            throw new SQLException("No existe Conexion. Favor llemar funcion AbrirConexion().");
        }
    }

 

Voy a dejarlo por aquí, les copio como va quedando la clase, esperen la siguiente entrega.

 

public class Crud extends SetUp implements TransacionImpl {

private Connection conexion = null;
    private String _ClassForName;//para manejar el driver de conexion
    private boolean automatico = false;

public Connection CerrarConexion() throws SQLException {
        automatico = false;
        if (conexion != null) {
            conexion.close();
        }
        return conexion;
    }

public Connection AbrirConexion() throws SQLException {
        try {
            automatico = false;
            Class.forName(this._ClassForName).newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
            throw new SQLException("Imposible abrir Conexion=>" + ex.getMessage());
        }
        conexion = DriverManager.getConnection(this.getUrl(), this.getUsuario(), this.getClave());
        return conexion;
    }

public void ConexionAutomatica() throws SQLException {
        try {
            automatico = true;
            Class.forName(this._ClassForName).newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
            throw new SQLException("Imposible abrir Conexion=>" + ex.getMessage());
        }
        conexion = DriverManager.getConnection(this.getUrl(), this.getUsuario(), this.getClave());
    }

@Override
    public <T> ArrayList<T> QueryRows(StringBuilder sentencia, Object[] parametros, Class<T> dominio, String[] propiedades) throws SQLException {
        if (conexion != null) {
            ResultSet rs = null;
            PreparedStatement ps = null;
            ArrayList<T> result = new ArrayList<>();
            try {
                if (automatico) {
                    AbrirConexion();
                }
                ps = conexion.prepareStatement(sentencia.toString());
                for (int i = 0; i < parametros.length; i++) {//Agregar a statement los parametros
                    ps.setString(i + 1, parametros[i] != null ? parametros[i].toString() : null);
                }
                rs = ps.executeQuery();//Ejecutar consulta
                ResultSetMetaData rsMetaData = rs.getMetaData();
                int numberOfColumns = rsMetaData.getColumnCount();

while (rs.next()) {
                    T beanme = dominio.newInstance();//Crear un objeto del tipo dominio
                    for (int i = 0; i < numberOfColumns; i++) {
                        //setear el valor de cada columna en las po
                        PropertyUtils.setProperty(beanme, propiedades[i], rs.getObject(i + 1));
                    }
                    result.add(beanme);
                }
            } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException ex) {
                throw new SQLException("Imposible realizar consulta=>" + ex.getMessage());
            }
            rs.close();
            ps.close();
            if (automatico) {
                CerrarConexion();
            }
            return result;
        } else {
            throw new SQLException("No existe Conexion. Favor llemar funcion AbrirConexion().");
        }
    }

@Override
    public <T> T QueryRow(StringBuilder sentencia, Object[] parametros, Class<T> dominio, String[] propiedades) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

@Override
    public boolean Update(StringBuilder sentencia, Object[] sqlStatement) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

@Override
    public boolean Insert(StringBuilder sentencia, Object[] sqlStatement) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

@Override
    public boolean Delete(StringBuilder sentencia, Object[] sqlStatement) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

Reply all
Reply to author
Forward
0 new messages