Si vis pacem para bellum

[iBATIS] – Implementación Capa Persistencia

En este post se intentará explicar cómo implementar la capa de persistencia con iBATIS en una aplicación que utiliza Struts como framework MVC.

Como ejemplo pondré el código para implementar una consulta a base de datos para comprobar si un usuario está en sesión. 

Intentaré ampliar la información en la Lyckapedia

Instalación de iBATIS

iBATIS se distribuye como librerías, con lo cuál simplemente debemos copiarlas directorio WEB-INF/lib de nuestra aplicación web. Necesitaremos las siguientes librerías:

  • ibatis-sqlmap, contiene los componentes de la capa de persistencia.
  • ibatis-dao, contiene los compoentes de la capa de abstracción (en otro post trataremos la implementación de la capa de abstracción mediante iBATIS).
  • ibatis-common, contiene los componentes comunes de las dos capas anteriores.

Configuración Framework de persistencia

Necesitamos configurar el fichero xml de configuración (jeje) del framework, sql-map-config.xml. Para consultar más sobre este fichero, así como la forma de configurarlo, consultar Lyckapedia : sql-map-config.xml.

Objetos de modelo -> sql-map.xml 

Necesitamos un correcto análisis y diseño de nuestra aplicación para obtener los JavaBeans de modelo. Los ficheros sql-map.xml (altamente recomendable que sea un fichero sql-map.xml para cada objeto de modelo) contienen el código SQL que utilizaremos para gestionar estos objetos de modelo. Se puede consultar Lyckapedia: sqlMap.xml, aún en construcción.

En nuestro ejemplo, implementaremos un objeto Usuario.java, que representará un usuario en nuestra sesión. Típicamente

package ****;

public class Usuario {

    private String stLogin                = "";
    private String stContrasenna        = "";

    public String getStLogin() {
        return stLogin;
    }
    public void setStLogin(String stLogin) {
        this.stLogin = stLogin;
    } 

    public String getStContrasenna() {
        return stContrasenna;
    }
    public void setStContrasenna(String stContrasenna) {
        this.stContrasenna = stContrasenna;
    }

Este objeto estará asociado a un fichero Usuario.xml del tipo sql-map, que contiene el código SQL. Por ejemplo:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="Account">

    <typeAlias alias="usuario" type="es.mec.infraestructuras.model.Usuario"/>

    <select id="getItemListByProduct" resultClass="usuario" parameterClass="usuario">
        SELECT
            U.LOGIN AS stLogin,
            U.PASSWORD AS stContrasenna
        FROM WINT_USUARIO U
        WHERE LOGIN        = UPPER (#stLogin#)
        AND PASSWORD    = UPPER (#stContrasenna#)
    </select>
</sqlMap>

Ejecutar la consulta

        Usuario usuario = null;
        try {
            //Sólo es necesario configurarlo una vez
            String resource = "es/mec/infraestructuras/persistencia/sqlMap-config.xml";
            Reader reader = Resources.getResourceAsReader (resource);
            SqlMapClient sqlMap = (SqlMapClient) SqlMapClientBuilder.buildSqlMapClient(reader);
            if ((usuario = (Usuario) sqlMap.queryForObject("isUsuario", (Usuario) usuariosForm.getUsuario())) != null) {
                System.out.println("UsuariosAction.identificar – Usuario correcto");
            } else {
                System.out.println("UsuariosAction.identificar – Usuario NO correcto");
            }
        } catch (Exception e) {
            System.out.println("UsuariosAction.identificar – Excepcion : " + e.toString());
        }

Es más útil profesionalmente:

public MyAppSqlConfig {
  private static final SqlMapClient sqlMap;
  static {
    try {
      String resource = “com/ibatis/example/sqlMap-config.xml”;
      Reader reader = Resources.getResourceAsReader (resource);
      sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
    } catch (Exception e) {
      e.printStackTrace();
      throw new RuntimeException (“Error initializing MyAppSqlConfig class. Cause: ” + e);
    }
  }
  public static getSqlMapInstance () {
    return sqlMap;
  }
}

Y luego crear una instancia

SqlMapClient sqlMap = MyAppSqlMapConfig.getSqlMapInstance(); 

.. 

[tags]iBATIS[/tags]

Dejanos tu Comentario

Nombre: (Requerido)

E-Mail: (Requerido)

Sitio WEB:

Comentario:

Comenta