Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del...

32
Ejercicio: Spring JDBC v2 Ejercicio 13 SPRING JDBC VERSIÓN 2

Transcript of Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del...

Page 1: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Ejercicio: Spring JDBC v2

Ejercicio 13SPRING JDBC VERSIÓN 2

Page 2: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Ejercicio: Spring JDBC v2Objetivo del Ejercicio

El objetivo del ejercicio es agregar los casos de alta, baja, cambios yselección de datos de la tabla personas a nuestro proyecto Spring JDBC.Al finalizar deberemos ver la siguiente salida:

Page 3: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 1. Creación archivo applicationContext.xml

Crear el archivo applicationContext.xml (es de tipo SpringBeanDefinition file) y depositarlo en src/main/resources :

Page 4: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Ejercicio: Spring JDBC v2

Agregar los namespaces de beans y context al archivo applicationContext.xml:

Paso 1. Creación archivo applicationContext.xml (cont)

Page 5: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 1. Creación archivo applicationContext.xml (cont)

Agregar el siguiente contenido al archivo applicationContext.xml:

<context:component-scan base-package="mx.com.gm.jdbc" />

Page 6: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 2. Agregar la clase Persona

package es.upv.lemus.jdbc;public class Persona {

private Long idPersona;private String nombre;private String apellidoPaterno;private String apellidoMaterno;private String email;

public Persona() {}public Persona(long idPersona, String nombre, String apellidoPaterno, String

apellidoMaterno, String email) {super();this.idPersona = idPersona;this.nombre = nombre;this.apellidoPaterno = apellidoPaterno;this.apellidoMaterno = apellidoMaterno;this.email = email;

}}

Page 7: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 3. Agregar la clase PersonaRowMapper

Agregamos la siguiente clase PersonaRowMapper.java:package es.upv.lemus.jdbc;import java.sql.ResultSet;import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;

public class PersonaRowMapper implements RowMapper<Persona> {

@Overridepublic Persona mapRow(ResultSet rs, int rowNum) throws SQLException {

Persona persona = new Persona();persona.setIdPersona(rs.getLong("id_persona"));persona.setNombre(rs.getString("nombre"));persona.setApellidoPaterno(rs.getString("apellido_paterno"));persona.setApellidoMaterno(rs.getString("apellido_materno"));persona.setEmail(rs.getString("email"));return persona;

}}

Page 8: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 4. Agregar la interface PersonaDao

Agregamos la siguiente interfacePersonaDao.java:

package es.upv.lemus.jdbc;

import java.util.List;

public interface PersonaDao {void insertPersona(Persona persona);void updatePersona(Persona persona);void deletePersona(Persona persona);Persona findPersonaById(long idPersona);List<Persona> findAllPersonas();int contadorPersonasPorNombre(Persona persona);int contadorPersonas();Persona getPersonaByEmail(Persona persona);

}

Page 9: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 5. Agregar la clase PersonaDaoImpl

package es.upv.lemus.jdbc;

import java.util.List;

public class PersonaDaoImpl implements PersonaDao{@Overridepublic void insertPersona(Persona persona) {}@Overridepublic void updatePersona(Persona persona) {}@Overridepublic void deletePersona(Persona persona) {}@Overridepublic Persona findPersonaById(long idPersona) {

return null;}

Page 10: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

@Overridepublic List<Persona> findAllPersonas() {

return null;}@Overridepublic int contadorPersonasPorNombre(Persona persona) {

return 0;}@Overridepublic int contadorPersonas() {

return 0;}@Overridepublic Persona getPersonaByEmail(Persona persona) {

return null;}

}

Page 11: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 6. Agregar código a la clase PersonaDaoImpl

Agregar las siguientes definiciones a la clase PersonaDaoImpl.java:private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

private JdbcTemplate jdbcTemplate;

@Autowiredpublic void setDataSource(DataSource dataSource) {

// No es común que se utilicen las 2 plantillas, sin embargo si es posible// La diferencia es el manejo de parámetros por indice o por nombre this.jdbcTemplate = new JdbcTemplate(dataSource);

this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);}

// Query con Parametros por nombre// Omitimos la PK ya que es autoincrementableprivate static final String SQL_INSERT_PERSONA = "INSERT INTO PERSONA (nombre, ape_paterno, ape_materno, email) values (:nombre,

:apePaterno, :apeMaterno, :email)";

// Query con Parametros por indice// private static final String SQL_INSERT_PERSONA =// "insert into persona (username, password, fullname, email, update_by_email) values (?, ?, ?, ?, ?)";// Parametros por nombre

private static final String SQL_UPDATE_PERSONA = "UPDATE PERSONA set nombre = :nombre, ape_paterno = :apePaterno, ape_materno =:apeMaterno, email = :email WHERE id_persona = :idPersona";

private static final String SQL_DELETE_PERSONA = "DELETE FROM PERSONA WHERE id_persona = :idPersona";

private static final String SQL_SELECT_PERSONA = "SELECT id_persona, nombre, ape_paterno, ape_materno, email FROM PERSONA";

// Parametros por indiceprivate static final String SQL_SELECT_PERSONA_BY_ID = SQL_SELECT_PERSONA + " WHERE id_persona = ?";

Page 12: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 7. Código del método findAllPersonas()

Agregar el siguiente código al método findAllPersonas() de la clase PersonaDaoImpl.java:

//Esta consulta es equivalente//String sql = "SELECT * FROM PERSONA";RowMapper<Persona> personaRowMapper = ParameterizedBeanPropertyRowMapper.newInstance(Persona.class); return this.jdbcTemplate.query(SQL_SELECT_PERSONA, personaRowMapper);

Page 13: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 8. Código del método contadorPersonas()

Agregar el siguiente código al método contadorPersonas() de la clase PersonaDaoImpl.java:

String sql = "SELECT count(*) FROM PERSONA";

return this.jdbcTemplate.queryForInt(sql);

// Esta es otra opcion si no tuvieramos jdbcTemplate// return this.namedParameterJdbcTemplate.getJdbcOperations().queryForInt(sql);

Page 14: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 9. Crear la clase TestPersonasDaoImpl.java

Crear la clase JUnit llamada TestPersonasDaoImpl.java y agregar el siguiente código:

package test;

import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull;

import java.util.List;

import mx.com.gm.jdbc.Persona; import mx.com.gm.jdbc.PersonaDao;

import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory; import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:datasource-test.xml",

"classpath:applicationContext.xml"})public class TestPersonasDaoImpl {

private static Log logger = LogFactory.getLog("TestPersonasDaoImpl");

@Autowiredprivate PersonaDao personaDao;

}

Page 15: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 10. Agregar el método a TestPersonasDaoImpl.java

Agregar el método deberiaMostrarPersonas a la clase TestPersonasDaoImpl.java:

@Testpublic void deberiaMostrarPersonas() {

try {System.out.println();logger.info("Inicio del test deberiaMostrarPersonas");

List<Persona> personas = personaDao.findAllPersonas();

int contadorPersonas = 0;for (Persona persona : personas) {

logger.info("Persona: " + persona); contadorPersonas++;

}

//Segun el numero de personas recuperadas, deberia ser el mismo de la tabla assertEquals(contadorPersonas, personaDao.contadorPersonas());

logger.info("Fin del test deberiaMostrarPersonas");} catch (Exception e) {

logger.error("Error JBDC", e);}

}

Page 16: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 11: Ejecutar la Prueba

• Ejecutamos la clase TestPersonasDaoImpl.java como una pruebade JUnit y observamos el siguiente resultado:

Page 17: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 12. Código del método contadorPersonasPorNombre()

Agregar el siguiente código al método contadorPersonasPorNombre() de la clase PersonaDaoImpl.java:

String sql = "SELECT count(*) FROM PERSONA WHERE nombre = :nombre";

// Permite evitar crear un MAP de parametros y utilizar directamente el objeto persona// los atributos que coincidan con el nombre de los parametros por nombre del query// seran utilizados y proporcionados como atributos al querySqlParameterSource namedParameters = new BeanPropertySqlParameterSource(persona);

// Unicamente retorna un valor el metodo queryForIntreturn this.namedParameterJdbcTemplate.queryForInt(sql, namedParameters);

Page 18: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 13. Agregar el método a TestPersonasDaoImpl.java

Agregar el método testContarPersonasPorNombre a la clase TestPersonasDaoImpl.java:

@Testpublic void testContarPersonasPorNombre() {

try {System.out.println();logger.info("Inicio del test Contar Personas por nombre");

String nombre = "Juan";Persona personaEjemplo = new Persona();personaEjemplo.setNombre(nombre);

int noPersonasEncontradas = personaDao.contadorPersonasPorNombre(personaEjemplo);

logger.info("Numero de personas encontradas por nombre '" + nombre + "': " + noPersonasEncontradas);

assertEquals(2, noPersonasEncontradas);

logger.info("Fin del test Contar Personas por nombre");

} catch (Exception e) { logger.error("Error JBDC", e);

}}

Page 19: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 14: Ejecutar la Prueba

• Ejecutamos la clase TestPersonasDaoImpl.java como una pruebade JUnit y observamos el siguiente resultado:

Page 20: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 15. Código del método findPersonaById()

Persona persona = null;

try {

//Utilizamos la clase PersonaRowMapper

persona = jdbcTemplate.queryForObject(SQL_SELECT_PERSONA_BY_ID, new PersonaRowMapper(), idPersona);

} catch (EmptyResultDataAccessException e) {

persona = null;

}

return persona;

// Esta es otra forma sin utilizar la clase PersonaRowMapper

// BeanPropertyRowMapper<Persona> personaRowMapper = BeanPropertyRowMapper.newInstance(Persona.class);

// return jdbcTemplate.queryForObject(SQL_SELECT_PERSONA_BY_ID, personaRowMapper, idPersona);

Agregar el siguiente código al método findPersonaById() de la clase PersonaDaoImpl.java:

Page 21: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 16. Agregar el método a TestPersonasDaoImpl.java

Agregar el método deberiaEncontrarPersonaPorId a la clase TestPersonasDaoImpl.java:

@Testpublic void deberiaEncontrarPersonaPorId() { try {

System.out.println();logger.info("Inicio del test deberiaEncontrarPersonaPorId");

int idPersona = 1;

Persona persona = personaDao.findPersonaById(idPersona);

//Segun la persona recuperada, deberia ser la misma que el registro 1 assertEquals("Admin", persona.getNombre());

//Imprimimos todo el objetologger.info("Persona recuperada (id=" + idPersona + "): " + persona);

logger.info("Fin del test deberiaEncontrarPersonaPorId");} catch (Exception e) { logger.error("Error JBDC",

e);}

}

Page 22: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 17: Ejecutar la Prueba

• Ejecutamos la clase TestPersonasDaoImpl.java como una pruebade JUnit y observamos el siguiente resultado:

Page 23: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 18. Código del método getPersonaByEmail()

Agregar el siguiente código al método getPersonaByEmail() de la clase PersonaDaoImpl.java:

String sql = "SELECT * FROM PERSONA WHERE email = :email";SqlParameterSource namedParameters = new BeanPropertySqlParameterSource(persona);

//Si no se tiene el objeto RowMapper, se puede utilizar la siguiente linea para crear este objeto//RowMapper<Persona> personaRowMapper = ParameterizedBeanPropertyRowMapper.newInstance(Persona.class);return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, new PersonaRowMapper());

Page 24: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 19. Código del método insertPersona()

Agregar el siguiente código al método insertPersona() de la clase PersonaDaoImpl.java:

SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(persona); this.namedParameterJdbcTemplate.update(SQL_INSERT_PERSONA, parameterSource);

Page 25: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 20. Agregar el método a TestPersonasDaoImpl.java

Agregar el método deberiaInsertarPersona a la clase TestPersonasDaoImpl.java:

@Testpublic void deberiaInsertarPersona() {

try {System.out.println();logger.info("Inicio del test deberiaInsertarPersona");

// El script de datos tiene 3 registros assertEquals(3, personaDao.contadorPersonas());

Persona persona = new Persona(); persona.setNombre("Carlos"); persona.setApePaterno("Romero"); persona.setApeMaterno("Esparza"); persona.setEmail("[email protected]");

personaDao.insertPersona(persona);

//Recuperamos a la persona recien insertada por su email persona = personaDao.getPersonaByEmail(persona);

logger.info("Persona insertada: " + persona);

// Deberia haber ya cuatro personas assertEquals(4, personaDao.contadorPersonas());

logger.info("Fin del test deberiaInsertarPersona");} catch (Exception e) {

logger.error("Error JBDC", e);}

}

Page 26: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 21: Ejecutar la Prueba

• Ejecutamos la clase TestPersonasDaoImpl.java como una pruebade JUnit y observamos el siguiente resultado:

Page 27: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 22. Código del método updatePersona()

Agregar el siguiente código al método updatePersona() de la clase PersonaDaoImpl.java:

SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(persona); this.namedParameterJdbcTemplate.update(SQL_UPDATE_PERSONA, parameterSource);

Page 28: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 23. Agregar el método a TestPersonasDaoImpl.java

Agregar el métododebería ActualizarPersona a laclaseTestPersonasDaoImpl.java:

@Test//@Ignorepublic void deberiaActualizarPersona() { try {

System.out.println();logger.info("Inicio del test deberiaActualizarPersona");int idPersona = 1;Persona persona = personaDao.findPersonaById(idPersona); logger.info("Persona a modificar (id=" + idPersona + "): " + persona);

//Actualizamos el nombre y apeMaterno persona.setNombre("Administrador"); persona.setApeMaterno("Sistemas");

personaDao.updatePersona(persona);//Volvemos a leer el usuariopersona = personaDao.findPersonaById(idPersona);//Segun la persona recuperada, deberia ser la misma que el registro 1 assertEquals("Administrador", persona.getNombre());

//Imprimimos todo el objetologger.info("Persona modificada (id=" + idPersona + "): " + persona);

logger.info("Fin del test deberiaActualizarPersona");} catch (Exception e) {

logger.error("Error JBDC", e);}

}

Page 29: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 24: Ejecutar la Prueba

• Ejecutamos la clase TestPersonasDaoImpl.java como una pruebade JUnit y observamos el siguiente resultado:

Page 30: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 25. Código del método deletePersona()

Agregar el siguiente código al método deletePersona() de la clase PersonaDaoImpl.java:

SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(persona); this.namedParameterJdbcTemplate.update(SQL_DELETE_PERSONA, parameterSource);

Page 31: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Agregar el método deberiaEliminarPersona a la claseTestPersonasDaoImpl.java:

@Testpublic void deberiaEliminarPersona() {

try {System.out.println();logger.info("Inicio del test deberiaEliminarPersona");

//Buscamos eliminar la persona con id = 2 int idPersona = 2;

Persona persona = personaDao.findPersonaById(idPersona);

logger.info("Persona a eliminar (id=" + idPersona + "): " + persona);

//Eliminamos la persona recuperada personaDao.deletePersona(persona);

persona = personaDao.findPersonaById(idPersona);

//Deberia de regresar nulo al buscar la persona 2 assertNull(persona);

//Imprimimos todo el objeto logger.info("Nuevo listado de personas:");

List<Persona> personas = personaDao.findAllPersonas();

int contadorPersonas = 0;for (Persona persona2 : personas) {

logger.info("Persona: " + persona2); contadorPersonas++;

}

//Segun el numero de personas recuperadas, deberia ser el mismo de la tabla assertEquals(contadorPersonas, personaDao.contadorPersonas());

logger.info("Fin del test deberiaEliminarPersona"); System.out.println();

} catch (Exception e) { logger.error("Error JBDC", e);

}}

Paso 26. Agregar el método a TestPersonasDaoImpl.java

Page 32: Ejercicio 13€¦ · Ejercicio: Spring JDBCv2. Ejercicio 13. SPRING JDBC VERSIÓN2. Objetivo del Ejercicio. Ejercicio: Spring JDBCv2. El objetivo del ejercicio es agregar los casos

Paso 27: Ejecutar la Prueba

Ejecutamos la clase TestPersonasDaoImpl.java como una pruebade JUnit y observamos el siguiente resultado: