Spring MVC – Ejemplo de un CRUD en SpringMVC 4.0.1, JdbcTemplate , MySql y Netbeans 8.2

4. Clases Spring

Modelo

\"\"
\"\"

4.1 Clase Bean Articulo.java

\"\"
package crud.model;

import java.util.Date;

public class Articulo {
    int idArticulo;
    String cveArticulo;
    String nombre;
    String descripcion;
    Integer idUnidadMedida;
    Date fechaDesde;
    Date fechaHasta;
    String marca;

    public int getIdArticulo() {
        return idArticulo;
    }

    public void setIdArticulo(int idArticulo) {
        this.idArticulo = idArticulo;
    }

    public String getCveArticulo() {
        return cveArticulo;
    }

    public void setCveArticulo(String cveArticulo) {
        this.cveArticulo = cveArticulo;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Integer getIdUnidadMedida() {
        return idUnidadMedida;
    }

    public void setIdUnidadMedida(Integer idUnidadMedida) {
        this.idUnidadMedida = idUnidadMedida;
    }

    public Date getFechaDesde() {
        return fechaDesde;
    }

    public void setFechaDesde(Date fechaDesde) {
        this.fechaDesde = fechaDesde;
    }

    public Date getFechaHasta() {
        return fechaHasta;
    }

    public void setFechaHasta(Date fechaHasta) {
        this.fechaHasta = fechaHasta;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }
  
}

4.2 Clase DAO ArticulosDAO

La mejor práctica indica que los servicios de una clase se deben establecer mediante una interfaz en lugar de una implementación directa. Para simplificar este ejemplo se hace la clase directamente.

\"\"
package crud.model;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class ArticulosDao {
    //-- 1.- JDBC Template, actualizar dispatcher-servlet.xml
    private JdbcTemplate jdbcTmpl;
    public void setJdbcTmpl(JdbcTemplate jdbc) {
System.out.println(\"Asignación de la conexión JDBC\");
        this.jdbcTmpl = jdbc;
    }
    
    //-- Construir las operaciones del CRUD
}

4.3 Agregar la conexión vía JDBC en applicationContext.xml

<bean class=\"org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping\"/>

<bean id=\"urlMapping\" class=\"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping\">
    <property name=\"mappings\">
        <props>
            <prop key=\"index.htm\">indexController</prop>
        </props>
    </property>
</bean>
<bean id=\"viewResolver\"
      class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\"
      p:prefix=\"/WEB-INF/jsp/\"
      p:suffix=\".jsp\" />
<bean name=\"indexController\"
      class=\"org.springframework.web.servlet.mvc.ParameterizableViewController\"
      p:viewName=\"index\" />

<!-- Conexión a la base de datos -->
<bean id=\"jdbc\" class=\"org.springframework.jdbc.core.JdbcTemplate\">    
    <property name=\"dataSource\" ref=\"crudDS\"></property>    
</bean>    
<bean id=\"articulosDao\" class=\"crud.model.ArticulosDao\">    
    <property name=\"jdbcTmpl\" ref=\"jdbc\"></property>    
</bean>       

Correr el proyecto para verificar que asigne el JDBC

\"\"
\"\"

4.3 Complementar la clase ArticulosDao.java

package crud.model;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;


@Repository
public class ArticulosDao {

    //-- 1.- JDBC Template, actualizar dispatcher-servlet.xml
    private JdbcTemplate jdbcTmpl;

    public void setJdbcTmpl(JdbcTemplate jdbc) {
        System.out.println(\"Asignación de la conexión JDBC\");
        this.jdbcTmpl = jdbc;
    }

    //-- Operaciones del CRUD
    public int guardar(Articulo a) {
        String sql = \"INSERT INTO \"
                + \" inv_articulos ( cve_articulo, nombre, descripcion, marca) \"
                + \" VALUES ( ?,?,?,?)\";
        return jdbcTmpl.update(sql,
                 a.getCveArticulo(),
                 a.getNombre(),
                 a.getDescripcion(),
                 a.getMarca());
    }

    public int actualiza(Articulo a) {
        String sql = \"UPDATE inv_articulos \"
                + \" SET cve_articulo = ?, \"
                + \"     nombre       = ?, \"
                + \"     descripcion  = ?, \"
                + \"     marca        = ? \"
                + \" WHERE id_articulo = ?\";
        return jdbcTmpl.update(sql,
                 a.getCveArticulo(),
                 a.getNombre(),
                 a.getDescripcion(),
                 a.getMarca(),
                 a.getIdArticulo());
    }

    public int borrar(int id) {
        String sql = \"DELETE FROM inv_articulos WHERE id_articulo = ?\";
        return jdbcTmpl.update(sql, id);
    }

    public Articulo getArticuloById(int id) {
        String sql = \"SELECT * FROM inv_articulos WHERE id_articulo = ?\";
        return jdbcTmpl.queryForObject(sql,
                 new Object[]{id},
                 new BeanPropertyRowMapper<Articulo>(Articulo.class));
    }

    public List<Articulo> getArticulos() {
        String sql = \"SELECT * FROM inv_articulos\";
        return this.jdbcTmpl.query(sql, new RowMapper<Articulo>() {
            @Override
            public Articulo mapRow(ResultSet rs, int i) throws SQLException {
                Articulo a = new Articulo();
                a.setIdArticulo(rs.getInt(\"ID_ARTICULO\"));
                a.setCveArticulo(rs.getString(\"CVE_ARTICULO\"));
                a.setNombre(rs.getString(\"NOMBRE\"));
                a.setDescripcion(rs.getString(\"DESCRIPCION\"));
                return a;
            }
        });
    }
}