0% encontró este documento útil (0 votos)
21 vistas

Guia SQL

SQL es un lenguaje de consulta estructurado que permite definir, manipular y gestionar datos almacenados en bases de datos relacionales. SQL incluye instrucciones para consultar, modificar y definir datos.

Cargado por

leidy.diseno32
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
21 vistas

Guia SQL

SQL es un lenguaje de consulta estructurado que permite definir, manipular y gestionar datos almacenados en bases de datos relacionales. SQL incluye instrucciones para consultar, modificar y definir datos.

Cargado por

leidy.diseno32
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 21

¿Qué es SQL?

El Lenguaje de Consulta Estructurado, popularmente conocido por sus siglas en inglés


como Structured Query Language, es un tipo de lenguaje de programación que ayuda a
solucionar problemas específicos o relacionados con la definición, manipulación e integridad
de la información representada por los datos que se almacenan en las bases de datos.

Algunos aspectos de SQL están basados en el cálculo relacional, algunos en el álgebra


relacional que provienen del modelo relacional y otros a ninguno de los dos, sino que son
parte de SQL.

¿Cómo logra SQL un aumento en la eficiencia y productividad?


Dada su fuerte conexión con la teoría del modelo relacional, SQL es un lenguaje de alto
nivel orientado a conjuntos de registros. Esto implica que un solo comando SQL puede
equivaler a decenas o cientos de líneas de código que se tendrían que utilizar en un
lenguaje de más bajo nivel orientado a registros.

Como resultado de lo anterior, SQL permite lograr con mayor rapidez y facilidad la definición
y manipulación de los objetos de base de datos, permitiendo así alcanzar una mayor
eficiencia y productividad en el desarrollo.

Bases de datos más usadas


● MySQL
● Oracle
● PostgreSQL
● Microsoft SQL Server

Diferencias con bases de datos NoSQL


● SQL permite combinar de forma eficiente diferentes tablas para extraer información
relacionada, mientras que NoSQL no lo permite o muy limitadamente.
● NoSQL permite distribuir grandes cantidades de información; mientras que SQL
facilita distribuir bases de datos relacionales.
● SQL permite gestionar los datos junto con las relaciones existentes entre ellos; en
NoSQL no existe este tipo de utilidades.
● NoSQL permite un escalado horizontal sin problemas – por su capacidad de
distribución-; mientras que escalar SQL resulta más complicado.
¿Qué es DML?

Lenguaje de Modificación de Datos (siglas en inglés Data Manipulation Language) es una


de las partes fundamentales del lenguaje SQL. Lo forman las instrucciones que permite a
los usuarios llevar a cabo las tareas de consulta o modificación de los datos.

En todas las instrucciones DML, el único dato devuelto por el sistema es el número de filas
que se han modificado al ejecutar la instrucción.

SELECT (Consulta de datos)

Es la declaración más utilizada en SQL. La declaración SELECT en SQL se usa para


recuperar o buscar datos de una base de datos. Podemos obtener la tabla completa o de
acuerdo con algunas reglas específicas. Los datos devueltos se almacenan en una tabla de
resultados. Esta tabla de resultados también se denomina conjunto de resultados.

SELECT [{ALL|DISTINCT}]

<nombre_campo>[, <nombre_campo>...]

FROM {<nombre_tabla>|<nombre_vista>}[,

{<nombre_tabla>|<nombre_vista>}...]

[WHERE <condición> [{AND|OR} <condición>...]]

[GROUP BY <nombre_campo>[, <nombre_campo>...]]

[HAVING <condición> [{AND|OR} <condición>...]]

[ORDER BY {<nombre_campo>|<indice_campo>} [{ASC|DESC}][,

{<nombre_campo>|<indice_campo>} [{ASC|DESC}]]];
INSERT (Inserción de datos)
Añadir datos a una tabla se realiza mediante la instrucción INSERT. Su sintaxis fundamental
es:

INSERT INTO tabla [(listaDeColumnas)]

VALUES (valor1 [,valor2 ...])

La tabla representa la tabla a la que queremos añadir el registro y los valores que siguen a
la cláusula VALUES, son los valores que damos a los distintos campos del registro.

Si no se especifica la lista de campos, la lista de valores debe seguir el orden de las


columnas según fueron creados (para conocer ese orden basta invocar al comando
DESCRIBE).

La lista de campos a rellenar se indica si no queremos rellenar todas las columnas.

Las columnas no rellenadas explícitamente con la orden INSERT, se rellenan con su valor
por defecto (DEFAULT) o bien con NULL si no se indicó valor por defecto alguno. Si alguna
columna tiene restricción de obligatoriedad (NOT NULL), ocurrirá un error si no indicamos
un valor para dicha columna.

Por ejemplo, supongamos que tenemos una tabla de clientes cuyos campos son: dni,
nombre, apellido1, apellido2, localidad y dirección

supongamos que ese es el orden de creación de los campos de esa tabla y que la localidad
tiene como valor por defecto Palencia y la dirección no tiene valor por defecto. En ese caso,
estas dos instrucciones son equivalentes:

INSERT INTO clientes


VALUES(
‘11111111’,’Pedro’,’Gutiérrez’,‘Crespo’,DEFAULT,NULL);

INSERT INTO clientes(dni,nombre,apellido1,apellido2


VALUES(‘11111111’,’Pedro’,’Gutiérrez’, ‘Crespo’);

Son equivalentes puesto que, en la segunda instrucción, los campos no indicados se


rellenan con su valor por defecto y la dirección no tiene valor por defecto.

Los valores por defecto se indican, durante la creación o modificación de la estructura de


una tabla, a través de la palabra clave DEFAULT.
UPDATE (Modificación de datos)
La modificación de los datos de las filas se realiza mediante la instrucción UPDATE.

Su sintaxis es la siguiente:

UPDATE tabla SET columna1=valor1 [,columna2=valor2...]


[WHERE condición];

Se modifican las columnas indicadas en el apartado SET con los valores indicados. La
cláusula WHERE permite especificar qué registros serán modificados.

Ejemplos:

UPDATE clientes SET provincia=’Ourense’ WHERE provincia=’Orense’;

UPDATE productos SET precio=precio*1.16;

La primera instrucción actualiza la provincia de los clientes de Orense para que aparezca
como Ourense.

El segundo UPDATE incrementa los precios en un 16%. La expresión para el valor puede
ser todo lo compleja que se desee (en el ejemplo se utilizan funciones de fecha para
conseguir que los partidos que se jugaban hoy, pasen a jugarse el siguiente martes):

UPDATE partidos SET fecha= NEXT_DAY(SYSDATE,’Martes’)


WHERE fecha=SYSDATE;
DELETE (Borrado de datos)
Se realiza mediante la instrucción DELETE

DELETE [FROM] tabla [WHERE condición];

Esta instrucción elimina las filas de la tabla que cumplan la condición indicada. Ejemplo:

DELETE FROM empleados WHERE seccion=23;

La cláusula WHERE igual que en el caso de la instrucción UPDATE.

Hay que tener en cuenta que el borrado de un registro no puede provocar fallos de
integridad y que la opción de integridad ON DELETE CASCADE hace que no solamente se
borren las filas indicadas, sino todas las relacionadas.

¿Que es DCL?
Un Lenguaje de Control de Datos (DCL, por sus siglas en inglés: Data Control Language) es
un lenguaje proporcionado por el sistema de gestión de base de datos que incluye una serie
de comandos SQL que permiten al administrador controlar el acceso a los datos contenidos
en la base de datos.

Algunos ejemplos de comandos incluidos en el DCL son los siguientes:

GRANT
Permite dar permisos a uno o varios usuarios o roles para realizar tareas determinadas.

GRANT <derecho1>, <derecho2>, ...

ON TABLE <nombre tabla>

TO <usuario1>, <usuario2> …

Las tareas sobre las que se pueden conceder o denegar permisos son las siguientes:
● SELECT
● INSERT
● UPDATE
● DELETE

REVOKE
Permite eliminar permisos que previamente se han concedido con GRANT

REVOKE <derecho1>, <derecho2>, ...

ON <nombre tabla>

FROM <usuario1>, <usuario2> ...;


Por ejemplo, para quitar los derechos de lectura de la tabla USUARIOS a SMITH:

REVOKE SELECT ON USUARIOS FROM ASMITH;

Para quitar todos los derechos a Smith

REVOKE ALL PRIVILEGES ON USUARIOS FROM ASMITH;

¿Qué es DDL?
Lenguaje de definición de datos, en inglés Data Definition Language.

El DDL es la parte del lenguaje SQL que realiza la función de definición de datos.
Fundamentalmente, se encarga de la creación, modificación y eliminación de los objetos de
la base de datos (es decir, de los metadatos). Por supuesto, es el encargado de la creación
de las tablas.

Los elementos, llamados objetos, de la base de datos: tablas, vistas, columnas, índices; se
almacenan en el diccionario de datos. Por otro lado, muchos Sistemas Gestores de Bases
de Datos aportan elementos para organizar estos objetos (como catálogos y esquemas).

CREATE
Es un comando de lenguaje de definición de datos (DDL) que se utiliza para crear objetos
de base de datos, como bases de datos y tablas de bases de datos.

CREATE DATABASE prueba;

CREATE TABLE [esquema.] nombreDeTabla (


nombreDeLaColumna1 tipoDeDatos [DEFAULT valor]
[restricciones] [, ...]
);
Tipos de datos

A la hora de crear tablas, hay que indicar el tipo de datos de cada campo. Necesitamos,
pues, conocer los distintos tipos de datos. Estos son:
ALTER
El comando ALTER en SQL se usa para agregar, renombrar o modificar, soltar/eliminar
columnas en una tabla de base de datos existente. Además, se puede emplear para
agregar y eliminar varias restricciones en una tabla de base de datos existente.

Ejemplo:

ALTER TABLE nombreViejo RENAME TO nombreNuevo;

Añadir columnas a la tabla.

ALTER TABLE nombreTabla

ADD(nombreColumna TipoDatos [Propiedades] [,columnaSiguiente


tipoDatos [propiedades]...)

Borrar columnas

ALTER TABLE nombreTabla DROP(columna [,columnaSiguiente,...]);

Ejemplo

ALTER TABLE facturas DROP (fecha)

TRUNCATE
El comando TRUNCATE TABLE se usa para eliminar todos los registros de datos de la tabla
de la base de datos. Elimina todas las filas de forma permanente. Ergo, no podemos realizar
una operación de reversión para deshacer un comando TRUNCATE.

TRUNCATE TABLE table_name;

DROP
El comando DROP se usa para eliminar un objeto de base de datos de la base de datos.
Incluso podemos eliminar la base de datos utilizando el comando DROP. No podemos
realizar una operación de reversión para deshacer un comando DROP de base de
datos/tabla.
Eliminar base de datos.

DROP DATABASE database_name;

Eliminar tabla:

DROP TABLE table_name;

TCL (Transaction Control Language)


Una transacción comienza con la primera instrucción DML que se ejecute y finaliza al darse
alguna de estas situaciones:

COMMIT

La instrucción COMMIT hace que los cambios realizados por la transacción sean definitivos,
irrevocables. Solo se debe utilizar si estamos de acuerdo con los cambios, conviene
asegurarse mucho antes de efectuar el COMMIT, ya que las instrucciones ejecutadas
pueden afectar a miles de registros.

Hay que recordar que si hemos ejecutado un INSERT, un DELETE y dos UPDATE (por
ejemplo), COMMIT acepta de golpe todas esas instrucciones, ya que la transacción será el
conjunto de todas ellas (si entre medias no hemos escrito una instrucción DDL o DCL).

Sintaxis:

{a set of SQL statements};

COMMIT;

Ejemplo:

DELETE FROM employees

WHERE employeeid = 10022;

COMMIT;

ROLLBACK

Anula todas las instrucciones de la transacción. Es una instrucción peligrosa que


únicamente deberíamos usar si nos hemos dado cuenta de que la ejecución de las
instrucciones de la transacción da lugar a un efecto no deseado en los datos.

Un abandono de sesión incorrecto o un problema de comunicación o de caída del sistema


dan lugar a un ROLLBACK implícito.
¿Qué es la normalización de una base de datos y
para qué sirve?
La normalización de una base de datos es la aplicación de una serie de reglas para evitar a
futuro realizar queries o consultas innecesariamente complejas. En otras palabras, están
enfocadas en eliminar redundancias e inconsistencias de dependencia en el diseño de las
tablas que creamos para organizar las bases de datos.

Para normalizar una base de datos existen principalmente 3 reglas.

La primera Forma Normal (1FN)


Hay que seguir una serie de pasos para normalizar, en otras palabras, para decir que
nuestra tabla está en primera forma normal. Estos son:

1. Eliminar los grupos repetitivos de las tablas individuales


2. Crear una tabla separada por cada grupo de datos relacionados
3. Identificar cada grupo de datos relacionados con una clave primaria

Para identificar si lo hemos hecho de manera correcta debemos considerar los siguientes
aspectos:

1. Todos los atributos son atómicos. Un atributo es atómico si los elementos del
dominio son indivisibles, mínimos.
2. La tabla contiene una clave primaria única
3. La clave primaria no contiene atributos nulos
4. No debe existir variación en el número de columnas
5. Los campos no clave deben identificarse por la clave (dependencia funcional)
6. Debe existir una independencia del orden tanto de las filas como de las columnas,
es decir, si los datos cambian de orden no deben cambiar sus significados.
7. Una tabla no puede tener múltiples valores en cada columna
8. Los datos son atómicos (a cada valor de X le pertenece un valor de y viceversa)

Para entender mucho mejor todo esto revisemos la siguiente tabla:

Si nos damos cuenta, esta tabla no cumple con el requisito que dice que todos los atributos
deben ser atómicos, es decir, que debemos descomponerlo en su mínima expresión.
Siguiendo los aspectos a considerar podríamos decir que nuestra tabla inicial se
transformaría a:

Con esto podríamos decir que nuestra tabla cumple con la primera Forma Normal (1FN).

La segunda Forma Normal (2FN)


Debemos seguir los siguientes pasos:

1. Tener la 1° forma normal


2. Crear tablas separadas para aquellos grupos de datos que se aplican a varios
registros
3. Relacionar estas tablas mediante una clave externa

Sabremos si nuestra base de datos tiene en la segunda forma normal, si esta previamente
cumple con las normas de la Primera forma Normal y si sus atributos no principales
dependen de forma completa de la clave principal.

En otras palabras, que no existen dependencias parciales.

Continuación del ejemplo de normalización.

Ahora, si nos fijamos, esta aún no cumple con los requisitos que pide la segunda Forma
Normal (2FN).

Podríamos crear tablas separadas para cursos y para profesores y cada una de estas
tendría su clave primaria y estarían relacionadas por una clave externa (Foreign Key).

Tabla de Cursos:
Tabla Autores:

Ahora nuestra tabla está en segunda Forma Normal (2FN).

La tercera Forma Normal (3FN)


Debemos considerar los siguientes puntos:

1. Tener la 2° forma normal


2. Eliminar aquellos campos que no dependan de la clave
3. Ninguna columna puede depender de una columna que no tenga una clave
4. No puede haber datos derivados

Podemos decir que nuestra tabla se encuentra en tercera normal si previamente estaba en
segunda forma normal y si no existe ninguna dependencia funcional transitiva entre los
atributos que no son clave.

En otras palabras, todo atributo no primo es implicado por la clave primaria en una
secuencia no transitiva.

Continuación del ejemplo de normalización.

Si detallamos nuestra tabla de cursos aún podríamos simplificarla, para esto podríamos
extraer la columna de materiales y crear una nueva tabla para esto.

Con esto, nuestra tabla cumpliría con los requisitos de la tercera Forma Normal (3FN) y
estaría lista.

Normalización más allá de la 3NF


La mayoría de las tablas 3NF están libres de anomalías de actualización, inserción y
borrado.

Ciertos tipos de tablas 3NF, que en la práctica raramente se encuentran, son afectadas por
tales anomalías; estas son tablas que no satisfacen la forma normal de Boyce-Codd (BCNF)
o, si satisfacen la BCNF, son insuficientes para satisfacer las formas normales más altas
4NF o 5NF.

CONTROLADORES DE CONEXIÓN

JDBC: Java Database Connectivity

JDBC es el estándar de conectividad de bases de datos de Java y proporciona un


mecanismo para que los programas Java se conecten a las bases de datos. Para acceder a
las bases de datos mediante JDBC, debe utilizar un controlador JDBC. Los proveedores de
bases de datos ofrecen controladores JDBC a través de descargas gratuitas.

Tipos de Controladores:

Los tipos de controladores se caracterizan en clases según la tecnología utilizada para


realizar la conexión a la BBDD

Tipo 1: Los controladores de tipo 1 son controladores "puente". Utilizan otra tecnología,
como por ejemplo, ODBC (Open Database Connectivity), para comunicarse con la base de
datos.

Tomada de: http://library.gxtechnical.com/gxdlsp/pub/GeneXus/Java/Docum/Manuals/7.5/Mjava75spB2-2.htm

Tipo 2: Los controladores de tipo 2 utilizan una API nativa para comunicarse con un sistema
de base de datos.

Los controladores de tipo 2 son generalmente más rápidos que los controladores de tipo 1.

Tomada de: http://library.gxtechnical.com/gxdlsp/pub/GeneXus/Java/Docum/Manuals/7.5/Mjava75spB2-2.htm


Tipo 3: Estos controladores utilizan una protocolo de red y middleware para hablar con un
servidor. Los controladores de tipo 3 son la disposición JDBC más adaptable, ya que no
requieren ningún código local doble en el cliente.

Tomada de: http://library.gxtechnical.com/gxdlsp/pub/GeneXus/Java/Docum/Manuals/7.5/Mjava75spB2-2.htm

Tipo 4: El controlador de tipo 4 utiliza Java para implementar un protocolo de red de


proveedores de DBMS. Puesto que los protocolos son generalmente de propiedad, los
proveedores DBMS son generalmente las únicas empresas que suministran un controlador
JDBC de tipo 4.

El driver tipo 4, también denominado native-protocol all-Java, no requiere instalación en los


clientes, según el DBMS.

Tomada de: http://library.gxtechnical.com/gxdlsp/pub/GeneXus/Java/Docum/Manuals/7.5/Mjava75spB2-2.htm

¿Qué es un ORM?
Sus siglas significan Object Relational Mapping (mapeo relacional de objetos) y su función
es abstraer la base de datos, de modo que tú como programador puedas hacer consultas
sin conocer SQL, y en su lugar, seguir usando el lenguaje de programación que ya conoces.

Lo que hace un ORM es mapear las bases de datos a objetos (por eso su nombre) y estos
objetos tendrán métodos para interactuar con ellos y hacer el CRUD sin comunicarte
directamente a la base de datos.
Hibernate: El ORM para Java:

Hibernate es una herramienta de mapeo objeto-relacional (ORM) bajo licencia GNU


LGPL para Java (disponible también para .Net con el nombre de NHibernate) que facilita el
mapeo de atributos en una base de datos tradicional, y el modelo de objetos de un
aplicación mediante archivos declarativos o anotaciones en los beans de las entidades que
permiten establecer estas relaciones. En resumen, agiliza la relación entre la aplicación y
nuestra base de datos SQL, de modo que optimiza nuestro flujo de trabajo evitando caer en
código repetitivo.

Imaginemos un programa sencillo. Necesitamos un método que permita dar de crear,


eliminar, o modificar los datos de los usuarios. Estos datos se almacenan en una base de
datos, y cada objeto tiene diferentes clases. Para cada objeto debemos crear una clase que
al menos permita crear, insertar, eliminar, consultar o modificar la información contenida en
sus atributos. Esto, con excepción de alguna consulta un poco especial, es siempre lo
mismo (SELECT, UPDATE, CREATE, FROM, WHERE, GROUP BY, ORDER BY, etc). Este
es el momento dónde un ORM tiene una importancia fundamental. Con solo configurarlo
todas estas tareas se ejecutan automáticamente y solo tendremos que preocuparnos por las
consultas especiales.
A la hora de programar con Hibernate, tenemos que tener en cuenta unas particularidades
clave pues a la hora de trabajar con datos; este framework hace uso de los siguientes
objetos:

● Objeto de Configuración Hibernate: El objeto de configuración es el primer objeto


de Hibernate y generalmente se crea una sola vez durante la inicialización de la
aplicación. Representa un archivo de configuración o propiedades requeridas y
proporciona dos componentes claves:
○ Conexión de base de datos
○ Configuración de Mapeo Clase
● Objeto SessionFactory:Objeto de configuración se utiliza para crear un objeto
SessionFactory para la aplicación que utiliza el archivo de configuración
suministrada, y permite un objeto Session ser ejecutado.
● Objeto Session:Se utiliza para obtener una conexión física con una base de datos.
Los objetos de sesión no deben mantenerse abiertos durante mucho tiempo, ya que
no suelen ser seguros para subprocesos y deben ser creados y destruidos, según
sea necesario.
● Objeto Transaction: Este es un objeto opcional y las aplicaciones de Hibernate
pueden optar por no utilizar esta interfaz, en lugar gestionar las transacciones en su
propio código de la aplicación.
● Objeto Query: Objetos de consulta utilizan SQL o Hibernate Query Language (HQL)
cadena para recuperar datos de la base de datos y crear objetos. Una instancia de
consulta se utiliza para enlazar los parámetros de consulta, limitar el número de
resultados devueltos por la consulta, y finalmente, para ejecutar la consulta.
● Objeto Criteria: Los objetos Criteria se utilizan para crear y ejecutar consultas con
objetos y recuperar objetos.

Todo esto puede sonar confuso en principio, así que vamos a implementarlo de manera muy
sencilla con Spring Boot.

¿Cómo utilizar Hibernate con Spring Boot?

Partimos de Spring Initializr para generar nuestro proyecto con las siguientes dependencias:
Web, JPA, y H2.
Después de generar nuestro proyecto lo abrimos con nuestro IDE de preferencia y
revisamos nuestro archivo de configuración pom.xml, aquí podemos encontrar las
dependencias que hemos añadido con Spring, revisemos la que tenemos con JPA

Esta dependencia incluye JPA API, JPA Implementation, JDBC y otras librerías necesarias,
incluyendo a Hibernate dado que es su implementación por defecto.

Revisemos también la dependencia H2, que es una base de datos muy ligera.

Vamos a habilitar nuestra base de datos en el archivo application.properties

Por defecto Spring Boot configura la aplicación para conectarse a un almacenamiento en


memoria con un nombre de usuario sa y una contraseña vacía. Pero esto podemos
modificarlo nuevamente en nuestro archivo application.properties para configurarlo a
nuestro gusto.

spring.datasource.url=jdbc:h2:mem:testdb

spring.datasource.driverClassName=org.h2.Driver

spring.datasource.username=sa

spring.datasource.password=

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Con esto hemos completado la configuración de Hibernate y H2.

Creando la entidad

Ahora crearemos nuestra entidad JPA en una carpeta que llamaremos modelo

@Entity
public class Libro{
@Id
@GeneratedValue
private Long id;
private String nombre;
// constructores
// getters y setters
}

Con esto tenemos nuestra entidad básica creada, de la cual H2 podrá crear una tabla, si
reiniciamos la aplicación y revisamos la consola de H2 encontraremos una nueva tabla
llamada libro.

Vamos a añadir unos valores iniciales a nuestra aplicación, así que vamos a crear un nuevo
archivo SQL y lo guardamos en una carpeta llamada recursos, vamos a llenar nuestro
archivo con las siguientes sentencias SQL.

insert into libro values(1, 'The Tartar Steppe');


insert into libro values(2, 'Poem Strip');
insert into libro values(3, 'Restless Nights: Selected Stories of
Dino Buzzati');

Si reiniciamos la aplicación nuevamente y revisamos la consola H2 veremos que tenemos


nuestros datos almacenados.

Creando el repositorio y el servicio

Continuaremos creando los componentes básicos para probar nuestra aplicación, primero
añadiremos una repositorio JPA en una carpeta repositorios.

@Repository
public interface LibroRepository extends JpaRepository<Book, Long>
{
}
Podemos usar la interfaz de JpaRepository del framework Spring, la cual provee una
implementación por defecto para las operaciones CRUD básicas.

Después, vamos a añadir un nuevo servicio, en una carpeta llamada servicios.

@Service
public class LibroService {
@Autowired
private LibroRepository libroRepository;

public List<Libro> list() {


return libroRepository.findAll();
}
}

Para probar nuestra aplicación, vamos a revisar que los datos creados puedan ser traídos
desde el método list() del servicio, y listo.

Mostrar las declaraciones SQL con Hibernate

En algunas ocasiones podemos necesitar las consultas que se realizan automáticamente y


el orden en que son ejecutadas. Bueno pues existe una forma para que podamos hacer
esto.

La forma más simple de lograrlos es mediante nuestro conocido application.properties

spring.jpa.show-sql=true
Podemos mejorar la visualización del SQL añadiendo esto:

spring.jpa.properties.hibernate.format_sql=true

Vemos que de esta forma es super simple, pero no es recomendable, ya que imprime todo
en nuestra consola sin ninguna de las optimizaciones de un framework de logging. Además
no hace log a los parámetros de sentencias parametrizadas.

Vía Loggers

Ahora veamos cómo podemos hacer un log de las consultas SQL configurando los loggers
en el archivo de propiedades.

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

La primera línea hace un log de las sentencias SQL y la segunda hace log de los
parámetros de sentencias parametrizadas. Podemos mejorar nuevamente la visualización
de las consultas con la propiedad mencionada anteriormente.

Ajustando estas propiedades, los logs se enviarán al anexador (appender) configurado, por
defecto, Spring Boot usa logback.

Spring ddl-auto:
La propiedad spring.jpa.hibernate.ddl-auto es propia de Spring Data JPA y es su
forma de especificar un valor que finalmente se pasará a Hibernate bajo la propiedad que
conoce, hibernate.hbm2ddl.auto.

Los valores create, create-drop, validate y update básicamente influyen en cómo la


administración de la herramienta de esquema manipulará el esquema de la base de datos
en el inicio.

La operación update consultará la API del controlador JDBC para obtener los metadatos de
la base de datos y luego Hibernate compara el modelo de objetos que crea basándose en la
lectura de sus clases anotadas o asignaciones XML de HBM e intentará ajustar el esquema
sobre la marcha.

La operación create, por ejemplo, intentará agregar nuevas columnas, restricciones, etc.,
pero nunca eliminará una columna o restricción que puede haber existido anteriormente
pero que ya no forma parte del modelo de objetos de una ejecución anterior.

Normalmente, en los escenarios de casos de prueba, es probable que use create-drop


para crear su esquema, su caso de prueba agregue algunos datos simulados, ejecute sus
pruebas y luego, durante la limpieza del caso de prueba, los objetos del esquema se
eliminan, dejando una base de datos vacía .

En el desarrollo, a menudo es común ver a los desarrolladores usar update para modificar
automáticamente el esquema para agregar nuevas adiciones al reiniciar. Pero entienda
nuevamente, esto no elimina una columna o restricción que pueda existir de ejecuciones
previas que ya no es necesaria.

En producción, a menudo es muy recomendable que use none o simplemente no


especifique esta propiedad. Esto se debe a que es una práctica común que los DBA revisen
los scripts de migración en busca de cambios en la base de datos, particularmente si su
base de datos se comparte entre múltiples servicios y aplicaciones.

También podría gustarte