Hsql Diciembre 2008
JosĂŠ A. GarcĂa jagarcia@siteframe.tk
Lenguaje de consultas de HB3 Hibernate est谩 equipado con un lenguaje de consultas extremadamente potente: HQL. Aunque cuenta con una sintaxis deliberadamente parecida a SQL, HQL es totalmente orientado a objetos, capaz de entender nociones como herencia, polimorfismo y asociaci贸n.
2
Las mayusculas En las consultas, el uso de mayテコsculas o minテコsculas es irrelevante, excepto por los nombres de propiedades y clases de Java. De modo que SeLeCT es lo mismo que sELEct y lo mismo que SELECT, Pero org.hibernate.eg.FOO no es lo mismo que org.hibernate.eg.Foo, y model.DueテアoAnimal no es lo mismo que model.DUEテ前ANIMAL 3
Referir la propiedad identificadora
4
La consulta más sencilla • La consulta de Hibernate más simple tiene esta forma
Aunque normalmente no necesitaremos indicar el paquete y bastará con
Cuando usamos hibernate deberíamos usar Alias siempre
HAY QUE NOTAR QUE HSQL TRABAJA CON OBJETOS 5
Cruces
6
Consideremos las siguientes tablas..
7
La clausula where โ ข La clรกusula where permite acotar la lista de instancias devueltas.
En este caso necesitamos que exista el constructor adecuado
8
Joins a travĂŠs de objetos Con HSQL podemos crear joins implĂcitos de una forma muy sencilla usando la jerarquia de objetos de Java.
Si queremos devolver un objeto distinto al que ponemos en el from podemos hacer
9
Where avanzados
Las expresiones con "path" compuesto hacen que la clĂĄusula "where" sea extremadamente poderosa. Consideremos:
Esto se traduce en 2 join en la BBDD
Y si hicieramos algo como
EstarĂamos originando el join de 4 tablas
10
Ejemplo básico Usando las tablas que creamos ayer, crear algunas consultas básicas. Por ejemplo • Listar todos los animales • Listar los animales que son perros • Listar el nombre de todos los dueños que tienen animales • Listar los perros de “Andrés”
11
Where avanzados (comparar referencias)
12
Order by
• La lista devuelta por una consulta puede ser ordenada por cualquier propiedad de las clases o componentes devueltos:
13
Agregados • Las consultas HQL incluso pueden devolver los resultados de funciones agregadas aplicadas a propiedades
14
Group by y having
•Una consulta que devuelva valores agregados, puede ser agrupada por cualquier propiedad de las clases
•También podemos usar having de forma análoga a como lo hacemos en SQL.
15
Operadores SQL • En la cláusula "select" se pueden usar operadores aritméticos, concatenación, y funciones SQL reconocidas:
En este caso hay un cruce EXPLICITO para obtener la información de cada gatito junto a la de su madre. (este tipo de cruces se comportan de forma similar a los de SQL)
16
Mas Operadores y Expresiones
17
Mas Operadores y Expresiones
18
Operadores sobre colecciones
19
Operadores y colecciones Ademas se puede referir a los elementos en las colecciones indexadas (arrays, lists, maps) por 铆ndice (s贸lo en la clausula "where").
20
Subconsultas HSQL soporta subconsultas aunque el lenguaje de la BBDD no las soporte, asĂ que podrĂamos hacer cosas como:
21
Mas Ejemplos • Encontrar los animales que no son de Andres • Encontrar los animales cuyo dueño tiene un nombre que empieza por una letra entra A y G. • Devolver el número de animales de Andres
22
Ejercicio
Implementar el ejemplo de los gatos
Introducir algunas filas para poder realizar pruebas
Obtener el numero de gatitos de cada camada Obtener el peso total de los gatitos de una camada concreta
23