1 00:00:00,000 --> 00:00:01,480 Repasito. Vamos a acabar 2 00:00:01,480 --> 00:00:02,700 el repasito. 3 00:00:04,080 --> 00:00:05,679 Venga. Bueno, pues 4 00:00:05,679 --> 00:00:07,679 las anotaciones 5 00:00:08,300 --> 00:00:09,679 que nos interesan, pues ya están. 6 00:00:10,179 --> 00:00:11,960 Esto era lo más retorcido, en realidad. 7 00:00:12,640 --> 00:00:13,480 Una clave ajena 8 00:00:13,480 --> 00:00:15,599 que tenía una clave primaria 9 00:00:15,599 --> 00:00:17,500 que es compuesta y entonces la sacamos 10 00:00:17,500 --> 00:00:19,660 a lo más retorcido. Por lo demás 11 00:00:19,660 --> 00:00:21,480 ya está. Y ahora ya 12 00:00:21,480 --> 00:00:23,539 aquí, como no tenemos a Spring, 13 00:00:24,940 --> 00:00:25,160 que 14 00:00:25,160 --> 00:00:27,960 nos lo haga todo, que es el sueño 15 00:00:27,960 --> 00:00:28,800 de Ana de toda la vida. 16 00:00:28,800 --> 00:00:30,980 un botoncito y pin, todo hecho 17 00:00:30,980 --> 00:00:32,340 pero entonces tú no vas a tener trabajo 18 00:00:32,340 --> 00:00:34,340 si hay un botoncito, pin y todo hecho 19 00:00:34,340 --> 00:00:34,780 yo también 20 00:00:34,780 --> 00:00:37,600 cuando digo tú, tú ni nadie 21 00:00:37,600 --> 00:00:39,700 no nos interesa tanto 22 00:00:39,700 --> 00:00:45,789 pero no tiene nada que ver 23 00:00:45,789 --> 00:00:48,090 la clave compuesta es para la tabla intermedia 24 00:00:48,090 --> 00:00:50,070 claro, la clave compuesta es para la tabla intermedia 25 00:00:50,070 --> 00:00:51,149 que tiene los dos one to many 26 00:00:51,149 --> 00:00:53,810 los dos many to one, one to many 27 00:00:53,810 --> 00:00:55,210 lo que no entra es el many to many 28 00:00:55,210 --> 00:00:57,429 que es precisamente cuando no hay 29 00:00:57,429 --> 00:01:09,769 Claro, la tabla intermedia 30 00:01:09,769 --> 00:01:11,930 si hay una relación de muchos a muchos, la tabla siempre 31 00:01:11,930 --> 00:01:13,590 tiene que estar, siempre, porque 32 00:01:13,590 --> 00:01:15,969 el modelo relacional no puede funcionar a muchos 33 00:01:15,969 --> 00:01:18,030 sin tabla, entonces, eso lo puedes 34 00:01:18,030 --> 00:01:19,989 mapear con entidad intermedia o no 35 00:01:19,989 --> 00:01:22,230 si lo mapeas con entidad intermedia 36 00:01:22,230 --> 00:01:23,469 entonces ahí no hay many to many 37 00:01:23,469 --> 00:01:24,790 hay dos one to many 38 00:01:24,790 --> 00:01:27,109 y ese es lo que hemos usado 39 00:01:27,109 --> 00:01:28,930 nosotros y en ese caso es cuando está 40 00:01:28,930 --> 00:01:30,349 la clave compuesta y todo eso 41 00:01:30,349 --> 00:01:32,890 entonces, si no hay entidad 42 00:01:32,890 --> 00:01:34,390 intermedia, que tabla sí 43 00:01:34,390 --> 00:01:37,090 pero entidad no, porque no hay 44 00:01:37,090 --> 00:01:38,790 campos 45 00:01:38,790 --> 00:01:41,090 adicionales, si no hay campos adicionales 46 00:01:41,090 --> 00:01:43,189 no tiene por qué haber entidad intermedia 47 00:01:43,189 --> 00:01:45,109 dos one to many, perdón 48 00:01:45,109 --> 00:01:46,969 esta una lista de esta 49 00:01:46,969 --> 00:01:48,890 y esta una lista de esta, entonces ahí es donde 50 00:01:48,890 --> 00:01:50,650 está el many to many, vale 51 00:01:50,650 --> 00:01:52,790 pero eso como tal, como ejemplo 52 00:01:52,790 --> 00:01:55,069 no lo hemos visto en un proyecto que lo hayamos graficado 53 00:01:55,069 --> 00:01:57,010 por eso la anotación many to many 54 00:01:57,010 --> 00:01:58,430 que es la que se usa en ese caso 55 00:01:58,430 --> 00:02:01,049 cuando no usamos la entidad intermedia 56 00:02:01,049 --> 00:02:02,329 esa es la que no 57 00:02:02,329 --> 00:02:04,170 voy a poner, ¿vale? 58 00:02:04,329 --> 00:02:05,030 eso es la que no 59 00:02:05,030 --> 00:02:09,210 que en realidad hace la aplicación mucho más sencilla 60 00:02:09,210 --> 00:02:10,909 hay el único matiz 61 00:02:10,909 --> 00:02:13,210 porque tienes dos listas o ya está 62 00:02:13,210 --> 00:02:14,650 hay el único matiz 63 00:02:14,650 --> 00:02:16,689 que hay que tener en cuenta es lo que le comentaba él antes 64 00:02:16,689 --> 00:02:18,930 que en la many to many tú puedes elegir 65 00:02:18,930 --> 00:02:20,289 he quitado ya este 66 00:02:20,289 --> 00:02:22,770 lo que hemos comentado antes 67 00:02:22,789 --> 00:02:25,349 En la many to many tú puedes elegir 68 00:02:25,349 --> 00:02:26,349 Lo que estábamos diciendo 69 00:02:26,349 --> 00:02:29,270 ¿Dónde pones esto? 70 00:02:29,909 --> 00:02:31,770 Y esa es la que conviertes 71 00:02:31,770 --> 00:02:32,509 En propietaria 72 00:02:32,509 --> 00:02:34,849 Y entonces tienes que ser consciente de eso 73 00:02:34,849 --> 00:02:37,250 Para que luego si no te actualiza desde el otro sitio 74 00:02:37,250 --> 00:02:38,270 Que entiendas por qué es 75 00:02:38,270 --> 00:02:39,789 ¿Vale? Eso es lo único 76 00:02:39,789 --> 00:02:45,530 No, un jointable lo pones solo en un sitio 77 00:02:45,530 --> 00:02:46,610 En el otro pones el mape 78 00:02:46,610 --> 00:02:48,430 Los dos sitios 79 00:02:48,430 --> 00:02:56,840 Bueno, pues la anotación 80 00:02:56,840 --> 00:02:58,740 many to many, pero ¿qué hacéis? 81 00:02:59,780 --> 00:03:00,840 Pues el panorama 82 00:03:00,840 --> 00:03:06,340 No, ni quiero verlo, me lo tapa 83 00:03:06,340 --> 00:03:08,300 el monitor y no quiero verlo porque 84 00:03:08,300 --> 00:03:10,840 Anda, se ha sacado una 85 00:03:10,840 --> 00:03:11,719 No, no, ha sacado 86 00:03:11,719 --> 00:03:14,860 O sea, has hecho así y de una palmera 87 00:03:14,860 --> 00:03:16,060 has convertido en todo eso 88 00:03:16,060 --> 00:03:21,099 si es capaz de hacer eso 89 00:03:21,099 --> 00:03:22,560 deja el ciclo porque no te hace ninguna falta 90 00:03:22,560 --> 00:03:24,039 bueno 91 00:03:24,039 --> 00:03:27,780 entonces, y además se ha quedado grabado 92 00:03:27,780 --> 00:03:30,479 las anotaciones ya están 93 00:03:30,479 --> 00:03:32,780 las que entran y lo que vamos a ver y más o menos 94 00:03:32,780 --> 00:03:34,020 todo entendido, ya está 95 00:03:34,020 --> 00:03:36,020 ahora, ¿qué tenemos que hacer aquí? 96 00:03:36,580 --> 00:03:38,360 pues como no tenemos a Spring 97 00:03:38,360 --> 00:03:39,500 que es el del botoncito 98 00:03:39,500 --> 00:03:42,500 que pum, ya tengo el repositorio 99 00:03:42,500 --> 00:03:44,400 tengo prácticamente todo hecho, lo tengo todo 100 00:03:44,400 --> 00:03:45,939 pues hacemos 101 00:03:45,939 --> 00:03:48,520 aquí en una arquitectura de esta 102 00:03:48,520 --> 00:03:50,900 sí que habría un DAO hecho por nosotros 103 00:03:50,900 --> 00:03:52,659 pero aún así ya 104 00:03:52,659 --> 00:03:56,439 respecto a JDBC 105 00:03:56,439 --> 00:03:58,879 esta primera capa nos facilita 106 00:03:58,879 --> 00:04:00,599 las cosas un montón, ¿por qué? 107 00:04:00,939 --> 00:04:02,800 por el mapeo objeto relacional 108 00:04:02,800 --> 00:04:04,439 que es la ventaja del JPA 109 00:04:04,439 --> 00:04:06,099 el mapeo objeto relacional 110 00:04:06,099 --> 00:04:08,740 ya está, pues entonces nuestro DAO 111 00:04:08,740 --> 00:04:10,680 nuestro find all 112 00:04:10,680 --> 00:04:12,539 que en el otro caso era 113 00:04:12,539 --> 00:04:14,639 un verdadero galimatías por el 114 00:04:14,639 --> 00:04:16,660 mapeo, ResultSet 115 00:04:16,660 --> 00:04:18,699 a objeto, aquí se 116 00:04:18,699 --> 00:04:19,920 queda en un 117 00:04:19,920 --> 00:04:22,699 query de JPQL y ya está. 118 00:04:23,699 --> 00:04:24,459 ¿Vale? Entonces aquí 119 00:04:24,459 --> 00:04:26,579 he escrito esto para que no se nos olvide. 120 00:04:26,720 --> 00:04:28,920 Entonces, la query, JPQL, 121 00:04:29,019 --> 00:04:30,220 lo mismo. No 122 00:04:30,220 --> 00:04:32,579 sabemos de qué va el JPQL, 123 00:04:32,699 --> 00:04:34,060 pero lo conocemos en profundidad. 124 00:04:35,120 --> 00:04:36,639 Lo que sí que sabemos más o menos 125 00:04:36,639 --> 00:04:38,160 de memoria, que eso sí es, 126 00:04:38,759 --> 00:04:40,399 pues, ¡cállate el ruido! 127 00:04:41,259 --> 00:04:42,680 Lo que sí que sabemos más o menos 128 00:04:42,680 --> 00:04:44,420 de memoria es hacer 129 00:04:44,420 --> 00:04:47,000 select de entidades enteras 130 00:04:47,000 --> 00:04:48,180 de entidades enteras 131 00:04:48,180 --> 00:04:49,160 pues olvidados del list 132 00:04:49,160 --> 00:04:52,240 select de la entidad entera 133 00:04:52,240 --> 00:04:53,639 ¿vale? 134 00:04:53,639 --> 00:04:54,180 eso sí 135 00:04:54,180 --> 00:04:58,040 dices que no pueden ser list 136 00:04:58,040 --> 00:04:59,180 y luego devuelves una list 137 00:04:59,180 --> 00:05:02,420 ¿cómo que no pueden ser list? 138 00:05:02,680 --> 00:05:03,939 cuando he dicho que no pueden ser list 139 00:05:03,939 --> 00:05:05,639 o sea este findol es el del DAO 140 00:05:05,639 --> 00:05:07,079 que me devuelve muchas sedes 141 00:05:07,079 --> 00:05:08,019 porque es un findol 142 00:05:08,019 --> 00:05:09,079 que tiene que ser set 143 00:05:09,079 --> 00:05:11,839 no, pero ¿por qué tiene que ser set esto? 144 00:05:12,379 --> 00:05:13,860 o sea no, tú dices que cuando haces 145 00:05:13,860 --> 00:05:18,939 Sí, pero es que leéis antes de tiempo 146 00:05:18,939 --> 00:05:20,420 os he dicho yo que leáis 147 00:05:20,420 --> 00:05:25,060 Pues lo he puesto aquí para que no se me olvide 148 00:05:25,060 --> 00:05:26,779 lo que tengo que decir ahora 149 00:05:26,779 --> 00:05:29,240 pero no he dicho a nadie que lea estos comentarios 150 00:05:29,240 --> 00:05:30,480 Vale 151 00:05:30,480 --> 00:05:37,839 El último día de clase me cargo la pizarra 152 00:05:37,839 --> 00:05:38,259 Vale 153 00:05:38,259 --> 00:05:43,079 Entonces, estábamos conceptualmente todavía en un paso anterior 154 00:05:43,079 --> 00:05:44,939 y es que el find all se queda muy fácil 155 00:05:44,939 --> 00:05:46,939 porque la JPQL 156 00:05:46,939 --> 00:05:49,339 ya me da el objeto entero 157 00:05:49,339 --> 00:05:50,740 no tengo que hacer las resources 158 00:05:50,740 --> 00:05:53,040 de ahí mapear y estábamos diciendo 159 00:05:53,040 --> 00:05:54,980 de JPQL pues 160 00:05:54,980 --> 00:05:57,000 uno puede hacer millones de consultas 161 00:05:57,000 --> 00:05:57,839 super chachis 162 00:05:57,839 --> 00:06:01,079 pero pues necesitamos a alguien que nos ayude 163 00:06:01,079 --> 00:06:02,300 ¿no? como 164 00:06:02,300 --> 00:06:04,079 Gemini o GPT o alguien 165 00:06:04,079 --> 00:06:06,379 pero hombre lo básico si sabemos 166 00:06:06,379 --> 00:06:09,100 que es coger un objeto enterito 167 00:06:09,100 --> 00:06:10,379 ¿vale? 168 00:06:10,379 --> 00:06:12,319 un objeto enterito, que recordad que la alias 169 00:06:12,319 --> 00:06:14,319 es obligatoria, recoger 170 00:06:14,319 --> 00:06:15,339 un objeto enterito 171 00:06:15,339 --> 00:06:18,379 con un web, la condición 172 00:06:18,379 --> 00:06:18,860 que sea 173 00:06:18,860 --> 00:06:22,220 y que ocurre, que si ese 174 00:06:22,220 --> 00:06:22,779 objeto 175 00:06:22,779 --> 00:06:26,540 como en este caso que estoy cogiendo la sede 176 00:06:26,540 --> 00:06:28,240 si ese objeto tiene 177 00:06:28,240 --> 00:06:29,560 cosas colgando 178 00:06:29,560 --> 00:06:31,459 y yo las quiero 179 00:06:31,459 --> 00:06:33,759 tengo que hacer el left join 180 00:06:33,759 --> 00:06:36,319 porque si no hago el left join es casi 181 00:06:36,319 --> 00:06:38,360 de las poquitas cosas que si se nos han quedado 182 00:06:38,360 --> 00:06:38,879 en la cabeza 183 00:06:38,879 --> 00:06:40,819 vale, entonces 184 00:06:40,819 --> 00:06:42,459 si yo hiciera aquí 185 00:06:42,459 --> 00:06:44,540 aquí, gracias 186 00:06:44,540 --> 00:06:46,759 si yo quito estos left join 187 00:06:46,759 --> 00:06:50,089 este objeto 188 00:06:50,089 --> 00:06:52,490 ese que me devuelve en el let result list 189 00:06:52,490 --> 00:06:54,170 no tendría los 190 00:06:54,170 --> 00:06:55,529 departamentos y los proyectos 191 00:06:55,529 --> 00:06:56,589 claro 192 00:06:56,589 --> 00:07:04,129 si, si, si, claro, vale 193 00:07:04,129 --> 00:07:05,050 entonces 194 00:07:05,050 --> 00:07:08,189 si yo quiero 195 00:07:08,189 --> 00:07:10,069 que los cargue todos, aquí hay dos 196 00:07:10,069 --> 00:07:12,129 cosas. Podría 197 00:07:12,129 --> 00:07:14,089 ser el left join sin el fetch y con el 198 00:07:14,089 --> 00:07:15,029 fetch. Vale. 199 00:07:16,490 --> 00:07:17,870 En el left join, si yo 200 00:07:17,870 --> 00:07:19,990 no pongo el fetch, es simplemente 201 00:07:19,990 --> 00:07:22,009 no me lo carga, porque yo 202 00:07:22,009 --> 00:07:24,129 quiera usar los campitos 203 00:07:24,129 --> 00:07:25,910 de aquí para los web, 204 00:07:26,050 --> 00:07:27,870 para ponerlo aquí dentro de la JPQL. 205 00:07:28,529 --> 00:07:30,370 Entonces, si yo aquí dentro de la JPQL 206 00:07:30,370 --> 00:07:32,189 quiero poner también 207 00:07:32,189 --> 00:07:33,829 pues campos de aquí 208 00:07:33,829 --> 00:07:35,509 para la búsqueda, para lo que sea, 209 00:07:36,110 --> 00:07:38,089 pues hago el left join para incluir 210 00:07:38,089 --> 00:07:39,870 todo esto. Pero 211 00:07:39,870 --> 00:07:41,790 si además quiero que me lo cargue 212 00:07:41,790 --> 00:07:43,829 en el resultado, si además quiero que 213 00:07:43,829 --> 00:07:45,490 me lo cargue y este 214 00:07:45,490 --> 00:07:47,930 es un list de sedes, tenga la sede 215 00:07:47,930 --> 00:07:49,870 con todo lo que le cuelga 216 00:07:49,870 --> 00:07:51,750 pues si además quiero eso 217 00:07:51,750 --> 00:07:53,930 era por 218 00:07:53,930 --> 00:07:55,829 lo que poníamos el fetch, porque si no 219 00:07:55,829 --> 00:07:57,610 no, entonces me fuerza la carga 220 00:07:57,610 --> 00:07:59,889 independientemente del lazy, del eager, de lo 221 00:07:59,889 --> 00:08:01,629 que sea, ¿vale? 222 00:08:04,870 --> 00:08:05,709 Y ya está 223 00:08:05,709 --> 00:08:07,290 eso es más o menos lo básico de 224 00:08:07,290 --> 00:08:09,350 JPQL que tenemos en la cabeza 225 00:08:09,350 --> 00:08:11,569 que luego queremos hacer otras cosas 226 00:08:11,569 --> 00:08:13,009 podemos hacer mil cosas, por ejemplo 227 00:08:13,009 --> 00:08:15,569 pues vimos, cuando yo quiero coger 228 00:08:15,569 --> 00:08:17,129 no solamente una entidad 229 00:08:17,129 --> 00:08:19,110 sino campos sueltos de muchos sitios 230 00:08:19,110 --> 00:08:20,230 pues ahí 231 00:08:20,230 --> 00:08:23,610 la entidad de retorno 232 00:08:23,610 --> 00:08:25,350 no era 233 00:08:25,350 --> 00:08:26,850 sede.class o la que fuera 234 00:08:26,850 --> 00:08:28,829 sino la lista de object 235 00:08:28,829 --> 00:08:31,490 ¿recordáis? una lista de objetos 236 00:08:31,490 --> 00:08:33,389 object, que está en uno de los ejemplos 237 00:08:33,389 --> 00:08:33,909 subidos 238 00:08:33,909 --> 00:08:37,250 ese es un caso más retorcido 239 00:08:37,250 --> 00:08:39,289 pero bueno, y luego yo ya esa lista de 240 00:08:39,289 --> 00:08:41,049 objetos, la mapearía 241 00:08:41,049 --> 00:08:41,909 donde yo quisiera 242 00:08:41,909 --> 00:08:54,070 entonces el find all 243 00:08:54,070 --> 00:08:56,970 aún teniendo lo que hacer a mano, porque esto no es sprint 244 00:08:56,970 --> 00:08:58,850 entonces como no es sprint, lo tengo que hacer a mano 245 00:08:58,850 --> 00:09:00,730 pues es mucho más sencillo 246 00:09:00,730 --> 00:09:02,750 porque ya la parte del mapeo se queda hecha 247 00:09:02,750 --> 00:09:05,230 y ya está, y aquí yo me saco todas las sedes 248 00:09:05,230 --> 00:09:06,590 y ya lo tendría, dime 249 00:09:06,590 --> 00:09:11,470 Sí 250 00:09:11,470 --> 00:09:13,370 Sí, porque está en Fetch 251 00:09:13,370 --> 00:09:14,730 ¿Vale? 252 00:09:15,809 --> 00:09:16,409 Vale 253 00:09:16,409 --> 00:09:20,289 Que arrastra 254 00:09:20,289 --> 00:09:22,250 O sea, no solamente 255 00:09:22,250 --> 00:09:23,970 Únemelo para las consultas 256 00:09:23,970 --> 00:09:24,710 Sino además 257 00:09:24,710 --> 00:09:27,590 Fetch no es 258 00:09:27,590 --> 00:09:29,750 Pégamelo 259 00:09:29,750 --> 00:09:31,190 Póngamelo encima, no es algo así 260 00:09:31,190 --> 00:09:34,169 Ah, sí 261 00:09:34,169 --> 00:09:36,049 Estaba pensando que te referías a eso 262 00:09:36,049 --> 00:09:38,029 Depende 263 00:09:38,029 --> 00:09:39,490 Del Lazy 264 00:09:39,490 --> 00:09:40,549 O del líder 265 00:09:40,549 --> 00:09:47,409 Pero a la sede 266 00:09:47,409 --> 00:09:48,970 Pero a la sede 267 00:09:48,970 --> 00:09:51,950 Luego cuando cargan los departamentos que cuelgan de la sede 268 00:09:51,950 --> 00:09:54,009 Pues lo que carga de él 269 00:09:54,009 --> 00:09:54,590 Dependerá 270 00:09:54,590 --> 00:09:57,710 Pero bueno, de todas formas 271 00:09:57,710 --> 00:09:59,129 Aquí hay un montón de 272 00:09:59,129 --> 00:10:02,049 Casuísticas extrañas 273 00:10:02,049 --> 00:10:04,230 Que realmente es muy complicado 274 00:10:04,230 --> 00:10:05,370 Tenerlas en la cabeza 275 00:10:05,370 --> 00:10:08,009 Más o menos sabemos 276 00:10:08,009 --> 00:10:10,710 pues qué significa el lazy, qué significa 277 00:10:10,710 --> 00:10:12,169 el ledger in face, más o menos lo sabemos 278 00:10:12,169 --> 00:10:14,250 luego cuando uno hace algo en concreto 279 00:10:14,250 --> 00:10:16,730 luego tiene que comprobar, ah, sí me lo ha hecho bien 280 00:10:16,730 --> 00:10:18,690 no me lo ha hecho bien, ah, pues voy a cambiarle 281 00:10:18,690 --> 00:10:20,629 esto, que son muchas casuísticas 282 00:10:20,629 --> 00:10:21,870 que no las tiene uno en la cabeza 283 00:10:21,870 --> 00:10:24,669 todas de, para que me funcione así 284 00:10:24,669 --> 00:10:26,590 no tengo que hacer así, más o menos las ideas 285 00:10:26,590 --> 00:10:27,850 ¿vale? 286 00:10:29,110 --> 00:10:30,830 entonces, respondiendo a tu pregunta 287 00:10:30,830 --> 00:10:32,149 pues lo que tenga 288 00:10:32,149 --> 00:10:34,350 cada uno de los departamentos 289 00:10:34,350 --> 00:10:36,789 que cuelgan de sede, ¿qué es lo que habrá cargado? 290 00:10:36,789 --> 00:11:04,929 Pues, entiendo que eso ya viene regido por la propiedad Fetch Type. Pero se podría probar, a ver, se podría, pero recordad, recordad que ese Lazy, ese Eager, ese de ahí, si tú estás dentro del contexto de persistencia, da igual, no afecta nada. 291 00:11:04,929 --> 00:11:23,990 Porque dentro del contexto de persistencia, aunque tengas un lazy, si luego tú no pides, te lo va a cargar. El lazy significa en qué momento te lo cargo, al principio o después. Luego, en el contexto de persistencia, es que en realidad te da igual el lazy o el libre. El problema es si lo has cerrado. Y el contexto de persistencia lo cierras luego en el servicio, aquí no. 292 00:11:23,990 --> 00:11:26,169 porque bueno, esa arquitectura 293 00:11:26,169 --> 00:11:28,009 claro, aquí que es lo que 294 00:11:28,009 --> 00:11:30,509 era la arquitectura que usábamos, más o menos lo estándar 295 00:11:30,509 --> 00:11:31,590 el DAO 296 00:11:31,590 --> 00:11:34,509 no se ocupa de las transacciones 297 00:11:34,509 --> 00:11:36,289 no decide qué cosas se hacen 298 00:11:36,289 --> 00:11:38,149 juntas y qué cosas se hacen 299 00:11:38,149 --> 00:11:39,850 separadas, no lo decide 300 00:11:39,850 --> 00:11:42,330 el qué cosas se hacen 301 00:11:42,330 --> 00:11:44,529 juntas, qué consultas juntas y qué consultas 302 00:11:44,529 --> 00:11:46,570 pueden ir por libre, eso lo decide 303 00:11:46,570 --> 00:11:48,429 el caso de uso, la funcionalidad 304 00:11:48,429 --> 00:11:50,590 el requisito, el DAO te hace 305 00:11:50,590 --> 00:11:52,629 cosas atómicas, al DAO le dan 306 00:11:52,629 --> 00:11:54,570 igual las transacciones, el DAO te dice 307 00:11:54,570 --> 00:11:56,029 tú pásame 308 00:11:56,029 --> 00:11:58,309 un contexto de persistencia 309 00:11:58,309 --> 00:12:00,889 que se lo pasábamos como propiedad 310 00:12:00,889 --> 00:12:02,429 al DAO 311 00:12:02,429 --> 00:12:04,450 que está aquí por constructor 312 00:12:04,450 --> 00:12:05,429 porque esto no es Spring 313 00:12:05,429 --> 00:12:08,570 y aquí él dice 314 00:12:08,570 --> 00:12:09,370 vale, pues yo 315 00:12:09,370 --> 00:12:12,730 en este contexto de persistencia que tú me has pasado 316 00:12:12,730 --> 00:12:14,370 que no sé si antes había hecho 317 00:12:14,370 --> 00:12:15,769 mil cosas y después hará mil 318 00:12:15,769 --> 00:12:18,190 no lo sé, en este que me has pasado 319 00:12:18,190 --> 00:12:20,029 yo te hago esto, luego 320 00:12:20,029 --> 00:12:21,629 el servicio ya decide 321 00:12:21,629 --> 00:12:24,929 como ese contexto de persistencia 322 00:12:24,929 --> 00:12:26,429 cuando lo abre y cuando lo cierra 323 00:12:26,429 --> 00:12:29,269 y cuando el contexto de persistencia 324 00:12:29,269 --> 00:12:29,990 esté cerrado 325 00:12:29,990 --> 00:12:32,789 ahí es donde todo lo que tú hayas cargado 326 00:12:32,789 --> 00:12:33,370 como lazy 327 00:12:33,370 --> 00:12:35,789 es irrecuperable 328 00:12:35,789 --> 00:12:38,649 dentro del contexto de persistencia da igual 329 00:12:38,649 --> 00:12:40,389 el lazy, el eager, es que da igual 330 00:12:40,389 --> 00:12:42,889 pero bueno, vamos a lo sencillo 331 00:12:42,889 --> 00:12:43,389 entonces 332 00:12:43,389 --> 00:12:46,549 esta la entendemos, es un find all 333 00:12:46,549 --> 00:12:49,269 para devolver todas las sedes con todas sus cosas 334 00:12:49,269 --> 00:12:50,190 ya está 335 00:12:50,190 --> 00:12:51,590 Devolverla 336 00:12:51,590 --> 00:13:03,129 Hombre 337 00:13:03,129 --> 00:13:05,669 O sea, que de aquí solo 338 00:13:05,669 --> 00:13:07,409 Te cogiera 339 00:13:07,409 --> 00:13:14,320 Hombre, pues entonces 340 00:13:14,320 --> 00:13:15,740 Claro, cambiarías aquí 341 00:13:15,740 --> 00:13:17,220 Lo que obtienes 342 00:13:17,220 --> 00:13:19,299 Podrías poner comas con cosas 343 00:13:19,299 --> 00:13:22,039 Entonces claro, desde el momento en que lo que hay en el from 344 00:13:22,039 --> 00:13:24,200 Ya no es una única entidad completa 345 00:13:24,200 --> 00:13:25,500 Una única entidad completa 346 00:13:25,500 --> 00:13:27,519 Sino que tienes campos sueltos 347 00:13:27,519 --> 00:13:28,799 es cuando ya 348 00:13:28,799 --> 00:13:30,460 lo que devuelves 349 00:13:30,460 --> 00:13:32,419 se convierte en esto 350 00:13:32,419 --> 00:13:36,860 en un object.class 351 00:13:36,860 --> 00:13:38,720 en esto 352 00:13:38,720 --> 00:13:44,440 se convierte en esto 353 00:13:44,440 --> 00:13:46,539 y cada posición de este array 354 00:13:46,539 --> 00:13:49,019 es cada una de las cositas 355 00:13:49,019 --> 00:13:49,679 que estén aquí 356 00:13:49,679 --> 00:13:59,029 a ver, es que la sede 357 00:13:59,029 --> 00:14:00,470 teniendo un objeto de departamento. 358 00:14:01,190 --> 00:14:02,090 Entonces, ¿tú cómo 359 00:14:02,090 --> 00:14:03,830 fijas ahí 360 00:14:03,830 --> 00:14:07,409 pero del departamento solo consultame 361 00:14:07,409 --> 00:14:07,789 esto? 362 00:14:08,909 --> 00:14:10,549 Hombre, puedes encadenar consulta, 363 00:14:10,649 --> 00:14:14,590 pero es que 364 00:14:14,590 --> 00:14:16,490 estarías devolviendo un objeto. Entonces, ¿devolver un objeto 365 00:14:16,490 --> 00:14:18,470 a medias? ¿Eso para qué? 366 00:14:19,389 --> 00:14:19,649 Claro. 367 00:14:20,389 --> 00:14:22,309 Otra cosa sería esa, que yo quiero 368 00:14:22,309 --> 00:14:24,490 consultar un nombre, pero no un 369 00:14:24,490 --> 00:14:26,549 objeto que solo tiene el nombre. Son dos cosas 370 00:14:26,549 --> 00:14:28,649 diferentes. Hacer un select del nombre 371 00:14:28,649 --> 00:14:30,370 o hacer un select de un objeto, pero 372 00:14:30,370 --> 00:14:32,049 de ese objeto solo me interesa que rellenes el nombre. 373 00:14:32,169 --> 00:14:33,210 Eso segundo es más raro. 374 00:14:36,990 --> 00:14:38,129 Bueno, sí, pero el DTO 375 00:14:38,129 --> 00:14:40,210 en cualquier caso se llena con 376 00:14:40,210 --> 00:14:41,870 lo que te pongas aquí. 377 00:14:41,950 --> 00:14:42,169 Claro. 378 00:14:46,529 --> 00:14:47,570 Bueno, pues entonces, 379 00:14:47,809 --> 00:14:50,029 ¿qué ocurre con esta consulta? Que es por lo que viene 380 00:14:50,029 --> 00:14:51,929 esto de aquí. Entonces, 381 00:14:53,129 --> 00:14:55,590 que si ejecutáis, 382 00:14:55,590 --> 00:14:57,509 ¿vale? Si en la misma query 383 00:14:57,509 --> 00:14:59,649 ponéis varios de estos, 384 00:15:00,370 --> 00:15:02,809 no admite que sea en list 385 00:15:02,809 --> 00:15:06,580 a ver, admitiría que sea en list 386 00:15:06,580 --> 00:15:08,240 pero entonces hay que hacer la query de otra manera 387 00:15:08,240 --> 00:15:09,179 hacer otras cosas 388 00:15:09,179 --> 00:15:12,639 entonces lo más sencillo, si hacéis varios de estos 389 00:15:12,639 --> 00:15:14,179 no admite que sea en list 390 00:15:14,179 --> 00:15:16,379 entonces no pasa nada, se cambian a set 391 00:15:16,379 --> 00:15:17,919 y se acabó 392 00:15:17,919 --> 00:15:19,960 es decir 393 00:15:19,960 --> 00:15:21,860 sede 394 00:15:21,860 --> 00:15:25,039 no puede tener una lista de departamentos 395 00:15:25,039 --> 00:15:26,279 una lista de proyectos sede 396 00:15:26,279 --> 00:15:27,179 poder puede 397 00:15:27,179 --> 00:15:30,840 pero si tú los tratas de cargar 398 00:15:30,840 --> 00:15:31,980 con dos left join 399 00:15:31,980 --> 00:15:34,539 simultáneamente en la misma query 400 00:15:34,539 --> 00:15:37,080 no puedes, si son los dos listas 401 00:15:37,080 --> 00:15:38,799 si lo hacemos en consulta 402 00:15:38,799 --> 00:15:40,879 JPQL consecutiva, sí 403 00:15:40,879 --> 00:15:42,519 pero en la misma query 404 00:15:42,519 --> 00:15:43,980 pues no se puede 405 00:15:43,980 --> 00:15:46,200 en verdad no te afecta tenerlo listo 406 00:15:46,200 --> 00:15:48,539 porque los datos de cada tabla son distintos 407 00:15:48,539 --> 00:15:50,620 claro, es que te da igual 408 00:15:50,620 --> 00:15:52,519 te da lo mismo 409 00:15:52,519 --> 00:15:54,960 claro 410 00:15:54,960 --> 00:15:56,620 te da lo mismo porque 411 00:15:56,620 --> 00:15:58,600 no va a haber duplicados 412 00:15:58,600 --> 00:16:00,720 porque como el criterio de igualdad es la clave primaria 413 00:16:00,720 --> 00:16:03,179 no va a haber duplicados, que es la única ventaja de la list 414 00:16:03,179 --> 00:16:04,240 que puede haber duplicados 415 00:16:04,240 --> 00:16:05,980 y bueno, pues 416 00:16:05,980 --> 00:16:09,120 que puedas tú jugar con las posiciones 417 00:16:09,120 --> 00:16:10,000 si te interesa 418 00:16:10,000 --> 00:16:13,299 entonces sí, pero si no nos interesa jugar con las posiciones 419 00:16:13,299 --> 00:16:14,580 pues nos da igual que sea 420 00:16:14,580 --> 00:16:16,639 set que no, vale, pues entonces 421 00:16:16,639 --> 00:16:19,059 en este caso, automáticamente 422 00:16:19,059 --> 00:16:20,500 ya esto se queda más sencillo 423 00:16:20,500 --> 00:16:23,299 le metemos el entity manager y el servicio 424 00:16:23,299 --> 00:16:24,399 es el que ya 425 00:16:24,399 --> 00:16:26,620 decide cómo hace las cosas 426 00:16:26,620 --> 00:16:28,519 ya lo que sea 427 00:16:28,519 --> 00:16:30,279 pues en este caso, pues 428 00:16:30,279 --> 00:16:32,639 se quedaría igualito que el otro 429 00:16:32,639 --> 00:16:34,960 ¿vale? copia y pegada, el servicio sería el mismo 430 00:16:34,960 --> 00:16:36,620 pero el servicio 431 00:16:36,620 --> 00:16:37,659 el método servicio 432 00:16:37,659 --> 00:16:40,519 es el que coge aquí el contexto de 433 00:16:40,519 --> 00:16:41,320 persistencia 434 00:16:41,320 --> 00:16:44,720 ¿vale? aquí no he empezado una transacción 435 00:16:44,720 --> 00:16:46,320 porque como es consulta 436 00:16:46,320 --> 00:16:47,539 no hace falta 437 00:16:47,539 --> 00:16:50,460 ¿vale? si fuera un método de actualización 438 00:16:50,460 --> 00:16:51,659 siempre haríamos una transacción 439 00:16:51,659 --> 00:16:54,240 y aquí el servicio pues ya decide 440 00:16:54,240 --> 00:16:56,419 en qué momento cero la transacción, lo que sea 441 00:16:56,419 --> 00:16:58,840 pues bueno, esta es la arquitectura que usábamos 442 00:16:58,840 --> 00:16:59,899 con el JPA puro 443 00:16:59,899 --> 00:17:01,659 ¿vale? pues eso 444 00:17:01,659 --> 00:17:03,500 pues como estudiaría yo 445 00:17:03,500 --> 00:17:06,059 esto, pues lo mismo 446 00:17:06,059 --> 00:17:07,720 o con este 447 00:17:07,720 --> 00:17:09,779 o con otra base de datos, la de videojuegos 448 00:17:09,779 --> 00:17:11,660 otra que tenéis subida ahí, no me acuerdo 449 00:17:11,660 --> 00:17:13,819 que bases de datos subía al principio cuando puse 450 00:17:13,819 --> 00:17:15,500 bases de datos de repaso 451 00:17:15,500 --> 00:17:17,579 pues lo mismo 452 00:17:17,579 --> 00:17:19,299 me haría aquí daos 453 00:17:19,299 --> 00:17:22,019 que hagan cosas varias que se os ocurran 454 00:17:22,019 --> 00:17:22,980 pues 455 00:17:22,980 --> 00:17:25,799 dame proyectos por 456 00:17:25,799 --> 00:17:26,200 sede 457 00:17:26,200 --> 00:17:29,619 pues dame empleados 458 00:17:29,619 --> 00:17:31,660 por departamento, un find de empleado 459 00:17:31,660 --> 00:17:33,700 by departamento, que te dé un list de empleado 460 00:17:33,700 --> 00:17:35,880 ya está, hacéis unos cuantos de esos 461 00:17:35,880 --> 00:17:36,980 algunos 462 00:17:36,980 --> 00:17:39,720 no hace falta que los hagáis con JPQL 463 00:17:39,720 --> 00:17:41,259 porque con el get ya es suficiente 464 00:17:41,259 --> 00:17:43,440 o con el save si es modificar 465 00:17:43,440 --> 00:17:45,079 o con el remove si es borrar 466 00:17:45,079 --> 00:17:48,119 borrar los datos profesionales 467 00:17:48,119 --> 00:17:48,779 de un empleado 468 00:17:48,779 --> 00:17:50,839 por ejemplo, pues 469 00:17:50,839 --> 00:17:53,160 ponéis algunos de esos 470 00:17:53,160 --> 00:17:54,519 y los hacéis 471 00:17:54,519 --> 00:17:57,920 o sea, me refiero 472 00:17:57,920 --> 00:17:59,700 que JPQL solo hace falta 473 00:17:59,700 --> 00:18:02,279 cuando no es recuperar por clave primaria 474 00:18:02,279 --> 00:18:04,700 actualizar 475 00:18:04,700 --> 00:18:06,099 que ya es el save 476 00:18:06,099 --> 00:18:07,660 o el merge 477 00:18:07,660 --> 00:18:09,440 o borrar, que es el remove 478 00:18:09,440 --> 00:18:11,079 claro, claro 479 00:18:11,079 --> 00:18:13,779 el contexto de persistencia ya tiene el get 480 00:18:13,779 --> 00:18:15,200 para recuperar por clave primaria 481 00:18:15,200 --> 00:18:17,980 y luego ya el remove para borrar 482 00:18:17,980 --> 00:18:19,839 o el delete era, creo, que fuera 483 00:18:19,839 --> 00:18:22,140 y ya está, pero si quiero hacer consultas extrañas 484 00:18:22,140 --> 00:18:22,940 o cosas raras 485 00:18:22,940 --> 00:18:25,839 por otras cosas que nos han quedado, pues JPQL 486 00:18:25,839 --> 00:18:30,539 Sí, efectivamente 487 00:18:30,539 --> 00:18:32,700 Si lo quieres cargar con empleados 488 00:18:32,700 --> 00:18:34,920 Para que estén ahí fuera del contexto 489 00:18:34,920 --> 00:18:36,180 De persistencia AM 490 00:18:36,180 --> 00:18:38,799 Entonces sí, te lo tienes que hacer con la JPT 491 00:18:38,799 --> 00:18:40,180 Pues eso 492 00:18:40,180 --> 00:18:42,920 Pues me haría uno de esos 493 00:18:42,920 --> 00:18:43,980 Y 494 00:18:43,980 --> 00:18:46,859 Daos de empleado 495 00:18:46,859 --> 00:18:48,400 De departamento algunos servicios 496 00:18:48,400 --> 00:18:49,759 Y lo probaría y ya está 497 00:18:49,759 --> 00:18:51,960 Y bueno, esta misma así tal y como está 498 00:18:51,960 --> 00:18:54,660 Funciona, porque no tiene más 499 00:18:54,660 --> 00:18:57,700 Entonces esto ya es un poco más fácil 500 00:18:57,700 --> 00:18:59,859 Que JDBC 501 00:18:59,859 --> 00:19:00,299 Porque 502 00:19:00,299 --> 00:19:03,420 O sea un poquito 503 00:19:03,420 --> 00:19:05,920 Porque aquí no tenemos que hacer el mapeo 504 00:19:05,920 --> 00:19:07,420 Tú haces tu JPQL o lo que sea 505 00:19:07,420 --> 00:19:08,400 Y ya tienes el objeto entero 506 00:19:08,400 --> 00:19:12,109 Bueno 507 00:19:12,109 --> 00:19:14,029 Tienes que anotar 508 00:19:14,029 --> 00:19:17,150 Pero bueno las anotaciones al final 509 00:19:17,150 --> 00:19:19,390 Acaban siendo las mismas más o menos 510 00:19:19,390 --> 00:19:21,150 Vale 511 00:19:21,150 --> 00:19:23,390 Y luego ya que 512 00:19:23,390 --> 00:19:25,630 Salto dimos 513 00:19:25,630 --> 00:19:26,289 Después de esto 514 00:19:26,289 --> 00:19:28,750 pues que lo hiciera 515 00:19:28,750 --> 00:19:30,509 sprint, que eso ya sí 516 00:19:30,509 --> 00:19:31,730 que ahí hay poco que 517 00:19:31,730 --> 00:19:34,390 poca duda que tendréis 518 00:19:34,390 --> 00:19:35,849 porque el modelo es el mismo 519 00:19:35,849 --> 00:19:38,710 el modelo con las anotaciones, tal cual 520 00:19:38,710 --> 00:19:40,269 me da igual que lo esté haciendo con sprint 521 00:19:40,269 --> 00:19:41,529 que sin sprint, me da lo mismo 522 00:19:41,529 --> 00:19:44,490 ahí lo que salta es que me olvido 523 00:19:44,490 --> 00:19:46,690 del contexto de persistencia 524 00:19:46,690 --> 00:19:47,569 me olvido de todo eso 525 00:19:47,569 --> 00:19:50,410 eso sí, me hago un fichero 526 00:19:50,410 --> 00:19:51,509 de propiedades 527 00:19:51,509 --> 00:19:54,609 con todas las propiedades para que sprint tire de ellas 528 00:19:54,609 --> 00:19:56,930 La url 529 00:19:56,930 --> 00:19:58,009 Si quiero que se muestre 530 00:19:58,009 --> 00:19:59,349 Pues todo lo que tenía el persisten 531 00:19:59,349 --> 00:20:00,029 Este de aquí 532 00:20:00,029 --> 00:20:04,609 Para este 533 00:20:04,609 --> 00:20:06,490 Para examen 534 00:20:06,490 --> 00:20:08,210 Copiamos por ejemplo este tal cual 535 00:20:08,210 --> 00:20:09,970 Y lo que tenemos que cambiar es las clases 536 00:20:09,970 --> 00:20:12,470 Y el nombre de la unidad de persistencia 537 00:20:12,470 --> 00:20:13,930 Claro 538 00:20:13,930 --> 00:20:16,769 Entrar aquí para cambiar estas 539 00:20:16,769 --> 00:20:19,170 Lógicamente lo que haga falta cambiar 540 00:20:19,170 --> 00:20:19,750 Claro 541 00:20:19,750 --> 00:20:23,170 Y en sprint 542 00:20:23,170 --> 00:20:23,930 Pues sería 543 00:20:23,930 --> 00:20:26,309 ahí no hay persiste, lo que hay es un fichero 544 00:20:26,309 --> 00:20:28,069 de propiedades con las propiedades 545 00:20:28,069 --> 00:20:30,470 de la base de datos, si quiero que se muestre 546 00:20:30,470 --> 00:20:32,029 se muestre, lo que sea 547 00:20:32,029 --> 00:20:34,130 y el repositorio 548 00:20:34,130 --> 00:20:35,730 y ya está, y luego ya 549 00:20:35,730 --> 00:20:38,269 el repositorio con métodos propios o no 550 00:20:38,269 --> 00:20:40,170 métodos propios 551 00:20:40,170 --> 00:20:42,089 de poner alguno, pues 552 00:20:42,089 --> 00:20:43,529 tenemos 553 00:20:43,529 --> 00:20:46,589 buscar por otros campos que no sean la clave primaria 554 00:20:46,589 --> 00:20:48,589 y alguno 555 00:20:48,589 --> 00:20:49,990 en el que a lo mejor hay que poner alguna query 556 00:20:49,990 --> 00:20:51,230 una query sencilla 557 00:20:51,230 --> 00:20:53,890 un método de repositorio que hacíamos 558 00:20:53,890 --> 00:20:55,549 asociado a una query nuestra propia 559 00:20:55,549 --> 00:20:57,450 y luego ya el service 560 00:20:57,450 --> 00:20:59,329 que ese ya sí que se anota como service 561 00:20:59,329 --> 00:21:00,630 obligatoriamente y todo eso 562 00:21:00,630 --> 00:21:02,289 lo que le toque hacer 563 00:21:02,289 --> 00:21:05,950 y nada más, si es Spring Boot 564 00:21:05,950 --> 00:21:08,250 nos acordamos de que todos los paquetes 565 00:21:08,250 --> 00:21:09,329 cuelgan de donde esté 566 00:21:09,329 --> 00:21:11,710 el arranque, donde esté la clase anotada 567 00:21:11,710 --> 00:21:12,910 con Spring Boot Application 568 00:21:12,910 --> 00:21:14,990 y si no es Spring Boot 569 00:21:14,990 --> 00:21:18,109 pues lo que pasa es que hay que hacer la clase de configuración 570 00:21:18,109 --> 00:21:19,789 que esa es la diferencia 571 00:21:19,789 --> 00:21:21,029 si no era Spring Boot 572 00:21:21,029 --> 00:21:22,650 había que hacer 573 00:21:22,650 --> 00:21:24,829 aquí, alguno de estos tendrá ese 574 00:21:24,829 --> 00:21:26,549 pero este no es Spring Boot 575 00:21:26,549 --> 00:21:28,829 no, este no 576 00:21:28,829 --> 00:21:30,970 pero estamos haciendo lo de Spring Boot 577 00:21:30,970 --> 00:21:32,890 o sea, si pasamos a Spring 578 00:21:32,890 --> 00:21:34,069 que era este modelo, pues 579 00:21:34,069 --> 00:21:36,630 el modelo igual 580 00:21:36,630 --> 00:21:38,150 pero 581 00:21:38,150 --> 00:21:40,509 necesitamos 582 00:21:40,509 --> 00:21:42,730 claro 583 00:21:42,730 --> 00:21:44,809 el repositorio, todo 584 00:21:44,809 --> 00:21:46,869 aquí vimos en este proyecto 585 00:21:46,869 --> 00:21:48,829 que subimos, vimos algunos ejemplos de 586 00:21:48,829 --> 00:21:50,630 métodos propios y ya está 587 00:21:50,630 --> 00:21:51,849 y luego 588 00:21:51,849 --> 00:21:55,049 si no es sprint boot, si no es sprint normal 589 00:21:55,049 --> 00:21:56,930 hay que configurarlo en esta clase 590 00:21:56,930 --> 00:21:58,769 que era un rollo, vale 591 00:21:58,769 --> 00:22:00,529 hay que configurarlo, donde están 592 00:22:00,529 --> 00:22:02,650 los paquetes a partir de los cuales 593 00:22:02,650 --> 00:22:04,710 cojo bin, donde están 594 00:22:04,710 --> 00:22:06,109 los repositorios 595 00:22:06,109 --> 00:22:07,549 vale 596 00:22:07,549 --> 00:22:11,029 las transacciones, hay que configurar todo esto 597 00:22:11,029 --> 00:22:12,910 hay que decirle de donde 598 00:22:12,910 --> 00:22:14,049 saca el 599 00:22:14,049 --> 00:22:16,049 de donde saca el 600 00:22:16,049 --> 00:22:19,109 la fuente 601 00:22:19,109 --> 00:22:19,809 de datos 602 00:22:19,809 --> 00:22:22,890 vale, había que configurar 603 00:22:22,890 --> 00:22:24,150 todo esto de aquí 604 00:22:24,150 --> 00:22:28,990 que estés usando 605 00:22:28,990 --> 00:22:30,170 Spring pero no Spring Boot 606 00:22:30,170 --> 00:22:32,849 que no es lo habitual, si estás usando 607 00:22:32,849 --> 00:22:34,609 Spring Boot esta clase de configuración 608 00:22:34,609 --> 00:22:36,809 desaparece porque lo único que tienes que 609 00:22:36,809 --> 00:22:37,809 hacer es 610 00:22:37,809 --> 00:22:40,730 Spring Boot era, lo he trasladado 611 00:22:40,730 --> 00:22:42,670 aquí, si usas 612 00:22:42,670 --> 00:22:44,990 con Spring Boot lo único que tienes que hacer es 613 00:22:44,990 --> 00:22:48,549 meterlo en un fichero de propiedades 614 00:22:48,549 --> 00:22:51,430 y ya Spring Boot cuando arranque 615 00:22:51,430 --> 00:22:55,180 a partir de la clase base 616 00:22:55,180 --> 00:22:56,380 del paquete base 617 00:22:56,380 --> 00:22:57,660 ahí ya sí que obligatorio 618 00:22:57,660 --> 00:23:00,619 claro, pues cuando arranque ya la aplicación 619 00:23:00,619 --> 00:23:01,819 esta de aquí 620 00:23:01,819 --> 00:23:03,839 pues ya del fichero de propiedades 621 00:23:03,839 --> 00:23:05,859 lo saca todo y ya está 622 00:23:05,859 --> 00:23:07,519 y ya por eso esto nos queda más sencillo 623 00:23:07,519 --> 00:23:09,180 el modelo, el repositorio y el servicio 624 00:23:09,180 --> 00:23:10,440 y ya está 625 00:23:10,440 --> 00:23:13,420 sí, pero 626 00:23:13,420 --> 00:23:15,539 luego, un segundo 627 00:23:15,539 --> 00:23:20,400 ahora ya, ¿desde dónde podemos llamar 628 00:23:20,400 --> 00:23:22,359 a esos servicios? pues igual los podemos 629 00:23:22,359 --> 00:23:24,140 llamar desde un controller 630 00:23:24,140 --> 00:23:25,799 ¿vale? puede ser una aplicación 631 00:23:25,799 --> 00:23:27,920 que sea un 632 00:23:27,920 --> 00:23:28,579 API REST 633 00:23:28,579 --> 00:23:32,500 ¿vale? que esta es la arquitectura 634 00:23:32,500 --> 00:23:34,480 para hacer nuestros servicios 635 00:23:34,480 --> 00:23:36,279 nosotros, ¿desde dónde 636 00:23:36,279 --> 00:23:38,180 los podemos llamar? hombre, pues podemos hacer 637 00:23:38,180 --> 00:23:40,059 un main o otra cosa 638 00:23:40,059 --> 00:23:41,380 para hacer llamar a los servicios 639 00:23:41,380 --> 00:23:43,579 o lo podemos llamar desde un 640 00:23:43,579 --> 00:23:45,359 API REST y ya está 641 00:23:45,359 --> 00:23:47,480 con su controlador que llama al servicio 642 00:23:47,480 --> 00:23:49,640 y se acabó, el controlador correctamente 643 00:23:49,640 --> 00:23:51,440 anotado con sus 644 00:23:51,440 --> 00:23:53,200 métodos, si es get mapping 645 00:23:53,200 --> 00:23:55,380 post mapping, el que sea, anotado 646 00:23:55,380 --> 00:23:55,859 como 647 00:23:55,859 --> 00:23:58,380 controller, rest controller 648 00:23:58,380 --> 00:24:00,900 su ruta de mapeo 649 00:24:00,900 --> 00:24:03,000 y ya está, no 650 00:24:03,000 --> 00:24:05,319 vamos a hacer nada más, si es desde un 651 00:24:05,319 --> 00:24:07,359 controller, repito, pues tu controller correctamente 652 00:24:07,359 --> 00:24:09,099 anotado, como que 653 00:24:09,099 --> 00:24:11,119 bin, controller, rest controller 654 00:24:11,119 --> 00:24:13,200 ruta de mapeo y los métodos que sean 655 00:24:13,200 --> 00:24:14,099 get y post 656 00:24:14,099 --> 00:24:17,339 y ahí ya vamos a los servicios 657 00:24:17,339 --> 00:24:18,500 y se acabó, ya está 658 00:24:18,500 --> 00:24:19,480 vale, un segundo 659 00:24:19,480 --> 00:24:25,440 eso no lo sé 660 00:24:25,440 --> 00:24:26,880 hombre, cuatro 661 00:24:26,880 --> 00:24:29,019 a ver 662 00:24:29,019 --> 00:24:31,559 claro, a ver, no puede ir junto 663 00:24:31,559 --> 00:24:33,440 una aplicación que tenga 664 00:24:33,440 --> 00:24:35,059 el JPA, que esté estirando 665 00:24:35,059 --> 00:24:36,380 JPA puro y Spring 666 00:24:36,380 --> 00:24:39,259 porque una vez que el problema es que tú lo hayas arrancado 667 00:24:39,259 --> 00:24:41,140 y te puedas hacer pruebas, ya la has liado 668 00:24:41,140 --> 00:24:42,799 entonces ahí ya 669 00:24:42,799 --> 00:24:45,400 a ver 670 00:24:45,400 --> 00:24:47,259 pero yo podría mezclar 671 00:24:47,259 --> 00:24:48,660 JDBC con JPA 672 00:24:48,660 --> 00:24:50,359 eso si puedo 673 00:24:50,359 --> 00:24:52,799 y luego en otro proyecto aparte 674 00:24:52,799 --> 00:24:54,380 Spring 675 00:24:54,380 --> 00:24:57,279 Spring JP 676 00:24:57,279 --> 00:25:01,809 o la meta también 677 00:25:01,809 --> 00:25:03,410 buena pregunta 678 00:25:03,410 --> 00:25:04,769 me acabas de recordar 679 00:25:04,769 --> 00:25:12,349 ¿me hacéis un trabajito? 680 00:25:12,769 --> 00:25:14,130 100% 681 00:25:14,130 --> 00:25:17,509 preferís hacerme un trabajo 682 00:25:17,509 --> 00:25:23,450 a ver, quita alguno 683 00:25:23,450 --> 00:25:25,329 no, no, no, de quitar quito 684 00:25:25,329 --> 00:25:25,869 MongoDB 685 00:25:25,869 --> 00:25:35,309 lo otro no, porque lo otro forma 686 00:25:35,309 --> 00:25:37,910 parte del mismo cuerpo de conocimientos 687 00:25:37,910 --> 00:25:39,369 y quiero yo pues 688 00:25:39,369 --> 00:25:41,190 hacerme la ilusión de que lo tenemos 689 00:25:41,190 --> 00:25:43,170 todo en la cabeza ligado una cosa con otra 690 00:25:43,170 --> 00:25:47,950 ¿Qué es lo que va a hacer Juanfi? 691 00:25:54,309 --> 00:25:55,829 Bueno, MongoDB 692 00:25:55,829 --> 00:25:57,470 lo quitamos para el examen 693 00:25:57,470 --> 00:25:59,509 ¿Qué voy a hacer? 694 00:26:05,089 --> 00:26:06,869 No, no, no 695 00:26:06,869 --> 00:26:10,109 Yo voy a confiar en que 696 00:26:10,109 --> 00:26:12,250 sabéis lo que es MongoDB 697 00:26:12,250 --> 00:26:14,329 que lo habéis aprendido y que sabéis hacer 698 00:26:14,329 --> 00:26:23,890 que me mentís 699 00:26:23,890 --> 00:26:24,789 y no sabéis 700 00:26:24,789 --> 00:26:27,490 el destino os pasará factura 701 00:26:27,490 --> 00:26:30,759 porque 702 00:26:30,759 --> 00:26:32,920 nada es gratis en esta vida 703 00:26:42,920 --> 00:26:43,559 no me entero 704 00:26:43,559 --> 00:26:48,700 Bueno, tú no te agobies 705 00:26:48,700 --> 00:26:50,700 No te estreses 706 00:26:50,700 --> 00:26:52,019 No te estreses 707 00:26:52,019 --> 00:26:58,160 Ya, pero a ver, si es que 708 00:26:58,160 --> 00:26:59,680 De contenido 709 00:26:59,680 --> 00:27:02,200 He quitado ya una burrada 710 00:27:02,200 --> 00:27:03,859 Una barbaridad 711 00:27:03,859 --> 00:27:06,119 Para poder ver todo 712 00:27:06,119 --> 00:27:07,720 Aunque sea un poquitín por encima 713 00:27:07,720 --> 00:27:09,640 He quitado una barbaridad 714 00:27:09,640 --> 00:27:10,680 Vale 715 00:27:10,680 --> 00:27:18,720 Entonces, ¿ya he quitado mucho? 716 00:27:18,839 --> 00:27:20,640 ¿En el examen ya quito más? 717 00:27:21,140 --> 00:27:21,880 Pero bueno. 718 00:27:23,920 --> 00:27:25,559 A ver, dudas, cosas. 719 00:27:25,819 --> 00:27:27,579 Algo que queráis que hagamos aquí en este rato 720 00:27:27,579 --> 00:27:28,660 maravilloso que tengamos. 721 00:27:29,240 --> 00:27:30,279 Lo tuyo lo vamos a mirar ahora. 722 00:27:30,279 --> 00:27:32,279 Voy a subir los... 723 00:27:40,680 --> 00:27:51,720 Si me hablas de Postman, me estás hablando de consumir 724 00:27:51,720 --> 00:27:52,380 el API REST 725 00:27:52,380 --> 00:27:55,579 JSON es su lenguaje 726 00:27:55,579 --> 00:27:56,579 de comunicación 727 00:27:56,579 --> 00:27:58,220 Si lo hicimos 728 00:27:58,220 --> 00:28:03,839 No, no, no, a ver, hay dos partes 729 00:28:03,839 --> 00:28:05,420 Aquí tenemos 730 00:28:05,420 --> 00:28:06,839 el API REST 731 00:28:06,839 --> 00:28:09,220 Sería jolazo 732 00:28:09,220 --> 00:28:10,359 ¿Qué es el dato más feo? 733 00:28:14,039 --> 00:28:14,880 Un dato. 734 00:28:15,339 --> 00:28:17,640 Un dato es un dato feo, porque era un dato. 735 00:28:19,220 --> 00:28:21,680 Vale, entonces, el API REST. 736 00:28:24,839 --> 00:28:31,140 El API REST se comunica con su consumidor, con el que le consuma. 737 00:28:31,779 --> 00:28:37,200 Puede ser una operación Java o una corriente, quien le consuma, 738 00:28:37,200 --> 00:28:39,640 Aquí eso no lo hemos hecho, que sería muy interesante. 739 00:28:41,299 --> 00:28:42,240 Esto no lo hemos hecho. 740 00:28:42,319 --> 00:28:44,480 Aquí habría que hacer un cliente de API REST. 741 00:28:44,480 --> 00:28:46,180 Pero eso no lo hemos hecho. 742 00:28:46,519 --> 00:28:47,940 Pero en cualquier caso da igual. 743 00:28:48,319 --> 00:28:49,599 Las comunicaciones con él son iguales. 744 00:28:51,420 --> 00:28:55,619 Aquí, o puede ser el navegador, que es lo que hemos usado cuando... 745 00:28:55,619 --> 00:28:59,180 O puede ser POS. 746 00:29:01,539 --> 00:29:03,119 Estas dos son las opciones que hemos puesto. 747 00:29:03,119 --> 00:29:07,619 Entonces, el API REST se consume dentro de estos meses. 748 00:29:07,900 --> 00:29:12,359 Ya sabemos el API REST, el arte, pues lógicamente, 749 00:29:12,759 --> 00:29:14,859 el API REST llama al servicio, patatín, patatán, 750 00:29:15,440 --> 00:29:17,140 a la string data en última instancia. 751 00:29:18,980 --> 00:29:21,359 Y ahora, la parte que tú me preguntabas, 752 00:29:21,940 --> 00:29:24,759 ¿cómo le llega la información al API REST y cómo la devuelve? 753 00:29:25,579 --> 00:29:27,740 Es a partir de JSON. 754 00:29:27,740 --> 00:29:32,480 Y esto se tendrá que mapear a entidad Java. 755 00:29:33,119 --> 00:29:36,900 Entonces, ¿quién lo mapea? 756 00:29:37,259 --> 00:29:38,839 Jackson, la librería Jackson 757 00:29:38,839 --> 00:29:43,059 Por eso Sprint 758 00:29:43,059 --> 00:29:44,720 Incluye la dependencia de Jackson 759 00:29:44,720 --> 00:29:47,000 Cuando tú pones la dependencia de Sprint 760 00:29:47,000 --> 00:29:49,019 Y luego te abres en el Mave 761 00:29:49,019 --> 00:29:49,920 En referencias 762 00:29:49,920 --> 00:29:52,839 Lo que te ha puesto ahí la hostia en botes 763 00:29:52,839 --> 00:29:54,119 Pues madre, ya se es Jackson 764 00:29:54,119 --> 00:29:55,319 ¿Vale? Entonces 765 00:29:55,319 --> 00:29:57,019 Sprint 766 00:29:57,019 --> 00:30:00,819 Te convierte el JSON en la entidad Java 767 00:30:00,819 --> 00:30:01,279 Que sea 768 00:30:01,279 --> 00:30:03,839 y ahora ya esto 769 00:30:03,839 --> 00:30:06,140 se va ya a las tablas 770 00:30:06,140 --> 00:30:07,799 ¿vale? 771 00:30:09,180 --> 00:30:10,259 si esto fuera 772 00:30:10,259 --> 00:30:10,880 MongoDB 773 00:30:10,880 --> 00:30:13,859 esta parte es igual, es JSON 774 00:30:13,859 --> 00:30:15,700 que te transforma del JSON 775 00:30:15,700 --> 00:30:16,640 a las entidades 776 00:30:16,640 --> 00:30:19,279 y ahora ya las entidades 777 00:30:19,279 --> 00:30:20,920 pasan a MongoDB 778 00:30:20,920 --> 00:30:23,480 que sería como pasar a JSON otra vez 779 00:30:23,480 --> 00:30:25,799 entonces han venido en JSON, van a Java 780 00:30:25,799 --> 00:30:27,500 y se van a JSON otra vez 781 00:30:27,500 --> 00:30:32,319 en nuestro caso se cambian 782 00:30:32,319 --> 00:30:34,140 a base de datos 783 00:30:34,140 --> 00:30:34,599 claro 784 00:30:34,599 --> 00:30:37,880 y eso todo lo hace el repositorio 785 00:30:37,880 --> 00:30:39,619 el repositorio 786 00:30:39,619 --> 00:30:42,440 si 787 00:30:42,440 --> 00:30:50,720 como lo haces con el postman 788 00:30:50,720 --> 00:30:52,200 pues así 789 00:30:52,200 --> 00:30:53,400 como vamos a abrirlo 790 00:30:53,400 --> 00:30:56,259 como lo hemos hecho, tú invocas al controller 791 00:30:56,259 --> 00:30:57,480 a ver, vamos a abrir postman 792 00:30:57,480 --> 00:31:00,700 Nuestro postman 793 00:31:00,700 --> 00:31:02,859 Estaba 794 00:31:02,859 --> 00:31:04,839 Aquí 795 00:31:04,839 --> 00:31:06,299 Vale 796 00:31:06,299 --> 00:31:06,819 ¿U? 797 00:31:10,819 --> 00:31:13,059 No, no, no 798 00:31:13,059 --> 00:31:16,660 Vale 799 00:31:16,660 --> 00:31:20,039 Este es nuestro postman 800 00:31:20,039 --> 00:31:22,240 Entonces, voy a abrir rápidamente 801 00:31:22,240 --> 00:31:23,220 El 802 00:31:23,220 --> 00:31:24,539 Este de aquí 803 00:31:24,539 --> 00:31:34,900 A ver, un segundito 804 00:31:34,900 --> 00:31:35,720 que se abra este. 805 00:31:40,900 --> 00:31:42,759 Porque luego todo esto que hemos hecho con 806 00:31:42,759 --> 00:31:44,160 o sea, por ejemplo, con 807 00:31:44,160 --> 00:31:46,319 JPA, utilizamos el ADO 808 00:31:46,319 --> 00:31:49,200 y con JDBT. 809 00:31:50,079 --> 00:31:51,279 O sea, hacemos un package 810 00:31:51,279 --> 00:31:52,740 que es con tanto, es con todo. 811 00:31:53,180 --> 00:31:54,240 Y ahí tenemos un main. 812 00:31:54,539 --> 00:31:59,240 Efectivamente 813 00:31:59,240 --> 00:32:01,339 Al controller en realidad 814 00:32:01,339 --> 00:32:03,640 Le da igual si ese servicio 815 00:32:03,640 --> 00:32:06,119 Se ha hecho con sprint también 816 00:32:06,119 --> 00:32:07,519 O lo que pasa es que normalmente 817 00:32:07,519 --> 00:32:15,039 Ya, pero que tú puedes hacer 818 00:32:15,039 --> 00:32:16,460 Puedes usar sprint 819 00:32:16,460 --> 00:32:18,319 Que es lo que normalmente hacemos 820 00:32:18,319 --> 00:32:19,579 Para hacer el controlador 821 00:32:19,579 --> 00:32:23,000 Pero luego el controller no es obligatorio 822 00:32:23,000 --> 00:32:24,880 que en sus métodos llame a un servicio hecho con 823 00:32:24,880 --> 00:32:26,960 Spring, puede llamar a quien le dé la gana. 824 00:32:28,339 --> 00:32:29,000 Puede llamar a quien quiera. 825 00:32:29,740 --> 00:32:30,539 No es que... 826 00:32:30,539 --> 00:32:30,940 ¿Vale? 827 00:32:31,359 --> 00:32:33,140 A lo mejor le faltaría por el vendeo o lo que sea. 828 00:32:34,160 --> 00:32:34,559 No. 829 00:32:35,519 --> 00:32:36,400 Puede llamar a quien quiera. 830 00:32:36,619 --> 00:32:38,779 Claro, no deja de ser código Java. 831 00:32:38,779 --> 00:32:40,059 Puede llamar a cualquier cosa. 832 00:32:40,539 --> 00:32:42,079 Vale, a ver, Ana, por ejemplo, 833 00:32:42,740 --> 00:32:43,140 este 834 00:32:43,140 --> 00:32:46,079 controller de aquí. 835 00:32:46,519 --> 00:32:48,900 Pues este controller de aquí, pues por ejemplo, 836 00:32:49,019 --> 00:32:49,759 tiene este método. 837 00:32:49,759 --> 00:32:53,220 inserta al que hay que pasarle 838 00:32:53,220 --> 00:32:55,119 este objeto 839 00:32:55,119 --> 00:32:56,680 vale 840 00:32:56,680 --> 00:32:59,140 entonces, este objeto se lo pasamos 841 00:32:59,140 --> 00:33:01,220 en el cuerpo de la petición HTTP 842 00:33:01,220 --> 00:33:04,619 claro, entonces 843 00:33:04,619 --> 00:33:07,200 ese cuerpo no lo podemos construir en el navegador 844 00:33:07,200 --> 00:33:09,079 lógicamente, por eso es lo que usábamos postman 845 00:33:09,079 --> 00:33:11,299 vale, pues entonces para consumir 846 00:33:11,299 --> 00:33:13,299 este servicio que está colgando 847 00:33:13,299 --> 00:33:14,480 de API 848 00:33:14,480 --> 00:33:17,299 y a su vez después 849 00:33:17,299 --> 00:33:18,680 de API tiene inserta 850 00:33:18,680 --> 00:33:19,839 Para consumirlo. 851 00:33:20,339 --> 00:33:22,700 O lo hago desde una aplicación que construyo yo, 852 00:33:22,819 --> 00:33:24,960 que hace su cliente y lo consume, que podríamos, 853 00:33:25,099 --> 00:33:25,819 que no lo hemos hecho. 854 00:33:26,720 --> 00:33:32,019 O me abro Postman y aquí era donde poníamos el método con el 855 00:33:32,019 --> 00:33:33,480 que yo quiero y la URL que sea. 856 00:33:34,039 --> 00:33:35,480 Y ahora, body, rellénate. 857 00:33:35,660 --> 00:33:36,559 ¿Con qué relleno el body? 858 00:33:37,000 --> 00:33:38,819 Pues lo voy a rellenar no con texto en claro, 859 00:33:38,819 --> 00:33:45,819 sino con texto JSON, que es el que, el que, ¿vale? 860 00:33:45,819 --> 00:33:48,819 entonces, esto va en el body 861 00:33:48,819 --> 00:33:51,200 del HTTP, esto viaja 862 00:33:51,200 --> 00:33:54,740 claro, esto viaja y llega 863 00:33:54,740 --> 00:33:56,980 aquí a este 864 00:33:56,980 --> 00:33:58,700 punto, entonces 865 00:33:58,700 --> 00:34:01,099 el controller saca 866 00:34:01,099 --> 00:34:02,940 ese JSON y lo 867 00:34:02,940 --> 00:34:04,920 mapea según las anotaciones 868 00:34:04,920 --> 00:34:07,099 de Jackson a crear 869 00:34:07,099 --> 00:34:09,019 tarea DTO, entonces crear tarea 870 00:34:09,019 --> 00:34:10,980 DTO puede tener anotaciones 871 00:34:10,980 --> 00:34:12,940 Jackson o no, las tendrá 872 00:34:12,940 --> 00:34:14,880 si algún nombre de propiedad cambia o no 873 00:34:14,880 --> 00:34:17,000 cambia, ¿vale? Pues lo mapea, según 874 00:34:17,000 --> 00:34:18,340 Jackson, lo mapea a este. 875 00:34:18,940 --> 00:34:20,739 Y ya está. Y ahora este 876 00:34:20,739 --> 00:34:22,920 ya llama al servicio, al repositorio 877 00:34:22,920 --> 00:34:23,980 y esto ya va a SQL. 878 00:34:28,960 --> 00:34:30,119 Claro, claro, claro. 879 00:34:30,599 --> 00:34:33,159 MongoDB empieza a existir 880 00:34:33,159 --> 00:34:34,380 en el repositorio. 881 00:34:35,079 --> 00:34:36,820 Y para eso ha habido unos pasos antes. 882 00:34:36,940 --> 00:34:38,840 Ha llegado al control en un JSON. ¿Qué tiene que ver con 883 00:34:38,840 --> 00:34:41,019 MongoDB? Ese JSON se ha mapeado 884 00:34:41,019 --> 00:34:42,559 según Jackson a este objeto. 885 00:34:43,179 --> 00:34:44,739 Este objeto se ha pasado al servicio. 886 00:34:44,880 --> 00:34:46,920 El servicio llama al repositorio. 887 00:34:47,239 --> 00:34:48,440 Ahí ya entra. 888 00:34:48,579 --> 00:34:49,619 O SQL o MongoDB. 889 00:34:50,320 --> 00:34:50,800 El que sea. 890 00:34:52,579 --> 00:34:52,900 ¿Vale? 891 00:34:55,139 --> 00:34:55,860 Vale. 892 00:34:56,739 --> 00:34:59,280 Más dudas.