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.
1
Usuario usuario =
new
Usuario();
2
3
String query =
"from Usuario where usuario = ?"
;
4
5
usuario = (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.
1
DetachedCriteria crit = DetachedCriteria.forClass(Usuario.
class
);
2
crit.add(Restrictions.like(
"usuario"
, “pedro”));
3
4
List 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.
1
DetachedCriteria crit = DetachedCriteria.forClass(Usuario.
class
);
2
3
if
(request.getParameter(“usuario”) !=
null
){
4
crit.add(Restrictions.like(“usuario”, request.getParameter(“usuario”) ));
5
}
6
7
if
(request.getParameter(“contrasena”) !=
null
){
8
crit.add(Restrictions.like(“usuario”, request.getParameter(“contrasena”) ));
9
}
10
11
…
12
13
List usuarios = hibernateTemplate.findByCriteria(crit);
Y 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!
1 | Usuario usuario = new Usuario(); |
2 |
3 | String query = "from Usuario where usuario = ?" ; |
4 |
5 | usuario = (Usuario) hibernateTemplate.find(query, "pedro" ).get( 0 ); |
1 | DetachedCriteria crit = DetachedCriteria.forClass(Usuario. class ); |
2 | crit.add(Restrictions.like( "usuario" , “pedro”)); |
3 |
4 | List usuarios = hibernateTemplate.findByCriteria(crit); |
1 | DetachedCriteria crit = DetachedCriteria.forClass(Usuario. class ); |
2 |
3 | if (request.getParameter(“usuario”) != null ){ |
4 | crit.add(Restrictions.like(“usuario”, request.getParameter(“usuario”) )); |
5 | } |
6 |
7 | if (request.getParameter(“contrasena”) != null ){ |
8 | crit.add(Restrictions.like(“usuario”, request.getParameter(“contrasena”) )); |
9 | } |
10 |
11 | … |
12 |
13 | List usuarios = hibernateTemplate.findByCriteria(crit); |
No hay comentarios.:
Publicar un comentario