Beati Hispani quibus bibere vivere est.
Cayo Julio César

Archivos del día 16 de March del 2009

Spring, Struts 1.3.8, JDBC y MySQL

Vaya combinación, ya se va complicando el tema. Ahora que ya tenemos un servidor de base de datos MySQL disponible, queremos utilizarlo en nuestros proyectos web. Para ello partiremos del proyecto que ya hemos desarrollado integrando Spring con Struts 1.3.8, al que añadiremos una capa de persistencia utilizando JDBC (Java DataBase Connectivity).

Diseño

A la hora del diseño, vamos a desarrollar varias capas de persistencia y a la hora de desplegar nuestro proyecto utlizaremos la que más nos convenga.

  • Una primera capa de cartón piedra (es más profesional utilizar los términos mock o fake), es decir con los datos a fuego, que es como estaba en el ejemplo. Se utliza profesionalmente más de lo que parece porque resulta frecuente empezar el desarrollo sin disponer de una base de datos (por problemas de conectividad, licencias…) o desarrollando en paralelo con otro equipo que se encargue de la base de datos.
  • En este ejemplo utlizaremos una para MySQL con JDBC.
  • Más adelante utlizaremos para MySQL el framework iBATIS.
  • Y más adelante aún utlizaremos para MySQL el framework Hibernate.

Creamos los nuevos paquetes :

  • es > lycka > holamundo > persistencia > impl > cartonpiedra
  • es > lycka > holamundo > persistencia > impl > mysql > jdbc
  • es > lycka > holamundo > persistencia > impl > mysql > ibatis
  • es > lycka > holamundo > persistencia > impl > mysql > hibernate

Movemos las clases que ya teníamos (BaseDAOImpl y IdentificarDAOImpl) al paquete cartonpiedra. Creamos dos nuevas clases en el paquete jdbc, BaseDAOImpl y IdentificarDAOImpl (que extienda del nuevo BaseDAOImpl e implemente el interfaz IdentificarDAO). A la izquierda se ve la estructura que quedaría.

Conector MySQL

Descargamos el conector MySQL de la página de sun aquí, e importamos el jar (mysql-connector-java.jar) en nuestro proyecto.

Obtener una conexión

Creamos un nuevo método en nuestro nuevo BaseDAOImpl, establecerConexion.

protected Connection establecerConexion (String URL, String usuario, String contrasenna) throws Exception {

Connection conn = null;

try {

Class.forName(“com.mysql.jdbc.Driver”);

conn = DriverManager.getConnection (URL, usuario, contrasenna);

log.info(“establecerConexion – INFO – Conexión Establecida con\n -> URL = “ + URL + “\n -> USUARIO = “ + usuario);

} catch (Exception e) {

log.error(“establecerConexion – ERROR – Conexión no Establecida con “ + URL);

throw e;

}

return conn;

}

Cerrar una conexión

Creamos un nuevo método también en el nuevo BaseDAOImpl, cerrarConexión.

protected void cerrarConexión (Connection conn, String URL) {

try {

if (conn != null) {

conn.close();

log.info(“cerrarConexión – INFO – Conexión cerrada con “ + URL);

}

} catch (Exception e) {

log.error(“cerrarConexión – WARNING – No se puede cerrar la conexión con “ + URL);

e.printStackTrace();

}

}

Utilizar la conexión

En este ejemplo simple crearemos una conexión en cada petición, ejecutaremos la consulta y cerraremos la conexión. Profesionalmente se debería de utilizar un pool de conexiones, lo dejaré para otra entrada.

package es.lycka.holamundo.persistencia.impl.mysql.jdbc;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import es.lycka.holamundo.model.Usuario;

import es.lycka.holamundo.persistencia.IdentificarDAO;

public class IdentificarDAOImpl extends BaseDAOImpl implements IdentificarDAO {

public Usuario consultarUsuario (Usuario usuario) throws Exception {

String URLBBDD = “jdbc:mysql://localhost/holamundo”;

String usuarioBBDD = “root”;

String contrasennaBBDD = “superfeo”;

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;

String query = “SELECT IDENTIFICADOR, CONTRASENNA “ +

“FROM USUARIO “ +

“WHERE IDENTIFICADOR = ? AND CONTRASENNA = ?”;

Usuario resultado = null;

try {

conn = establecerConexion (URLBBDD, usuarioBBDD, contrasennaBBDD);

ps = conn.prepareStatement(query);

ps.setString ( 1, usuario.getIdentificador());

ps.setString ( 2, usuario.getContrasenna());

rs = ps.executeQuery();

while ( rs.next() ) {

resultado = new Usuario ();

resultado.setIdentificador(rs.getString(“IDENTIFICADOR”));

resultado.setContrasenna(rs.getString(“CONTRASENNA”));

}

rs.close();

} catch (Exception e) {

throw e;

} finally {

cerrarConexión(conn, URLBBDD);

}

return resultado;

}

}

Acoplar la nueva implementación

Configuramos el fichero para inyectar los nuevos beans applicationContext-persistencia.xml:

<beans>

<bean id=“dao” class=“es.lycka.holamundo.persistencia.impl.mysql.jdbc.BaseDAOImpl” abstract=“true” />

<bean id=“identificarDAO” class=“es.lycka.holamundo.persistencia.impl.mysql.jdbc.IdentificarDAOImpl” parent=“dao”/>

</beans>

Para saber más

Comenta