Bien, en esta clase vamos a ver cómo implementar nuestro dado, nuestro componente de acceso a datos
de una forma bien simple, utilizando la interfaz CRUD Repository que propia del API de Sprint Data
JPA.
Vámonos a la página de Spring Punto y yo nos vamos a proyectos en Projects.
Por acá buscamos Spring Data.
Hacemos un clic y en el menú de la izquierda tenemos Spring Data JPA.
Acá tenemos varias implementaciones, pero la que nos importa es con JPA.
Hacemos un clic.
Nos vamos a la documentación y hacemos un clic.
Documentación de referencia.
Vámonos a trabajar con sprint data, repositorios o repositorios.
Hacemos un click.
Acá tenemos la interfaz.
Si se fijan un public interfaz crud repository with generic, ya que lo podemos reutilizar para nuestras
clases, Entity acaba en la T.
El tipo dato de nuestra clase Identity, por ejemplo cliente, factura o lo que queramos.
Y acá el tipo de dato de Leidy.
Por ejemplo, un lonko, el tipo lonko bien.
Y tenemos varios métodos que ya vienen construidos por debajo de forma automática.
Qué podemos reutilizar, por ejemplo, en Métodos Aife para guardar una entidad tanto para guardar o
para actualizar, dependiendo si el Heidy existe o no, si existe por debajo?
Va a ser un apte o un merch, mientras que si es una nueva Entity sin el Heidy la va a crear.
Va a ser un Seif y por debajo un insert enlazado.
También tenemos métodos para buscar por Heidy fi beibi mediante el primer iqui, el Heidy find all bucar
todos acá retornan y derable count.
El método de lít que borra una entity.
También tenemos de vi heidy borrar por Heidy y le pasamos el Heidy.
En fin, un montón de métodos típicos para implementar un CRUD tal como lo hicimos anteriormente, pero
acá de forma completamente automatizada.
Pero bien me van a preguntar pero profesor, esto es una interfaz?
Cómo se implementa?
Bueno, es automático, es una interfaz de Spring Data JPA y está todo implementado por detrás de escena.
Nosotros simplemente damos el esqueleto de este interfaz y por debajo se construye.
Estas consultas y se genera la implementación de forma automática para tothom métodos.
Pero también me podrían preguntar Pero qué pasa con nuestras consultas personalizadas?
Queremos realizar una consulta que no es propia del cruz.
Por ejemplo, buscar por nombre, buscar por correo, consulta que tengan huer por ejemplo de otros
atributos distintos Leidy.
Bueno, eso también lo podemos implementar y tenemos dos formas la primera utilizando la anotación query.
Vamos a ver.
Vámonos un poco más arriba.
Por acá buscamos usando querí la notación country.
Acá la tenemos en JPA Repository.
Por acá tenemos usando CREDI.
Hacemos un clic.
Acá tenemos un ejemplo implementamos un método en nuestra interfaz que hereda de Cruchot Repository
puede heredar de Crude Repository o también de JPA Repository.
La diferencia es que JPA incluye otros métodos, por ejemplo, para paginación paginación también para
ordenamiento.
Básicamente es esa la diferencia.
Pero veamos el ejemplo de este método.
Acá tenemos un fin BAII Email address buscar por correo por dirección de correo que va a retornar un
objeto entity.
Cualquiera en este caso usuario, pero también podría ser cliente.
Acá tenemos la anotación query.
Anotamos y una consulta de JPA.
Hay que tener mucho cuidado que estas consultas son a nivel de objetos de ENTITY y no de tablas.
Por lo tanto tenemos un SELLECK u el objeto ENTITY que retornamos.
En este caso el usuario from user podría ser cliente.
Le damos un nombre, un alias que estamos retornando y en el WHERE.
Bueno, preguntamos que el atributo email address de la clase Entity sea igual a un parámetro, a un
valor.
Este parámetro lo pasamos por argumento en el método.
Este nombre le podemos dar como queramos, por ejemplo buscar por IMEI en español y anotamos con query
con la consulta personalizada.
Acá tenemos otro ejemplo usando huer like muy parecido también.
Volvamos Barria.
Otra forma, aparte del query de la anotación query, podemos utilizar nombres de método para nuestros
query.
Acá tenemos query métodos.
Básicamente son nombre de método concierta no me clausura que funciona bajo una convención de nombres
que tenemos que respetar.
Por ejemplo, Finn es para implementar una consulta con Huer Fight Boy y Mail Adres.
Por lo tanto, el fin y el VIH son palabras reservadas y acá iría nuestro nombre de atributo comenzando
con mayúscula.
Por ejemplo, el atributo email address and acá tenemos el operador and del where last name.
También podremos implementar or en vez de ant llega.
Tenemos otro atributo el apellido y pasamos los dos.
Entonces por debajo va a ser un select.
Acá tenemos el ejemplo al objeto y user nuestro Entity Huer cuando el atributo email address sea igual
a un valor y además el apellido también sea igual a otro parámetros que estamos pasando.
Eso sería a través del nombre método.
Entonces palabras clave find y el pie.
Los atributos y separamos con ant.
Hoy podemos implementar nuestro query a través del nombre del método.
También tenemos otras palabras reservadas más abajo.
Tenemos varios ejemplos la palabra reservada y cómo se traduce a una consulta JPA JPA Query Language.
Ahora tenemos CELAM.
Entonces fin voy apellido y primer nombre and Ferney.
Entonces por detrás de escena sería un huer.
El nombre del objeto o del alias de la consulta?
El atributo igual al parámetro y aunt.
El segundo atributo.
En este caso el nombre igual al parámetro.
Acá tenemos con OHR en vez de ADT usamos por acá tenemos diferentes ejemplos buscar obtener por primer
nombre between para fechas entre rangos menor qué menor o igual qué mayor, qué mayor o igual qué?
Simplemente se agrega la palabra reservada que tenemos acá.
En fin, un montón de ejemplos pueden profundizar.
Ver esta documentación es bastante simple.
Trabajar con crup repository viene ya varios métodos predefinidos que lo podemos utilizar y además podemos
implementar nuestros propios métodos utilizando la anotación query personalizar la consulta o bien a
través del nombre método siguiendo el estándar una nomenclatura por convención de nombre con palabras
clave, por ejemplo el fin, el voy y el listado de palabras clave que hemos visto.
Bien, vamos a modificar nuestro proyecto, vamos a abrir nuestro package Daewoo Models.
Dado lo primero, vamos a eliminar cliente dado simplemente porque la idea es modificar nuestra interfaz
y cliente dado, aunque podríamos crear otra, pero para el ejemplo del curso vamos a utilizar esta
misma y cliente dado.
Simplemente quitamos esto.
Lo eliminamos.
Ok, vamos a quitarte estos métodos porque, como ya he explicado, vienen implementado por detrás.
Entonces la idea de convertir esta interfaz en nuestro CRUD repositorio,
heredamos stents de CRUD repositorio.
Vamos a importar.
Ven acá.
Tenés que indicar mediante el Generic el tipo de dato de nuestra clase entity.
Por lo tanto, como primer parámetro en este generic íria cliente koma y como segundo el tipo de Leydi
nuestra llave loc@.
Por ejemplo, si nos vamos a cliente, vemos que el tipo es lonco de la llave primaria.
Entonces el segundo Generic sería lonko, el primero en nombre de la clase Entity en la cual vamos a
implementar nuestro crup.
Bien, el list@ esto lo podemos quitar de que viene por debajo implementado.
Vamos a guardar bien en la clase servis aparecen algunos errores que tenemos que corregir, como por
ejemplo el fin al aún literales.
Y acá lo tenemos como list@.
Entonces la solución sería bueno hacer un cast, convertir nuestro trave del club repository del método
Find All aún list de cliente.
Simplemente lo que hice fue en el error.
Me paro sobre y coloco agregar cast.
O también lo podemos hacer a mano si da lo mismo.
Bien, eso sería una parte.
Lo segundo es en el método Find Wan.
En el ejemplo anterior, nuestro cliente dado lo implementamos como Find Wan, pero acá se llama Find.
Voy a ir.
Pero este método retorna un optional.
Un opcional de cliente.
Lo que hace es opcional.
Básicamente es envolver el resultado de la consulta.
Por ejemplo, acá tenemos diferentes métodos obtener el cliente lo más simple para obtener el cliente
o obtener el cliente.
Y si no lo encuentra or ells retornar un nuevo cliente.
Crear una nueva instancia con el operador new o retornar un null.
Por ejemplo.
Acá tenemos or else through lanzar una excepción.
Si no lo encuentra, que lance una excepción.
En fin, varios métodos interesantes.
Podemos preguntar si es empty se está vacío.
En fin, muchas cosas vamos a utilizar el más típico, el nyet o bien el or else.
Para nuestro caso vamos a usar el hort.
Él se lo encuentra, retorna el objeto cliente, de lo contrario va a retornar null y lo tenemos implementado.
Bueno y acá en vez de Delight es Delight.
Voy Heidy agregamos el voy a ahí di en Croods Repository.
Eso serían todos los cambios se fijan, son mínimos.
Guardamos nuestra clase cliente servis simplement vámonos a la interfaz.
Y quién te ha dado cruz repository?
Se fijan?
No está anotado con repository ni con component con ninguna anotación.
Sin embargo acá lo estamos inyectando.
Estamos inyectando con octubres nuestra interfaz CRUD repositorio.
Bueno, y es porque es una interfaz especial que hereda de repository por debajo ya es un componente
es Brink no necesario tener que indicarlo con anotaciones, simplemente se escribe la interfaz y se
hereda de CRUD repositorio nada más en el cuerpo.
Bueno, podríamos tener otros métodos, como había explicado con consultas personalizadas, con query
o a través del nombre, método o como queramos.
Veamos con un control clic en Krug Repository.
Acá tenemos el método Seif guarda una Entity, acá tenemos el método Sait.
Al fin Baily retorna un optional.
En vez de retornar la entidad va a retornar el optional que encapsula o envuelve nuestro Entity con
métodos para manejar si viene vacío, si queremos lanzar una excepción con repasito o retornar otra
cosa, un null o otra instancia de cliente o de nuestro objeto Entity o si es presente, se fijan un
montón de cosas que podemos manipular con el OPTIONAL.
Esto es una característica propia de Java 8 y se implementa acá con esprintar si existe por ahí otro
método Find Hold y derable se fijan.
Por eso hicimos el cast no es un list, sino es un item arable.
Pero al final si nos vamos por ejemplo a servis, hacemos un control.
Clic en List La interfaz List es un colección hereda de la interfaz Collections de Java, pero a su
vez Collections hereda de deraBle.
Por lo tanto, un list también es un literales y por eso tuvimos que hacer el cast acá.
Volvamos a Club Repository.
En fin, tenemos varios métodos Count id, pi, Heidy que recibe el Heidy del Entity Delight a secas,
recibe el objeto Entity.
Podemos usar cualquiera de estas dos formas, la más típica por aili borrar.
Todos pasamos un collection, un hite arable de varios entity o borrar todos los que existan.
Pero bien, ahora estamos listos.
Vamos a guardar nuestro club repository y vamos a ejecutar clic derecho.
Ranas despren etap.
Y funciona tal cual.
Por lo menos el Estado.
Vamos a crear un cliente, por ejemplo James Dow email o correo James EE. gmail.com o lo que sea una
fecha crea cliente y lo crea perfecto.
Vamos a editar por ejemplo James Brought crear cliente bueno o actualizar James Pruit.
Perfecto.
Lo cambia sin ningún problema.
Lo vamos a eliminar.
Estás seguro de que ese eliminar aceptar y lo borra y ya tenemos nuestro CRUD Repository implementado
en nuestro proyecto.
Una forma mucho más simple, mucho más fácil de trabajar con JPA heredando de Group Repository o JPA
Repository.
Por ahora nada más.
Hasta la próxima.