JPQL (Java Persistence Query Language)
editarEs un lenguaje de consulta independiente de plataforma orientado a objetos definidos como parte la especificación Java Persistence API. Nos permite definir consultas SQL dentro de un contexto JPA. Se caracteriza por hacer consultas en entidades almacenadas en bases de datos relacionales. La gran diferencia con SQL es que operan contra objetos entidad JPA (Bases de datos diseñadas en Java) en lugar de hacerlo directamente con las tablas de bases de datos.
Aunque no maneja el lenguaje JPQL debemos mencionar las JPA Query API utilizadas para consultas estáticas (inmodificables) y dinámicas (modificables). Utilizadas para usar interfaces, anotaciones, métodos. JPA Query API comprate con JPQL el entorno de desarrollo en Java, pero son independientes.
JPQL está desarrollado a partir de HQL (Hibernate Query Language). Hibernate y HQL se crearon antes de la especificación Java (JPA). Todas las consultas en HQL son válidas en JPQL aunque no a la inversa.
Mayúsculas y minúsculas en JPQL
editarSalvo en contadas ocasiones, JPQL no es sensible a mayúsculas o minúsculas. Las palabras claves o comandos pueden escribirse de ambas formas (SELECT o select; UPDATE o update; DELETE o delete). Donde sí es necesario distinguir entre minúsculas y mayúsculas es cuando JPQL incluye elementos de la fuente, elementos Java, como nombres de entidades, clases y campos persistentes que deben escribirse siempre distinguiendo entre mayúsculas y minúsculas.
Lista de palabras o identificadores reservados
editarCuando utilizamos JPQL tendremos en cuenta el listado de palabras reservadas. Son un número de identificadores que no pueden ser utilizados libremente. Pueden interferir en la programación Java. También a la extracción de datos de forma óptima. Las palabras reservadas se obian del sistema para evitar riesgos ya expuestos, estás palabras no existen en la Base de Datos.
Lista de palabras: ABS, ALL, AND, ANY, AS, ASC, AVG, BEETWEEN, BIT_LENGTH, BOTH, BY, CASE, CHAR_LENGTH, CHARACTER_LENGHT, CLASS, COALESCE, CONCAT, COUNT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DELETE, DESC, DISTINCT, ELSE, EMPTY, END, ENTRY, ESCAPE, EXISTS, FALSE, FETCH, FROM, GROUP, HAVING, IN, INDEX, INNER, IS, JOIN, KEY, LEADING, LEFT, LENGTH, LIKE, LOCATE, LOWER, MAX, MEMBER, MIN, MOD, NEW, NOT, NULL, NULLIF, OBJETCT, OF, OR, ORDER, OUTER, POSITION, SELECT, SET, SIZE, SOME, SQRT, SUBSTRING, SUM, THEN, TRAILING, TRIM, TRUE, TYPE, UNKNON, UPDATE, UPPER, VALUE, WHEN, WHERER.
Comandos JPQL: SELECT, DELETE, UPDATE
editarSintaxis JPQL es muy similar a la sintaxis de SQL. Tener SQL como sintaxis es una ventaja porque SQL es simple y siendo ampliamente utilizado.
Por ejemplo, una consulta JPQL puede recuperar una entidad objeto en lugar de campo conjunto de resultados de una base de datos, al igual que con SQL. El JPQL consulta estructura de la siguiente forma:
SELECT ... FROM ... [WHERE ...] [GROUP BY ... [HAVING ...]] [ORDER BY ...]
La estructura de JPQL borrar DELETE y modificado UPDATE
DELETE FROM ... [WHERE ...] UPDATE ... SET ... [WHERE ...]
Ejecutar sentencias JQPL
editarUna vez que hemos visto como montar y crear sentencias JPQL llega el momento de lanzarlas. Dado que lo tenemos que hacer dentro de un programa Java es necesario usar una serie de métodos y pasos para poder hacerlo.
El lenguaje JPQL se integra implementado la interface “Query”. Esta implementación se obtiene a través de “EntityManager”. Se usan diversos métodos de factoría, entre los que destacan los siguientes:
- createQuery(String jpql)
- createNamedQuery(String name)
- createNativeQuery(String sql)
Insertar atributos o sentencias
editarSe hace mediante INSERT_STATEMENT
Sintaxis:
insert_statement ::= insert_clause select_statement
insert_clause ::= INSERT INTO entity_name (atribute_list)
atribute_list ::= state_field[, state_field]*
Funciones de agregación
editarLa semántica es la misma que en SQL. En JPQL son:
- COUNT: cuenta el número de filas de una tabla.
- AVG: Recupera el valor medio de un rango. Los valores recuperados dependerán.
- MIN: Recupera el mínimo de un rango.
- MAX: Recupera el máximo de un rango.
- SUM: Suma los valores.
Funciones normalizadas
editar- CONCAT: Función de concretar cadenas.
- SUBSTRING: Recupera un extracto del valor encadenado.
- UPER: Convierte un Upper cases la cadena especificada.
- LOWER: Convierte en Lower cases la cadena especificada.
- TRIM: La función TRIM sigue la semántica de SQL.
- LENGTH: Recupera la longitud de la cadena.
- LOCATE: Localiza una cadena con otra cadena.
- ABS: Calcula el valor absolute de un cálconumérico.
- MOD: Calcula el resultado de dividir el primer número o argumento por el segundo.
- SQRT: Recupera la raíz cuadrada de un valor numérico.
- CURRENT_DATE: Devuelve el número de datos que contiene una base de datos.
- CURRENT_TIME: Devuelve la hora actual de la base de datos.
- LIKE: Se aplica a la extracción de cadenas de datos.
Otros comandos que JPQL comparte con SQL
editar- BEETWEN: Al igual que SQL recupera el cálculo entre dos valores dados (deben ser comparables).
- IN: marca el lugar donde debemos realizar la búsqueda.
Operadores booleanos
editar- NOT: Niega el predicado que le sigue.
- AND: Combina la expresión que le precede con la que le sucede. Se dará cuando los dos predicados sean ciertos.
- OR: Igualmente a AND combina dos expresiones.
- WHERE: Marca o restringe los resultados obtenidos en función de la ecuación que sigue Where. Es importante para limitar las actualizaciones y las eliminaciones de datos.
- GROUP BY: Agrupamiento como SQL.
- HAVING: Restringe los resultados obtenidos como WHERE pero opera en valores agregados.
- ORDER BY: ordena los valores recuperados según el criterio que le indiquemos.