Visitas: 12  
Tiempo total: 0 días con 5:6:55 hrs  

El modelo en un framework MVC es el que se encarga de establecer la conexión a la base de datos y contiene los métodos y funciones que el desarrollador ha definido y que son implementados únicamente por el controlador – preferiblemente y por temas de seguridad. El cómo funcionan los modelos en Spring MVC es bastante simple, se divide en dos partes: La definición de la interface y la implementación de esta. Por ejemplo tenemos una base de datos con una tabla llamada Nombre_tabla, entonces la interface tiene que llamarse Nombre_tablaDao y la implementación de esta interface: Nombre_tablaDaoImpl.

La estructura de la interface es sencilla:

public interface Nombre_tablaDao
{
public List<Nombre_tabla> getNombres();
public void new_Nombre(Nombre_tabla nombre);
public Nombre_tabla getNombre(int id);
}

Como lo había mencionado en las otras dos publicaciones, cada tabla de la base de datos debe de tener una clase en nuestro proyecto que tenga sus atributos y los getters y setters de estas variables, en este caso dicha entidad es Nombre_tabla, que es lo que devolverá o recibirán los métodos y funciones. La implementación de esta interface, es la siguiente:

@Repository
@Transactional
public class Nombre_tablaDaoImpl implements Nombre_tablaDao
{
@Autowired
private EntityManager em;
public List<Nombre_tabla> getNombres()
{
return (List<Nombre_tabla>) em.createQuery("SELECT a FROM Nombre_tabla a").getResultList();
}
}

Observamos la variable con la que realizamos las transacciones: EntityManager em, debo mencionar que en esta publicación me centrare en el manejo de consultas propias al no implementar las funciones basadas en objetos que este modelo nos provee, mi razón es porque utilice un modelo relacional especifico y en su mayoría debía de utilizar consultas que relacionaban otras entidades y atributos.

Para realizar una inserción, usamos el siguiente código (Es similar para una actualización):

public void new_Nombre(Nombre_tabla nombre){
em.createNativeQuery(
"INSERT INTO Nombre_tabla (nombre, apellido) VALUES (:nombre, :apellido)"
)
.setParameter("nombre", nombre.getNombre())
.setParameter("apellido", nombre.getApellido())
.executeUpdate();
}

Para buscar un registro según el ID especificado, usamos el siguiente código:

public Nombre_tabla getNombre_tabla(int id){
List results = em.createQuery(
"SELECT a FROM Nombre_tabla a WHERE a.id = :id"
)
.setParameter("id", id)
.getResultList();
if(results.isEmpty()){
return null;
}else{
return (Nombre_tabla)results.get(0);
}
}

Estos métodos y funciones son bastante simples, pero para realizar una consulta con una súper Query que nos devuelva x cantidad de parámetros de una tabla y z parámetros de otra tabla, mi solución más simple fue crear una nueva entidad llamada por ejemplo Reporte, que contenía solo estos x y z parámetros devolviendo el resultado con la siguiente instrucción:

return (List) em.createNativeQuery(SQL, Reporte.class).getResultList();

En este caso el String SQL es mi consulta y generalmente, todas las consultas se realizaran utilizando este mismo formato y para finalizar, puedo mencionar que al crear una nueva entidad llamada Reporte – en mi ejemplo – también se creara una tabla con el nombre Reporte en la base de datos, pero como la instrucción ejecutada nunca escribirá en disco dicha información, nunca afectara el rendimiento de la base de datos – a pesar de que Hibérnate no hace énfasis precisamente en la optimización de los recursos de la base de datos.

Referencias

[https://www.youtube.com/watch?v=OxkoU_xhC8c]

0