Hibernate Criteria + Spring

Hibernate Criteria es una API que nos facilita las consultas (no las inserciones) a la base de datos. La ventaja fundamental de esta API es que nos permite tratar la composición de la consulta de una forma totalmente orientada a objetos. Es decir, no compone la consulta a través de una cadena insertada por nosotros mismos, sino que la compone la propia API a través de unas propiedades que nosotros establecemos.

En el ejemplo de la entrada anterior existe una clase GuardaController que hace una consulta a la base de datos. Ciertamente la consulta no tiene ningún tipo de dificultad, simplemente es una selección con una restricción sobre el usuario, pero para que se hagan una idea voy a poner los dos ejemplos, el ya expuesto, y como quedaría con Criteria, por supuesto integrado con Spring.
Sin Criteria.
1Usuario usuario = new Usuario();
2 
3String query = "from Usuario where usuario = ?";
4 
5usuario = (Usuario) hibernateTemplate.find(query, "pedro").get(0);
Con Criteria. Lo único que tenemos que hacer es declarar el objeto Criteria como DetachedCriteria y una vez compuesto utilizar el metodo findByCriteria que nos suministra hibernateTemplate.
1DetachedCriteria crit = DetachedCriteria.forClass(Usuario.class);
2crit.add(Restrictions.like("usuario", “pedro”));
3 
4List usuarios = hibernateTemplate.findByCriteria(crit);
Tal vez en un ejemplo tan simple resulte un poco complicado entender todas las bondades de Criteria, sobretodo para el que lo ve por primera vez, pero voy a poner un ejemplo bien simple que ya de por si, debería convenceros de utilizar Criteria.
Imagina que tienes que realizar una consulta según varios parámetros, que a su vez, son todos opcionales, es decir, el usuario tiene un formulario de búsqueda, y puede seleccionar diferentes búsquedas, con diferente numero de parámetros, si no utilizas Criteria, tendrías que estar analizando la existencia de cada parámetro e ir concatenando una misma cadena constantemente, sin embargo con Criteria, simplemente seria añadir su restricción al objeto.
1DetachedCriteria crit = DetachedCriteria.forClass(Usuario.class);
2 
3if(request.getParameter(“usuario”) != null){
4    crit.add(Restrictions.like(“usuario”, request.getParameter(“usuario”) ));
5}
6 
7if(request.getParameter(“contrasena”) != null){
8    crit.add(Restrictions.like(“usuario”, request.getParameter(“contrasena”) ));
9}
10 
11
12 
13List usuarios = hibernateTemplate.findByCriteria(crit);
Criteria hace el trabajo por nosotros.
Criteria permite hacer casi todo tipo de consultas que te puedas imaginar, las opciones son tan innumerables y están muy bien explicadas en esta pagina.
Saludos!

No hay comentarios.: