1
00:00:00,330 --> 00:00:06,510
Bien, en esta clase vamos a ver cómo implementar nuestro dado, nuestro componente de acceso a datos

2
00:00:06,600 --> 00:00:13,170
de una forma bien simple, utilizando la interfaz CRUD Repository que propia del API de Sprint Data

3
00:00:13,170 --> 00:00:13,650
JPA.

4
00:00:13,770 --> 00:00:19,380
Vámonos a la página de Spring Punto y yo nos vamos a proyectos en Projects.

5
00:00:19,590 --> 00:00:21,330
Por acá buscamos Spring Data.

6
00:00:22,560 --> 00:00:27,390
Hacemos un clic y en el menú de la izquierda tenemos Spring Data JPA.

7
00:00:27,690 --> 00:00:32,040
Acá tenemos varias implementaciones, pero la que nos importa es con JPA.

8
00:00:32,340 --> 00:00:33,120
Hacemos un clic.

9
00:00:33,540 --> 00:00:36,480
Nos vamos a la documentación y hacemos un clic.

10
00:00:36,960 --> 00:00:38,360
Documentación de referencia.

11
00:00:39,900 --> 00:00:44,970
Vámonos a trabajar con sprint data, repositorios o repositorios.

12
00:00:45,090 --> 00:00:45,790
Hacemos un click.

13
00:00:46,650 --> 00:00:47,760
Acá tenemos la interfaz.

14
00:00:47,910 --> 00:00:54,330
Si se fijan un public interfaz crud repository with generic, ya que lo podemos reutilizar para nuestras

15
00:00:54,330 --> 00:00:57,050
clases, Entity acaba en la T.

16
00:00:57,420 --> 00:01:03,060
El tipo dato de nuestra clase Identity, por ejemplo cliente, factura o lo que queramos.

17
00:01:03,210 --> 00:01:05,760
Y acá el tipo de dato de Leidy.

18
00:01:05,790 --> 00:01:09,450
Por ejemplo, un lonko, el tipo lonko bien.

19
00:01:09,540 --> 00:01:13,750
Y tenemos varios métodos que ya vienen construidos por debajo de forma automática.

20
00:01:13,830 --> 00:01:19,290
Qué podemos reutilizar, por ejemplo, en Métodos Aife para guardar una entidad tanto para guardar o

21
00:01:19,290 --> 00:01:24,660
para actualizar, dependiendo si el Heidy existe o no, si existe por debajo?

22
00:01:24,720 --> 00:01:32,610
Va a ser un apte o un merch, mientras que si es una nueva Entity sin el Heidy la va a crear.

23
00:01:32,700 --> 00:01:35,700
Va a ser un Seif y por debajo un insert enlazado.

24
00:01:35,790 --> 00:01:43,320
También tenemos métodos para buscar por Heidy fi beibi mediante el primer iqui, el Heidy find all bucar

25
00:01:43,320 --> 00:01:46,620
todos acá retornan y derable count.

26
00:01:46,830 --> 00:01:49,410
El método de lít que borra una entity.

27
00:01:49,470 --> 00:01:54,360
También tenemos de vi heidy borrar por Heidy y le pasamos el Heidy.

28
00:01:54,480 --> 00:02:00,960
En fin, un montón de métodos típicos para implementar un CRUD tal como lo hicimos anteriormente, pero

29
00:02:00,960 --> 00:02:03,780
acá de forma completamente automatizada.

30
00:02:03,810 --> 00:02:06,810
Pero bien me van a preguntar pero profesor, esto es una interfaz?

31
00:02:06,870 --> 00:02:07,860
Cómo se implementa?

32
00:02:07,920 --> 00:02:14,460
Bueno, es automático, es una interfaz de Spring Data JPA y está todo implementado por detrás de escena.

33
00:02:14,580 --> 00:02:19,140
Nosotros simplemente damos el esqueleto de este interfaz y por debajo se construye.

34
00:02:19,230 --> 00:02:24,870
Estas consultas y se genera la implementación de forma automática para tothom métodos.

35
00:02:24,990 --> 00:02:30,030
Pero también me podrían preguntar Pero qué pasa con nuestras consultas personalizadas?

36
00:02:30,090 --> 00:02:33,230
Queremos realizar una consulta que no es propia del cruz.

37
00:02:33,270 --> 00:02:39,810
Por ejemplo, buscar por nombre, buscar por correo, consulta que tengan huer por ejemplo de otros

38
00:02:39,810 --> 00:02:41,550
atributos distintos Leidy.

39
00:02:41,670 --> 00:02:48,140
Bueno, eso también lo podemos implementar y tenemos dos formas la primera utilizando la anotación query.

40
00:02:48,210 --> 00:02:48,780
Vamos a ver.

41
00:02:48,870 --> 00:02:50,550
Vámonos un poco más arriba.

42
00:02:51,830 --> 00:02:55,010
Por acá buscamos usando querí la notación country.

43
00:02:55,370 --> 00:02:57,980
Acá la tenemos en JPA Repository.

44
00:02:58,880 --> 00:03:00,590
Por acá tenemos usando CREDI.

45
00:03:00,920 --> 00:03:01,700
Hacemos un clic.

46
00:03:01,940 --> 00:03:08,620
Acá tenemos un ejemplo implementamos un método en nuestra interfaz que hereda de Cruchot Repository

47
00:03:08,690 --> 00:03:13,180
puede heredar de Crude Repository o también de JPA Repository.

48
00:03:13,580 --> 00:03:20,690
La diferencia es que JPA incluye otros métodos, por ejemplo, para paginación paginación también para

49
00:03:20,780 --> 00:03:21,680
ordenamiento.

50
00:03:21,800 --> 00:03:23,450
Básicamente es esa la diferencia.

51
00:03:23,540 --> 00:03:25,280
Pero veamos el ejemplo de este método.

52
00:03:25,370 --> 00:03:32,540
Acá tenemos un fin BAII Email address buscar por correo por dirección de correo que va a retornar un

53
00:03:32,540 --> 00:03:33,590
objeto entity.

54
00:03:33,650 --> 00:03:37,250
Cualquiera en este caso usuario, pero también podría ser cliente.

55
00:03:37,550 --> 00:03:39,170
Acá tenemos la anotación query.

56
00:03:39,230 --> 00:03:41,840
Anotamos y una consulta de JPA.

57
00:03:41,960 --> 00:03:48,500
Hay que tener mucho cuidado que estas consultas son a nivel de objetos de ENTITY y no de tablas.

58
00:03:48,590 --> 00:03:53,480
Por lo tanto tenemos un SELLECK u el objeto ENTITY que retornamos.

59
00:03:53,630 --> 00:03:58,010
En este caso el usuario from user podría ser cliente.

60
00:03:58,580 --> 00:04:02,810
Le damos un nombre, un alias que estamos retornando y en el WHERE.

61
00:04:02,900 --> 00:04:09,230
Bueno, preguntamos que el atributo email address de la clase Entity sea igual a un parámetro, a un

62
00:04:09,230 --> 00:04:09,650
valor.

63
00:04:09,890 --> 00:04:13,070
Este parámetro lo pasamos por argumento en el método.

64
00:04:13,550 --> 00:04:20,330
Este nombre le podemos dar como queramos, por ejemplo buscar por IMEI en español y anotamos con query

65
00:04:20,750 --> 00:04:22,100
con la consulta personalizada.

66
00:04:22,280 --> 00:04:26,600
Acá tenemos otro ejemplo usando huer like muy parecido también.

67
00:04:26,840 --> 00:04:27,770
Volvamos Barria.

68
00:04:30,410 --> 00:04:36,980
Otra forma, aparte del query de la anotación query, podemos utilizar nombres de método para nuestros

69
00:04:36,980 --> 00:04:37,280
query.

70
00:04:37,520 --> 00:04:39,100
Acá tenemos query métodos.

71
00:04:40,430 --> 00:04:47,600
Básicamente son nombre de método concierta no me clausura que funciona bajo una convención de nombres

72
00:04:47,630 --> 00:04:48,530
que tenemos que respetar.

73
00:04:48,590 --> 00:04:55,190
Por ejemplo, Finn es para implementar una consulta con Huer Fight Boy y Mail Adres.

74
00:04:55,490 --> 00:05:03,020
Por lo tanto, el fin y el VIH son palabras reservadas y acá iría nuestro nombre de atributo comenzando

75
00:05:03,020 --> 00:05:03,620
con mayúscula.

76
00:05:03,740 --> 00:05:10,370
Por ejemplo, el atributo email address and acá tenemos el operador and del where last name.

77
00:05:11,150 --> 00:05:14,150
También podremos implementar or en vez de ant llega.

78
00:05:14,150 --> 00:05:17,330
Tenemos otro atributo el apellido y pasamos los dos.

79
00:05:17,840 --> 00:05:20,360
Entonces por debajo va a ser un select.

80
00:05:20,480 --> 00:05:28,460
Acá tenemos el ejemplo al objeto y user nuestro Entity Huer cuando el atributo email address sea igual

81
00:05:28,460 --> 00:05:33,920
a un valor y además el apellido también sea igual a otro parámetros que estamos pasando.

82
00:05:34,550 --> 00:05:36,470
Eso sería a través del nombre método.

83
00:05:36,600 --> 00:05:39,250
Entonces palabras clave find y el pie.

84
00:05:40,100 --> 00:05:42,050
Los atributos y separamos con ant.

85
00:05:42,350 --> 00:05:45,980
Hoy podemos implementar nuestro query a través del nombre del método.

86
00:05:46,130 --> 00:05:49,850
También tenemos otras palabras reservadas más abajo.

87
00:05:49,850 --> 00:05:58,820
Tenemos varios ejemplos la palabra reservada y cómo se traduce a una consulta JPA JPA Query Language.

88
00:05:59,370 --> 00:06:00,470
Ahora tenemos CELAM.

89
00:06:00,590 --> 00:06:05,630
Entonces fin voy apellido y primer nombre and Ferney.

90
00:06:06,080 --> 00:06:08,230
Entonces por detrás de escena sería un huer.

91
00:06:08,490 --> 00:06:11,540
El nombre del objeto o del alias de la consulta?

92
00:06:11,660 --> 00:06:15,460
El atributo igual al parámetro y aunt.

93
00:06:15,950 --> 00:06:17,510
El segundo atributo.

94
00:06:17,600 --> 00:06:20,510
En este caso el nombre igual al parámetro.

95
00:06:20,690 --> 00:06:28,130
Acá tenemos con OHR en vez de ADT usamos por acá tenemos diferentes ejemplos buscar obtener por primer

96
00:06:28,130 --> 00:06:37,460
nombre between para fechas entre rangos menor qué menor o igual qué mayor, qué mayor o igual qué?

97
00:06:38,090 --> 00:06:41,300
Simplemente se agrega la palabra reservada que tenemos acá.

98
00:06:41,510 --> 00:06:44,540
En fin, un montón de ejemplos pueden profundizar.

99
00:06:44,630 --> 00:06:47,090
Ver esta documentación es bastante simple.

100
00:06:47,180 --> 00:06:53,240
Trabajar con crup repository viene ya varios métodos predefinidos que lo podemos utilizar y además podemos

101
00:06:53,240 --> 00:06:59,270
implementar nuestros propios métodos utilizando la anotación query personalizar la consulta o bien a

102
00:06:59,270 --> 00:07:05,990
través del nombre método siguiendo el estándar una nomenclatura por convención de nombre con palabras

103
00:07:05,990 --> 00:07:11,600
clave, por ejemplo el fin, el voy y el listado de palabras clave que hemos visto.

104
00:07:11,750 --> 00:07:18,590
Bien, vamos a modificar nuestro proyecto, vamos a abrir nuestro package Daewoo Models.

105
00:07:18,650 --> 00:07:24,920
Dado lo primero, vamos a eliminar cliente dado simplemente porque la idea es modificar nuestra interfaz

106
00:07:25,100 --> 00:07:31,430
y cliente dado, aunque podríamos crear otra, pero para el ejemplo del curso vamos a utilizar esta

107
00:07:31,430 --> 00:07:32,840
misma y cliente dado.

108
00:07:33,620 --> 00:07:35,300
Simplemente quitamos esto.

109
00:07:35,570 --> 00:07:36,320
Lo eliminamos.

110
00:07:38,060 --> 00:07:44,870
Ok, vamos a quitarte estos métodos porque, como ya he explicado, vienen implementado por detrás.

111
00:07:45,290 --> 00:07:50,210
Entonces la idea de convertir esta interfaz en nuestro CRUD repositorio,

112
00:07:53,750 --> 00:07:56,390
heredamos stents de CRUD repositorio.

113
00:07:56,600 --> 00:07:58,100
Vamos a importar.

114
00:07:59,000 --> 00:07:59,520
Ven acá.

115
00:07:59,540 --> 00:08:03,280
Tenés que indicar mediante el Generic el tipo de dato de nuestra clase entity.

116
00:08:03,380 --> 00:08:11,930
Por lo tanto, como primer parámetro en este generic íria cliente koma y como segundo el tipo de Leydi

117
00:08:12,080 --> 00:08:13,510
nuestra llave loc@.

118
00:08:13,790 --> 00:08:18,920
Por ejemplo, si nos vamos a cliente, vemos que el tipo es lonco de la llave primaria.

119
00:08:19,040 --> 00:08:25,880
Entonces el segundo Generic sería lonko, el primero en nombre de la clase Entity en la cual vamos a

120
00:08:25,880 --> 00:08:27,460
implementar nuestro crup.

121
00:08:28,720 --> 00:08:32,650
Bien, el list@ esto lo podemos quitar de que viene por debajo implementado.

122
00:08:34,860 --> 00:08:40,950
Vamos a guardar bien en la clase servis aparecen algunos errores que tenemos que corregir, como por

123
00:08:40,950 --> 00:08:44,690
ejemplo el fin al aún literales.

124
00:08:44,850 --> 00:08:46,090
Y acá lo tenemos como list@.

125
00:08:46,560 --> 00:08:54,720
Entonces la solución sería bueno hacer un cast, convertir nuestro trave del club repository del método

126
00:08:54,720 --> 00:08:57,120
Find All aún list de cliente.

127
00:08:58,590 --> 00:09:00,810
Simplemente lo que hice fue en el error.

128
00:09:01,470 --> 00:09:04,680
Me paro sobre y coloco agregar cast.

129
00:09:04,830 --> 00:09:07,170
O también lo podemos hacer a mano si da lo mismo.

130
00:09:07,720 --> 00:09:09,330
Bien, eso sería una parte.

131
00:09:09,450 --> 00:09:12,990
Lo segundo es en el método Find Wan.

132
00:09:13,110 --> 00:09:18,770
En el ejemplo anterior, nuestro cliente dado lo implementamos como Find Wan, pero acá se llama Find.

133
00:09:18,960 --> 00:09:19,690
Voy a ir.

134
00:09:20,530 --> 00:09:21,960
Voy a ir.

135
00:09:22,530 --> 00:09:25,350
Pero este método retorna un optional.

136
00:09:25,500 --> 00:09:26,840
Un opcional de cliente.

137
00:09:27,810 --> 00:09:28,530
Lo que hace es opcional.

138
00:09:28,560 --> 00:09:32,190
Básicamente es envolver el resultado de la consulta.

139
00:09:32,280 --> 00:09:38,160
Por ejemplo, acá tenemos diferentes métodos obtener el cliente lo más simple para obtener el cliente

140
00:09:38,430 --> 00:09:40,050
o obtener el cliente.

141
00:09:40,170 --> 00:09:44,250
Y si no lo encuentra or ells retornar un nuevo cliente.

142
00:09:44,340 --> 00:09:48,540
Crear una nueva instancia con el operador new o retornar un null.

143
00:09:48,570 --> 00:09:49,290
Por ejemplo.

144
00:09:49,380 --> 00:09:52,890
Acá tenemos or else through lanzar una excepción.

145
00:09:53,010 --> 00:09:54,990
Si no lo encuentra, que lance una excepción.

146
00:09:55,050 --> 00:09:57,210
En fin, varios métodos interesantes.

147
00:09:57,300 --> 00:09:59,860
Podemos preguntar si es empty se está vacío.

148
00:10:00,030 --> 00:10:05,640
En fin, muchas cosas vamos a utilizar el más típico, el nyet o bien el or else.

149
00:10:05,760 --> 00:10:07,500
Para nuestro caso vamos a usar el hort.

150
00:10:07,610 --> 00:10:16,350
Él se lo encuentra, retorna el objeto cliente, de lo contrario va a retornar null y lo tenemos implementado.

151
00:10:16,500 --> 00:10:18,960
Bueno y acá en vez de Delight es Delight.

152
00:10:19,050 --> 00:10:23,520
Voy Heidy agregamos el voy a ahí di en Croods Repository.

153
00:10:23,790 --> 00:10:26,040
Eso serían todos los cambios se fijan, son mínimos.

154
00:10:26,430 --> 00:10:32,130
Guardamos nuestra clase cliente servis simplement vámonos a la interfaz.

155
00:10:32,340 --> 00:10:34,050
Y quién te ha dado cruz repository?

156
00:10:34,500 --> 00:10:35,010
Se fijan?

157
00:10:35,130 --> 00:10:39,810
No está anotado con repository ni con component con ninguna anotación.

158
00:10:39,900 --> 00:10:42,000
Sin embargo acá lo estamos inyectando.

159
00:10:42,150 --> 00:10:46,050
Estamos inyectando con octubres nuestra interfaz CRUD repositorio.

160
00:10:46,530 --> 00:10:53,520
Bueno, y es porque es una interfaz especial que hereda de repository por debajo ya es un componente

161
00:10:53,520 --> 00:10:59,160
es Brink no necesario tener que indicarlo con anotaciones, simplemente se escribe la interfaz y se

162
00:10:59,160 --> 00:11:02,400
hereda de CRUD repositorio nada más en el cuerpo.

163
00:11:02,430 --> 00:11:08,220
Bueno, podríamos tener otros métodos, como había explicado con consultas personalizadas, con query

164
00:11:08,340 --> 00:11:10,740
o a través del nombre, método o como queramos.

165
00:11:10,950 --> 00:11:14,250
Veamos con un control clic en Krug Repository.

166
00:11:16,320 --> 00:11:20,430
Acá tenemos el método Seif guarda una Entity, acá tenemos el método Sait.

167
00:11:20,520 --> 00:11:24,090
Al fin Baily retorna un optional.

168
00:11:24,210 --> 00:11:30,780
En vez de retornar la entidad va a retornar el optional que encapsula o envuelve nuestro Entity con

169
00:11:30,780 --> 00:11:36,510
métodos para manejar si viene vacío, si queremos lanzar una excepción con repasito o retornar otra

170
00:11:36,510 --> 00:11:43,080
cosa, un null o otra instancia de cliente o de nuestro objeto Entity o si es presente, se fijan un

171
00:11:43,080 --> 00:11:46,230
montón de cosas que podemos manipular con el OPTIONAL.

172
00:11:46,950 --> 00:11:55,140
Esto es una característica propia de Java 8 y se implementa acá con esprintar si existe por ahí otro

173
00:11:55,140 --> 00:11:57,780
método Find Hold y derable se fijan.

174
00:11:57,810 --> 00:12:01,740
Por eso hicimos el cast no es un list, sino es un item arable.

175
00:12:02,040 --> 00:12:06,870
Pero al final si nos vamos por ejemplo a servis, hacemos un control.

176
00:12:07,050 --> 00:12:14,550
Clic en List La interfaz List es un colección hereda de la interfaz Collections de Java, pero a su

177
00:12:14,550 --> 00:12:17,400
vez Collections hereda de deraBle.

178
00:12:17,520 --> 00:12:23,280
Por lo tanto, un list también es un literales y por eso tuvimos que hacer el cast acá.

179
00:12:24,960 --> 00:12:26,430
Volvamos a Club Repository.

180
00:12:28,060 --> 00:12:36,160
En fin, tenemos varios métodos Count id, pi, Heidy que recibe el Heidy del Entity Delight a secas,

181
00:12:36,250 --> 00:12:37,750
recibe el objeto Entity.

182
00:12:37,870 --> 00:12:42,070
Podemos usar cualquiera de estas dos formas, la más típica por aili borrar.

183
00:12:42,070 --> 00:12:48,740
Todos pasamos un collection, un hite arable de varios entity o borrar todos los que existan.

184
00:12:50,050 --> 00:12:52,060
Pero bien, ahora estamos listos.

185
00:12:52,480 --> 00:12:58,720
Vamos a guardar nuestro club repository y vamos a ejecutar clic derecho.

186
00:12:59,230 --> 00:13:01,480
Ranas despren etap.

187
00:13:08,270 --> 00:13:09,830
Y funciona tal cual.

188
00:13:09,920 --> 00:13:11,090
Por lo menos el Estado.

189
00:13:11,360 --> 00:13:24,590
Vamos a crear un cliente, por ejemplo James Dow email o correo James EE. gmail.com o lo que sea una

190
00:13:24,590 --> 00:13:29,900
fecha crea cliente y lo crea perfecto.

191
00:13:30,200 --> 00:13:38,860
Vamos a editar por ejemplo James Brought crear cliente bueno o actualizar James Pruit.

192
00:13:38,990 --> 00:13:39,580
Perfecto.

193
00:13:40,100 --> 00:13:41,630
Lo cambia sin ningún problema.

194
00:13:41,870 --> 00:13:42,950
Lo vamos a eliminar.

195
00:13:43,790 --> 00:13:50,660
Estás seguro de que ese eliminar aceptar y lo borra y ya tenemos nuestro CRUD Repository implementado

196
00:13:50,750 --> 00:13:51,530
en nuestro proyecto.

197
00:13:51,650 --> 00:13:58,190
Una forma mucho más simple, mucho más fácil de trabajar con JPA heredando de Group Repository o JPA

198
00:13:58,280 --> 00:13:58,880
Repository.

199
00:13:59,030 --> 00:14:00,080
Por ahora nada más.

200
00:14:00,200 --> 00:14:01,100
Hasta la próxima.
