1 00:00:00,000 --> 00:00:04,459 Vamos, bueno, pues sabemos JPA, ¿vale? 2 00:00:04,500 --> 00:00:06,759 Sabemos que es un contexto de persistencia, el Entity Manager. 3 00:00:07,780 --> 00:00:12,960 Sabemos los métodos que ofrece el Entity Manager para hacer la persistencia, 4 00:00:13,019 --> 00:00:15,320 como Save, como Get por clave primaria. 5 00:00:16,140 --> 00:00:20,260 Y sabemos construir una aplicación que trabaje con objetos persistentes 6 00:00:20,260 --> 00:00:24,120 directamente con el JPA puro, con el Entity Manager, ¿vale? 7 00:00:24,160 --> 00:00:25,059 Y ya está, ¿vale? 8 00:00:25,539 --> 00:00:26,559 ¿Qué más sabemos? 9 00:00:26,559 --> 00:00:29,199 pues para envolver la complejidad 10 00:00:29,199 --> 00:00:31,839 del entity manager y de las transacciones 11 00:00:31,839 --> 00:00:35,179 y sobre todo 12 00:00:35,179 --> 00:00:37,340 por la facilidad adicional 13 00:00:37,340 --> 00:00:39,439 de generarnos código automáticamente 14 00:00:39,439 --> 00:00:41,179 pues tenemos la capa 15 00:00:41,179 --> 00:00:42,640 por encima de sprint 16 00:00:42,640 --> 00:00:44,500 la capa por encima de sprint 17 00:00:44,500 --> 00:00:47,000 ya sabemos que me permite 18 00:00:47,000 --> 00:00:50,869 haciendo interfaz 19 00:00:50,869 --> 00:00:53,070 de repositorio que esas interfaces 20 00:00:53,070 --> 00:00:55,289 se rellenen automáticamente 21 00:00:55,289 --> 00:00:58,250 Simplemente a través del nombre 22 00:00:58,250 --> 00:00:59,509 Del método 23 00:00:59,509 --> 00:01:01,450 Aparte de los que me ofrece 24 00:01:01,450 --> 00:01:04,290 Que yo quiero además 25 00:01:04,290 --> 00:01:06,109 Alguna cosa 26 00:01:06,109 --> 00:01:08,109 Que no pueda hacer a través del nombre 27 00:01:08,109 --> 00:01:08,930 Del método 28 00:01:08,930 --> 00:01:11,469 O diferente a las que me ofrece 29 00:01:11,469 --> 00:01:13,549 Plantamos una query y ya está 30 00:01:13,549 --> 00:01:15,930 Entonces Spring JPA nos ofrece 31 00:01:15,930 --> 00:01:16,950 Esos repositorios 32 00:01:16,950 --> 00:01:19,790 Que concluimos crear una especie de 33 00:01:19,790 --> 00:01:21,790 Capa que tapa 34 00:01:21,790 --> 00:01:23,469 Al DAO nuestro puro y duro 35 00:01:23,469 --> 00:01:26,150 Entonces el repository se hace su DAO 36 00:01:26,150 --> 00:01:28,150 Por debajo y nos ofrece métodos 37 00:01:28,150 --> 00:01:30,469 Un poquito más elaborados 38 00:01:30,469 --> 00:01:32,790 Que los del DAO, el CRUD puro y duro del DAO 39 00:01:32,790 --> 00:01:34,769 Entonces al repository ya lo llamamos 40 00:01:34,769 --> 00:01:36,049 Del servicio y se acabó 41 00:01:36,049 --> 00:01:37,689 Y que más nos ofrece Spring 42 00:01:37,689 --> 00:01:39,030 La gestión de los bins 43 00:01:39,030 --> 00:01:42,790 La autoinyección de las cosas que sean necesarias 44 00:01:42,790 --> 00:01:44,150 De dos maneras 45 00:01:44,150 --> 00:01:47,890 De dos maneras 46 00:01:47,890 --> 00:01:48,909 Sin Spring Boot 47 00:01:48,909 --> 00:01:50,170 O con Spring Boot 48 00:01:50,170 --> 00:01:53,209 Sin Spring Boot tenemos que configurar los bins 49 00:01:53,209 --> 00:01:55,590 a mano, bien con 50 00:01:55,590 --> 00:01:57,469 anotaciones en la clase, tipo 51 00:01:57,469 --> 00:01:59,750 service, repository no hace falta porque se infiera 52 00:01:59,750 --> 00:02:01,469 automáticamente si heredas de jpa 53 00:02:01,469 --> 00:02:03,609 repository, o bien en la clase 54 00:02:03,609 --> 00:02:05,909 de configuración, donde vas poniendo bin, bin, bin 55 00:02:05,909 --> 00:02:07,469 y los tienes que configurar a mano 56 00:02:07,469 --> 00:02:09,770 que en una aplicación jpa 57 00:02:09,770 --> 00:02:11,250 ¿cuáles son los imprescindibles? 58 00:02:12,009 --> 00:02:13,610 el entity manager factory 59 00:02:13,610 --> 00:02:15,189 porque es el que saca el entity manager 60 00:02:15,189 --> 00:02:17,509 pues hay que ponerlo en el app.conf como se instancia 61 00:02:17,509 --> 00:02:19,430 el data source, porque el entity manager 62 00:02:19,430 --> 00:02:21,469 se engancha a un data source, pues hay que poner 63 00:02:21,469 --> 00:02:23,310 el app.config como su instancia 64 00:02:23,310 --> 00:02:25,469 y si gestionas transacciones 65 00:02:25,469 --> 00:02:27,370 que siempre gestionamos 66 00:02:27,370 --> 00:02:29,090 transacciones, pues 67 00:02:29,090 --> 00:02:31,490 el transaction manager 68 00:02:31,490 --> 00:02:33,430 eran esos tres bins, aparte de los 69 00:02:33,430 --> 00:02:34,870 service y los repositorios 70 00:02:34,870 --> 00:02:37,050 esos los maneja Spring solo 71 00:02:37,050 --> 00:02:39,490 ¿que no queremos configurarlos con 72 00:02:39,490 --> 00:02:41,310 nuestra clase 73 00:02:41,310 --> 00:02:43,189 de configuración? Pues Spring Boot 74 00:02:43,189 --> 00:02:45,530 Spring Boot los configura 75 00:02:45,530 --> 00:02:46,370 automáticamente 76 00:02:46,370 --> 00:02:49,189 a partir de un fichero properties 77 00:02:49,189 --> 00:02:51,349 ¿vale? Entonces, con 78 00:02:51,349 --> 00:02:53,210 esa arquitectura ya montada, pues uno 79 00:02:53,210 --> 00:02:55,310 llama al servicio y hace lo que le dé 80 00:02:55,310 --> 00:02:57,389 la gana, que a su vez tirar al repositorio, etc. 81 00:02:59,229 --> 00:02:59,629 Siempre 82 00:02:59,629 --> 00:03:01,310 apoyado, por supuesto, en 83 00:03:01,310 --> 00:03:03,310 una buena declaración del modelo 84 00:03:03,310 --> 00:03:05,490 con las anotaciones correctas y todo eso. 85 00:03:06,610 --> 00:03:07,469 Eso es en resumen 86 00:03:07,469 --> 00:03:09,289 lo que hemos visto. 87 00:03:09,789 --> 00:03:11,430 ¿Vale? En resumen lo que hemos visto. 88 00:03:12,449 --> 00:03:13,110 Luego ya, claro, 89 00:03:13,110 --> 00:03:14,830 cada caso en particular 90 00:03:14,830 --> 00:03:17,030 o cada modelo en particular, pues tiene 91 00:03:17,030 --> 00:03:18,270 sus peculiaridades. 92 00:03:19,189 --> 00:03:20,990 Bueno, pues 93 00:03:20,990 --> 00:03:42,930 Dijimos que íbamos a hacer lo mismo, pero cambiado a, ahora ya no hacer las pruebas con un main, porque bueno, eso es un poco chapuzo, hacer un servicio, hacer toda esa arquitectura, pero luego llamarlo desde un main, una aplicación de escritorio, pero bueno, como para pruebas de que la arquitectura funcionaba, sobraba. 94 00:03:42,930 --> 00:03:46,819 Pues ahora en lugar 95 00:03:46,819 --> 00:03:47,520 Desde un main 96 00:03:47,520 --> 00:03:50,960 Vamos a probarlo 97 00:03:50,960 --> 00:03:52,000 Desde 98 00:03:52,000 --> 00:03:54,139 Una arquitectura 99 00:03:54,139 --> 00:03:56,000 Con el modelo 100 00:03:56,000 --> 00:03:58,639 MVC, modelo vista controlador 101 00:03:58,639 --> 00:04:00,120 ¿Vale? ¿Por qué? Porque 102 00:04:00,120 --> 00:04:02,580 Podemos hacer nosotros 103 00:04:02,580 --> 00:04:04,020 Esto 104 00:04:04,020 --> 00:04:06,900 Una arquitectura modelo vista controlador 105 00:04:06,900 --> 00:04:08,479 Nosotros a mano directamente 106 00:04:08,479 --> 00:04:09,979 Y ya sabéis como 107 00:04:09,979 --> 00:04:12,120 Lo sabéis desde hace dos meses o tres meses 108 00:04:12,120 --> 00:04:13,539 Haciendo yo 109 00:04:13,539 --> 00:04:15,800 el servlet, es decir 110 00:04:15,800 --> 00:04:18,060 el servlet que responde a cada 111 00:04:18,060 --> 00:04:19,360 URL que a mí me dé la gana 112 00:04:19,360 --> 00:04:21,759 al fin y al cabo que es una 113 00:04:21,759 --> 00:04:24,019 aplicación construida 114 00:04:24,019 --> 00:04:26,019 en un servidor web, alguien que 115 00:04:26,019 --> 00:04:27,939 responde a URLs, a 116 00:04:27,939 --> 00:04:29,560 peticiones HTTP, eso es una 117 00:04:29,560 --> 00:04:31,779 aplicación montada en un servidor de aplicaciones 118 00:04:31,779 --> 00:04:34,040 alguien que está ahí a la escucha de peticiones 119 00:04:34,040 --> 00:04:35,939 HTTP, bueno 120 00:04:35,939 --> 00:04:37,660 pues podemos hacer nosotros a mano 121 00:04:37,660 --> 00:04:40,040 un servlet para cada petición 122 00:04:40,040 --> 00:04:41,639 HTTP y dentro de ese servlet 123 00:04:41,639 --> 00:04:42,959 llamamos a nuestro servicio 124 00:04:42,959 --> 00:04:45,620 Y construimos la respuesta 125 00:04:45,620 --> 00:04:47,540 La construimos 126 00:04:47,540 --> 00:04:51,279 Y eso es lo que está por debajo de todo 127 00:04:51,279 --> 00:04:52,079 Como ya sabemos 128 00:04:52,079 --> 00:04:54,920 Entonces que no queremos hacer nosotros nuestros servlets 129 00:04:54,920 --> 00:04:55,639 Sino que queremos 130 00:04:55,639 --> 00:04:59,279 Una capa que nos facilite el desarrollo 131 00:04:59,279 --> 00:05:01,279 Que no haga mejor la aplicación 132 00:05:01,279 --> 00:05:02,680 Pero si facilite el desarrollo 133 00:05:02,680 --> 00:05:05,120 Pues Spring como tiene de todo 134 00:05:05,120 --> 00:05:06,120 Pues tiene su 135 00:05:06,120 --> 00:05:07,980 Spring MVC 136 00:05:07,980 --> 00:05:09,680 Es decir modelo vista controlador 137 00:05:09,680 --> 00:05:12,019 Tiene su parte 138 00:05:12,019 --> 00:05:15,560 para facilitarte el desarrollo de aplicaciones 139 00:05:15,560 --> 00:05:17,379 con arquitectura modelo vista controlador 140 00:05:17,379 --> 00:05:18,839 que son las aplicaciones web 141 00:05:18,839 --> 00:05:20,879 y los microservicios en general 142 00:05:20,879 --> 00:05:22,860 ¿Vale? 143 00:05:23,379 --> 00:05:25,180 Bueno, pues entonces vamos a 144 00:05:25,180 --> 00:05:27,759 a pasarlo, arquitectura de aplicación 145 00:05:27,759 --> 00:05:29,579 modelo vista controlador, lo que es lo mismo 146 00:05:29,579 --> 00:05:32,279 aplicación que va a estar desplegada 147 00:05:32,279 --> 00:05:33,540 en un servidor web 148 00:05:33,540 --> 00:05:35,379 y va a responder a peticiones 149 00:05:35,379 --> 00:05:37,720 y va el controlador 150 00:05:37,720 --> 00:05:39,519 va a recoger esas peticiones 151 00:05:39,519 --> 00:05:40,639 va a cambiar el modelo 152 00:05:40,639 --> 00:05:42,360 o iba a devolver el resultado 153 00:05:42,360 --> 00:05:44,439 pues vamos a pasarlo a esa 154 00:05:44,439 --> 00:05:46,560 arquitectura, entonces como vamos a usar 155 00:05:46,560 --> 00:05:48,399 sprint por 156 00:05:48,399 --> 00:05:50,500 baguería y comodidad y todo eso 157 00:05:50,500 --> 00:05:52,699 y porque realmente es lo que 158 00:05:52,699 --> 00:05:54,480 se usa, pues 159 00:05:54,480 --> 00:05:56,680 ahora ya lo podríamos hacer en nuestro 160 00:05:56,680 --> 00:05:58,459 eclipse de toda la vida, pero si es que es poner 161 00:05:58,459 --> 00:06:00,480 las carpetas y los archivos de configuración 162 00:06:00,480 --> 00:06:02,220 que son uno o dos 163 00:06:02,220 --> 00:06:04,519 uno, pero bueno vamos a hacerlo en el 164 00:06:04,519 --> 00:06:06,439 sprint tools porque 165 00:06:06,439 --> 00:06:08,459 las dependencias realmente y la 166 00:06:08,459 --> 00:06:10,500 creación de las carpetas, pero si es que 167 00:06:10,500 --> 00:06:11,720 ahorras mucho, ahorras 168 00:06:11,720 --> 00:06:14,339 que te mete las dependencias en el POM 169 00:06:14,339 --> 00:06:16,279 porque tú las has marcado en un TIC 170 00:06:16,279 --> 00:06:18,779 y que te hace la arquitectura de carpetas 171 00:06:18,779 --> 00:06:20,620 y te crea un Application Properties 172 00:06:20,620 --> 00:06:22,939 vacío, que lo tienes que rellenar, no ahorras más 173 00:06:22,939 --> 00:06:29,079 en realidad lo estuve con el Application Properties 174 00:06:29,079 --> 00:06:30,579 sí, pero es que eso no me lo habría 175 00:06:30,579 --> 00:06:32,079 arreglado el Sprint Tools 176 00:06:32,079 --> 00:06:34,279 no, me habría dado 177 00:06:34,279 --> 00:06:36,019 un Application Properties vacío 178 00:06:36,019 --> 00:06:38,139 entonces yo, por comodidad 179 00:06:38,139 --> 00:06:40,279 se lo habría pedido otra vez 180 00:06:40,279 --> 00:06:41,899 hacha GPT, lo habría copiado 181 00:06:41,899 --> 00:06:44,399 porque el problema no era el POM, el POM estaba bien 182 00:06:44,399 --> 00:06:46,480 vale 183 00:06:46,480 --> 00:06:48,540 bueno 184 00:06:48,540 --> 00:06:49,339 pues entonces 185 00:06:49,339 --> 00:06:51,920 antes que nada 186 00:06:51,920 --> 00:06:56,230 para hacer nuestras pruebas 187 00:06:56,230 --> 00:06:58,250 y todo eso, vamos a coger una base de datos 188 00:06:58,250 --> 00:06:59,930 sencilla, vale 189 00:06:59,930 --> 00:07:00,649 para 190 00:07:00,649 --> 00:07:04,629 os la puedo 191 00:07:04,629 --> 00:07:05,709 pasar, es esta 192 00:07:05,709 --> 00:07:07,649 alumnos matrículas 193 00:07:07,649 --> 00:07:09,949 pero yo creo que la 194 00:07:09,949 --> 00:07:12,149 hacéis mucho antes, si la escribís 195 00:07:12,149 --> 00:07:13,990 a mano, ¿vale? Mucho antes 196 00:07:13,990 --> 00:07:15,910 por eso no he subido el script, porque 197 00:07:15,910 --> 00:07:17,149 entonces 198 00:07:17,149 --> 00:07:25,839 y luego ya sí que propondremos unas bases 199 00:07:25,839 --> 00:07:28,040 de datos con más relaciones, un poquito más 200 00:07:28,040 --> 00:07:29,879 para ya que trabajéis 201 00:07:29,879 --> 00:07:31,680 vosotros y trabajar de cara a esa 202 00:07:31,680 --> 00:07:34,120 semana que nos queda un poco de repaso 203 00:07:34,120 --> 00:07:36,000 compendio general 204 00:07:36,000 --> 00:07:37,620 de todo esto 205 00:07:37,620 --> 00:07:39,800 alumnos 206 00:07:39,800 --> 00:07:49,949 matrículas, venga 207 00:07:49,949 --> 00:07:51,870 pues esta sencillita 208 00:07:51,870 --> 00:07:55,980 para ver cómo funcionan las cosas 209 00:07:55,980 --> 00:08:00,829 complicar el modelo 210 00:08:00,829 --> 00:08:02,730 no complica la aplicación 211 00:08:02,730 --> 00:08:03,850 en realidad complica 212 00:08:03,850 --> 00:08:06,750 en todo caso la generación 213 00:08:06,750 --> 00:08:07,990 de las clases con las anotaciones 214 00:08:07,990 --> 00:08:10,389 pero es que son cuatro anotaciones que no funcionan igual 215 00:08:10,389 --> 00:08:14,329 vale, pues nada 216 00:08:14,329 --> 00:08:15,949 alumnos matrículas 217 00:08:15,949 --> 00:08:18,569 lo más fácil, alumnos con tres campos 218 00:08:18,569 --> 00:08:20,470 uno clave primaria autoincrement 219 00:08:20,470 --> 00:08:21,149 dos string 220 00:08:21,149 --> 00:08:24,009 y matrículas con cuatro campos 221 00:08:24,009 --> 00:08:25,290 clave primaria autoincrement 222 00:08:25,290 --> 00:08:27,509 y uno de ellos clave ajena alumno 223 00:08:27,509 --> 00:08:28,769 y así tenemos 224 00:08:28,769 --> 00:08:32,409 alumnos que contienen matrículas 225 00:08:32,409 --> 00:08:34,309 y ya está 226 00:08:34,309 --> 00:08:36,190 y la matrícula pertenece a un alumno 227 00:08:36,190 --> 00:08:38,429 una relación de un alumno 228 00:08:38,429 --> 00:08:39,730 muchas matrículas 229 00:08:39,730 --> 00:08:42,519 y ya está 230 00:08:42,519 --> 00:09:01,330 ¿qué pasó? 231 00:09:48,990 --> 00:09:49,629 dígame 232 00:09:49,629 --> 00:09:57,429 Sí, los dos, que es la acción más natural. 233 00:09:57,909 --> 00:10:01,710 Al margen de que haya algo que identifique de forma única al alumno, que podría ser el email, 234 00:10:02,190 --> 00:10:06,129 lo normal es que la clave no sea un elemento de negocio, que se llama. 235 00:10:06,570 --> 00:10:09,870 El email es un elemento de negocio, pues tus alumnos tienen email, tienen no sé qué, 236 00:10:10,350 --> 00:10:12,669 sino que sea un código más insignificado. 237 00:10:13,370 --> 00:10:15,870 Y además con la garantía de que sea único, pues autoincrementa. 238 00:10:16,409 --> 00:10:16,970 ¿Vale? 239 00:10:16,970 --> 00:10:19,769 claves primaria 240 00:10:19,769 --> 00:10:21,970 información y códigos internos 241 00:10:21,970 --> 00:10:22,970 resto de campos 242 00:10:22,970 --> 00:10:25,710 lógica de negocio de mi aplicación 243 00:10:25,710 --> 00:10:28,110 normalmente, principios 244 00:10:28,110 --> 00:10:29,950 como siempre, principios que luego se pueden 245 00:10:29,950 --> 00:10:30,850 respetar o no, depende 246 00:10:30,850 --> 00:10:32,870 ¿eh? 247 00:10:34,350 --> 00:10:35,409 sí, un date 248 00:10:35,409 --> 00:10:37,889 lo he puesto a propósito pues para que tampoco 249 00:10:37,889 --> 00:10:39,730 nos asuste si JPA va a lo va a 250 00:10:39,730 --> 00:10:40,549 pear, sin problema 251 00:10:40,549 --> 00:10:45,360 vale 252 00:10:45,360 --> 00:10:46,700 ¿lo tenéis? 253 00:11:24,990 --> 00:11:26,629 Sí, sí, los dos 254 00:11:26,629 --> 00:11:28,509 Lo que decíamos antes 255 00:11:28,509 --> 00:11:42,019 Uy, tenía que haber pausado esto 256 00:11:42,019 --> 00:11:43,460 Venga 257 00:11:43,460 --> 00:11:45,320 Pues ahora 258 00:11:45,320 --> 00:11:47,779 Vamos a empezar nuestro proyecto 259 00:11:47,779 --> 00:11:48,379 ¿Vale? 260 00:11:49,480 --> 00:11:50,620 Pues nada 261 00:11:50,620 --> 00:11:54,960 ¿Vale? Si estamos en 262 00:11:54,960 --> 00:11:57,139 En 263 00:11:57,139 --> 00:11:58,679 El Eclipse 264 00:11:58,679 --> 00:12:01,500 ¿Vale? Pues en el Eclipse 265 00:12:01,500 --> 00:12:03,299 Para tener la funcionalidad 266 00:12:03,299 --> 00:12:04,820 De un Tomcat embebido 267 00:12:04,820 --> 00:12:06,019 Para poder ejecutarlo 268 00:12:06,019 --> 00:12:09,100 Y todo eso 269 00:12:09,100 --> 00:12:11,220 Y para tener la librería de ese Tomcat 270 00:12:11,220 --> 00:12:13,679 Que necesitamos para todas las 271 00:12:13,679 --> 00:12:14,700 Clasificaciones con HTTP 272 00:12:14,700 --> 00:12:17,580 Si estuvieramos en Eclipse, pues le daríamos el Eclipse ID 273 00:12:17,580 --> 00:12:19,419 Por Web Developer, pues ya está 274 00:12:19,419 --> 00:12:20,740 Ahí hacemos nuestro nuevo 275 00:12:20,740 --> 00:12:23,559 Web Dynamic Project, le ponemos la estructura 276 00:12:23,559 --> 00:12:25,000 De carpetas que nos dé la gana 277 00:12:25,000 --> 00:12:26,759 Y se acabó 278 00:12:26,759 --> 00:12:29,440 Pero si estamos en el este 279 00:12:29,440 --> 00:12:30,759 Pues 280 00:12:30,759 --> 00:12:32,879 Ya sabéis que lo lanzamos así 281 00:12:32,879 --> 00:12:35,440 Porque esto me permite 282 00:12:35,440 --> 00:12:37,440 conectarme a esta página web 283 00:12:37,440 --> 00:12:39,539 que me construye el proyecto 284 00:12:39,539 --> 00:12:40,679 con las dependencias 285 00:12:40,679 --> 00:12:42,320 y yo ya lo 286 00:12:42,320 --> 00:12:45,419 vale, pues este lo voy a llamar clase 287 00:12:45,419 --> 00:12:47,159 vale 288 00:12:47,159 --> 00:12:48,820 llamadlo como te la gane 289 00:12:48,820 --> 00:12:58,450 package 290 00:12:58,450 --> 00:13:00,210 raíz, este 291 00:13:00,210 --> 00:13:02,169 vale, si le queréis quitar el app 292 00:13:02,169 --> 00:13:04,370 que el package raíz sea condam 2, da igual 293 00:13:04,370 --> 00:13:14,679 bueno, pues venga 294 00:13:14,679 --> 00:13:18,899 ahora viene lo interesante 295 00:13:18,899 --> 00:13:20,799 que es, que dependencias vamos a usar 296 00:13:20,799 --> 00:13:23,559 Esta obviamente 297 00:13:23,559 --> 00:13:25,440 Si no os aparece aquí 298 00:13:25,440 --> 00:13:27,100 Porque no habréis usado 299 00:13:27,100 --> 00:13:28,960 Aquí aparecen las últimas que usaste 300 00:13:28,960 --> 00:13:30,679 Si no os aparece nada 301 00:13:30,679 --> 00:13:32,940 Pues ya sabéis que tenéis que buscar 302 00:13:32,940 --> 00:13:33,899 Aquí a mano 303 00:13:33,899 --> 00:13:36,679 Y aquí a mano pues buscáis en SQL 304 00:13:36,679 --> 00:13:38,720 Y os aparece JDBC API 305 00:13:38,720 --> 00:13:39,899 Esta la queremos 306 00:13:39,899 --> 00:13:42,480 ¿Qué más queremos? 307 00:13:42,740 --> 00:13:43,940 Spring Data JPA 308 00:13:43,940 --> 00:13:45,860 Lógicamente eso lo vamos a usar 309 00:13:45,860 --> 00:13:47,759 Spring Data JPA 310 00:13:47,759 --> 00:13:50,440 Spring Data JDBC no, recordad que 311 00:13:50,440 --> 00:13:52,779 SpringDapta JDBC era esa capita ligera 312 00:13:52,779 --> 00:13:54,580 Que te 313 00:13:54,580 --> 00:13:56,879 Hacía un ORM ligero 314 00:13:56,879 --> 00:13:58,019 Que vimos en su momento 315 00:13:58,019 --> 00:14:00,200 Que a través de una 316 00:14:00,200 --> 00:14:01,679 Función lambda tú 317 00:14:01,679 --> 00:14:04,279 Hacías a mano la correspondencia entre 318 00:14:04,279 --> 00:14:06,019 Clase y tabla 319 00:14:06,019 --> 00:14:09,480 ¿Cómo lo he llamado yo? 320 00:14:09,899 --> 00:14:12,039 A ver, yo lo he llamado unidad 3 res 321 00:14:12,039 --> 00:14:13,419 Alumnos, matrículas, clase 322 00:14:13,419 --> 00:14:15,679 Pero bueno, tú como te quieras organizar 323 00:14:15,679 --> 00:14:18,200 Yo es que lo llamo así porque si no luego no los distingo 324 00:14:18,200 --> 00:14:19,100 Unos de otros ahí 325 00:14:19,100 --> 00:14:20,419 Vale 326 00:14:20,419 --> 00:14:22,740 Esto es por las pruebas que hago en casa 327 00:14:22,740 --> 00:14:24,340 Para no confundir mis pruebas de casa 328 00:14:24,340 --> 00:14:25,740 Que son un mogollón 329 00:14:25,740 --> 00:14:28,600 Con esto que se supone que es más organizado 330 00:14:28,600 --> 00:14:29,679 Vale 331 00:14:29,679 --> 00:14:34,580 Vale 332 00:14:34,580 --> 00:14:40,059 Como estamos usando MySQL 333 00:14:40,059 --> 00:14:41,039 Pues MySQL 334 00:14:41,039 --> 00:14:42,480 Vale 335 00:14:42,480 --> 00:14:45,940 MySQL 336 00:14:45,940 --> 00:14:47,159 JDBC 337 00:14:47,159 --> 00:14:48,779 Todas estas capas las tenemos 338 00:14:48,779 --> 00:14:51,799 JDBC API, Spring Data JPA 339 00:14:51,799 --> 00:14:53,879 Que Spring Data JPA te incluye 340 00:14:53,879 --> 00:14:55,620 Dentro de las de hibernate, porque recordad 341 00:14:55,620 --> 00:14:57,679 Que JPA no es nadie, sin hibernate 342 00:14:57,679 --> 00:14:58,960 Por debajo, toda por libro 343 00:14:58,960 --> 00:15:01,200 Spring Data JPA te lo incluye 344 00:15:01,200 --> 00:15:03,700 Vale, entonces de aquí 345 00:15:03,700 --> 00:15:04,860 Todo, pero es que ahora 346 00:15:04,860 --> 00:15:07,679 Nuestra arquitectura, va a ser una arquitectura 347 00:15:07,679 --> 00:15:09,659 De modelo vista controlador, esto lo vamos a 348 00:15:09,659 --> 00:15:11,100 Ejecutar en un servidor web 349 00:15:11,100 --> 00:15:13,179 Entonces necesitamos 350 00:15:13,179 --> 00:15:15,659 Esta dependencia, vale 351 00:15:15,659 --> 00:15:18,179 La de Spring Web, que esa dependencia 352 00:15:18,179 --> 00:15:19,940 Pues por ahí abajo 353 00:15:19,940 --> 00:15:24,620 Quien no la tenga ahí ofrecida 354 00:15:24,620 --> 00:15:26,919 Pues la tendrá por aquí 355 00:15:26,919 --> 00:15:29,200 ¿Vale? 356 00:15:32,740 --> 00:15:34,580 Ah, jolines, está el primero de todos 357 00:15:34,580 --> 00:15:36,259 Vale 358 00:15:36,259 --> 00:15:38,360 En principio 359 00:15:38,360 --> 00:15:41,440 Esto es lo básico, no nos hace falta nada más 360 00:15:41,440 --> 00:15:43,100 Para hacer, en nuestro caso 361 00:15:43,100 --> 00:15:44,340 En lugar de una aplicación web 362 00:15:44,340 --> 00:15:46,679 Que es más pesada, porque tenemos que hacer 363 00:15:46,679 --> 00:15:49,600 El contenido web, las páginas HTML 364 00:15:49,600 --> 00:15:52,960 y luego tenemos que construir 365 00:15:52,960 --> 00:15:55,019 desde el controller el resultado 366 00:15:55,019 --> 00:15:56,899 que es más pesado 367 00:15:56,899 --> 00:15:59,000 porque además si no lo queremos hacer a mano y tenemos que usar 368 00:15:59,000 --> 00:16:00,360 un framework como TimeLeap 369 00:16:00,360 --> 00:16:03,139 pues bueno, tampoco lo conocemos al milímetro 370 00:16:03,139 --> 00:16:05,019 pues vamos a hacer un 371 00:16:05,019 --> 00:16:06,539 servicio, un microservicio 372 00:16:06,539 --> 00:16:08,799 ya está, punto pelota, entonces el microservicio 373 00:16:08,799 --> 00:16:10,419 es mucho más fácil porque 374 00:16:10,419 --> 00:16:12,279 el microservicio 375 00:16:12,279 --> 00:16:14,960 tú no lo llamas 376 00:16:14,960 --> 00:16:16,799 mediante un formulario 377 00:16:16,799 --> 00:16:18,299 que has construido en una página web 378 00:16:18,299 --> 00:16:20,399 al microservicio lo llamas 379 00:16:20,399 --> 00:16:22,299 con una URL directamente, con lo cual 380 00:16:22,299 --> 00:16:24,320 lo puede llamar una aplicación 381 00:16:24,320 --> 00:16:26,620 o lo puedes llamar tú desde el navegador 382 00:16:26,620 --> 00:16:28,379 ¿vale? y el microservicio 383 00:16:28,379 --> 00:16:30,179 te devuelve un resultado tal cual 384 00:16:30,179 --> 00:16:32,159 que no es una página web, normalmente si es 385 00:16:32,159 --> 00:16:34,139 un REST o es un JSON 386 00:16:34,139 --> 00:16:36,259 lo que te devuelve, pero hay 387 00:16:36,259 --> 00:16:38,360 más arquitecturas de microservicios 388 00:16:38,360 --> 00:16:40,000 aparte de las API REST, no es 389 00:16:40,000 --> 00:16:41,500 lo único que existe en el mundo 390 00:16:41,500 --> 00:16:44,019 pero efectivamente es la más usada 391 00:16:44,019 --> 00:16:46,500 bueno, pues no necesitamos nada más 392 00:16:46,500 --> 00:16:48,200 para hacer eso, pues venga 393 00:16:48,200 --> 00:16:50,580 Yo creo que esto está todo 394 00:16:50,580 --> 00:16:53,700 Él nos va a hacer nuestro zip 395 00:16:53,700 --> 00:16:55,139 Nos lo va a descargar 396 00:16:55,139 --> 00:16:56,940 Y nos lo va a montar aquí en un ratinín 397 00:16:56,940 --> 00:16:59,840 Así es 398 00:16:59,840 --> 00:17:02,340 Todo por no irnos nosotros 399 00:17:02,340 --> 00:17:04,279 A la página web, ponerle los datos 400 00:17:04,279 --> 00:17:06,259 Y coger el zip y desplegarlo aquí 401 00:17:06,259 --> 00:17:07,319 Que también podríamos hacerlo 402 00:17:07,319 --> 00:17:09,839 De hecho si 403 00:17:09,839 --> 00:17:11,920 Trabajáramos con el eclipse 404 00:17:11,920 --> 00:17:13,079 En lugar de con este 405 00:17:13,079 --> 00:17:15,660 Pues sería tan fácil como irse a esa web 406 00:17:15,660 --> 00:17:17,819 Darle los datos, coger el zip 407 00:17:17,819 --> 00:17:19,359 Y desplegarlo en mi eclipse 408 00:17:19,359 --> 00:17:20,619 Y ya está, estaríamos igual 409 00:17:20,619 --> 00:17:21,940 A partir de ahí ya no 410 00:17:21,940 --> 00:17:26,160 Y interye pues es lo mismo 411 00:17:26,160 --> 00:17:34,000 Vale, pues ya 412 00:17:34,000 --> 00:17:36,940 Nos hizo la aplicación 413 00:17:36,940 --> 00:17:39,819 Entonces, ¿qué arquitectura nos ha puesto? 414 00:17:39,880 --> 00:17:41,279 A ver si no me confundo con la de arriba 415 00:17:41,279 --> 00:17:41,980 En toda la mañana 416 00:17:41,980 --> 00:17:46,470 Nos ha puesto el paquete raíz 417 00:17:46,470 --> 00:17:51,500 Que es el que lanza la aplicación 418 00:17:51,500 --> 00:17:52,660 El que llama Spring Boot 419 00:17:52,660 --> 00:17:55,579 Cuando esta aplicación se lance 420 00:17:55,579 --> 00:17:57,759 Se ejecutará este main 421 00:17:57,759 --> 00:17:59,920 Y este main 422 00:17:59,920 --> 00:18:01,779 Llama Spring Boot automáticamente 423 00:18:01,779 --> 00:18:03,500 Porque para eso está anotado aquí arriba 424 00:18:03,500 --> 00:18:04,819 ¿Vale? 425 00:18:05,180 --> 00:18:07,579 Y así se crea ya el contexto 426 00:18:07,579 --> 00:18:09,519 Spring de gestión de 427 00:18:09,519 --> 00:18:10,819 Bins y toda la morralla 428 00:18:10,819 --> 00:18:13,519 Y nosotros ya a partir 429 00:18:13,519 --> 00:18:17,160 De aquí, lo único que tendríamos 430 00:18:17,160 --> 00:18:19,119 Que hacer, si la queremos 431 00:18:19,119 --> 00:18:20,799 Como aplicación 432 00:18:20,799 --> 00:18:23,880 De escritorio 433 00:18:23,880 --> 00:18:25,180 A partir de aquí 434 00:18:25,180 --> 00:18:26,619 Pondríamos ya nuestro código 435 00:18:26,619 --> 00:18:28,339 Nuestra llamada, lo que fuera, ¿vale? 436 00:18:28,380 --> 00:18:30,460 Pero no vamos a ejecutar nuestro servicio 437 00:18:30,460 --> 00:18:31,680 Con aplicación de escritorio 438 00:18:31,680 --> 00:18:32,940 Con lo cual 439 00:18:32,940 --> 00:18:36,589 Capitán 440 00:18:36,589 --> 00:18:44,390 Vale 441 00:18:44,390 --> 00:18:45,990 Bueno, pues nada 442 00:18:45,990 --> 00:18:48,289 ¿Qué más nos ha hecho? El properties 443 00:18:48,289 --> 00:18:49,789 Y no nos ha hecho nada, bueno, y el pom 444 00:18:49,789 --> 00:18:51,910 El pom que nos ha metido aquí 445 00:18:51,910 --> 00:18:54,390 Dependencias para aburrir, ¿vale? 446 00:18:55,250 --> 00:18:56,809 Todo esto nos ha metido 447 00:18:56,809 --> 00:18:58,750 Estas miles de millones 448 00:18:58,750 --> 00:19:00,990 Solo para hacer eso 449 00:19:00,990 --> 00:19:08,029 Y nos ha metido el properties 450 00:19:08,029 --> 00:19:09,950 Que el properties 451 00:19:09,950 --> 00:19:14,259 El properties no tiene nada 452 00:19:14,259 --> 00:19:17,119 Entonces el properties no tiene nada 453 00:19:17,119 --> 00:19:19,759 Aquí es donde tenemos que configurar nosotros 454 00:19:19,759 --> 00:19:20,859 Nuestra fuente de datos 455 00:19:20,859 --> 00:19:22,259 Y cualquier otra cosa que queramos 456 00:19:22,259 --> 00:19:23,140 ¿Vale? 457 00:19:24,400 --> 00:19:24,960 Entonces 458 00:19:24,960 --> 00:19:27,940 Pues esto, la configuración básica 459 00:19:27,940 --> 00:19:29,319 De la fuente de datos 460 00:19:29,319 --> 00:19:30,440 Que es la única importante 461 00:19:30,440 --> 00:19:33,660 Como tendréis 462 00:19:33,660 --> 00:19:36,440 Tendréis 463 00:19:36,440 --> 00:19:38,480 Algunos de estos proyectos 464 00:19:38,480 --> 00:19:39,259 Lo hicimos aquí 465 00:19:39,259 --> 00:19:41,220 Con lo cual 466 00:19:41,220 --> 00:19:43,220 Ah, pero estos no eran con 467 00:19:43,220 --> 00:19:48,480 El de, no, digo en el trans 468 00:19:48,480 --> 00:19:50,640 El trans lo hicimos aquí 469 00:19:50,640 --> 00:19:52,579 Y en este si usamos base de datos 470 00:19:52,579 --> 00:19:53,660 Porque este era 471 00:19:53,660 --> 00:19:57,079 El de, el que usamos la capa 472 00:19:57,079 --> 00:19:58,599 De Spring JBBC 473 00:19:58,599 --> 00:19:59,579 ¿Vale? 474 00:20:00,099 --> 00:20:02,200 Entonces en este que lo debéis tener 475 00:20:02,200 --> 00:20:08,339 Pues pusimos lo 476 00:20:08,339 --> 00:20:09,940 Básico para JDBC 477 00:20:09,940 --> 00:20:14,789 Pues podéis copiarlo y pegarlo 478 00:20:14,789 --> 00:20:19,039 Y nuestra base de datos 479 00:20:19,039 --> 00:20:21,079 Ahora no es coches, sino que es 480 00:20:21,079 --> 00:20:23,339 Alumnos 481 00:20:23,339 --> 00:20:24,140 Barra baja 482 00:20:24,140 --> 00:20:26,099 Matrículas 483 00:20:26,099 --> 00:20:32,859 Si 484 00:20:32,859 --> 00:20:35,039 Si tienes el GPT abierto 485 00:20:35,039 --> 00:20:36,180 Pídeselo y ya está 486 00:20:36,180 --> 00:20:38,140 Vale 487 00:20:38,140 --> 00:20:44,549 Pues esto 488 00:20:44,549 --> 00:20:47,069 Vale, esto sería lo básico 489 00:20:47,069 --> 00:21:03,640 Vale, luego se pueden configurar 490 00:21:03,640 --> 00:21:04,740 muchas más cosas 491 00:21:04,740 --> 00:21:07,680 para Spring Boot, pues relacionadas con 492 00:21:07,680 --> 00:21:09,779 si va a mostrar 493 00:21:09,779 --> 00:21:11,700 el código SQL o no lo va a mostrar 494 00:21:11,700 --> 00:21:12,980 lo que siempre poníamos 495 00:21:12,980 --> 00:21:17,500 si va a crear 496 00:21:17,500 --> 00:21:19,599 la base de datos en caso 497 00:21:19,599 --> 00:21:20,859 de que no esté hecha o no 498 00:21:20,859 --> 00:21:23,559 ¿vale? estas cosas 499 00:21:23,559 --> 00:21:24,859 que teníamos yo por ahora 500 00:21:24,859 --> 00:21:27,660 lo vamos a dejar sin poner 501 00:21:27,660 --> 00:21:29,519 porque no sé por 502 00:21:29,519 --> 00:21:31,319 defecto, el show SQL 503 00:21:31,319 --> 00:21:33,319 si queremos que nos lo muestre, pero no sé si por defecto 504 00:21:33,319 --> 00:21:37,759 lo pone a truco no vamos a dejarlo sin poner y si no nos lo sacan las pruebas ya se lo ponemos 505 00:21:37,759 --> 00:21:42,940 para poder ver el log de sql que queremos verlo en las pruebas por ahora ponemos lo mínimo y se 506 00:21:42,940 --> 00:21:52,940 acabó vale estamos en modo examen vale venga pues entonces ahora ya sí que si empezamos a 507 00:21:52,940 --> 00:21:54,700 a hacer nuestra aplicación y siempre 508 00:21:54,700 --> 00:21:56,220 lo primero es 509 00:21:56,220 --> 00:22:02,390 el modelo. 510 00:22:03,390 --> 00:22:04,690 El modelo, ¿vale? 511 00:22:07,250 --> 00:22:08,130 Pues venga. 512 00:22:08,910 --> 00:22:10,630 Esto como de las cartetas, porque 513 00:22:10,630 --> 00:22:12,430 era como que tenía que ser... 514 00:22:12,430 --> 00:22:14,569 Claro, si es Spring Boot, 515 00:22:14,869 --> 00:22:17,029 si no es Spring Boot, no, porque tú en la configuración 516 00:22:17,029 --> 00:22:18,930 ya haces un componente scan y ahí puedes 517 00:22:18,930 --> 00:22:20,829 poner los paquetes base que te den la gana. 518 00:22:21,390 --> 00:22:22,470 Pero si es Spring Boot, 519 00:22:22,809 --> 00:22:24,809 Spring Boot necesita que 520 00:22:24,809 --> 00:22:27,049 todo cuelgue de donde 521 00:22:27,049 --> 00:22:29,210 creas el contexto. Si el 522 00:22:29,210 --> 00:22:31,150 contexto está creado en condam2app 523 00:22:31,150 --> 00:22:33,250 el resto de paquetes donde hay 524 00:22:33,250 --> 00:22:35,430 beams 525 00:22:35,430 --> 00:22:37,309 escaneables tiene que ser ahí. 526 00:22:38,130 --> 00:22:38,329 ¿Vale? 527 00:22:39,410 --> 00:22:40,009 Entonces 528 00:22:40,009 --> 00:22:43,410 con.dam2.app 529 00:22:43,410 --> 00:22:44,670 .model 530 00:22:44,670 --> 00:22:45,849 ¿Vale? 531 00:22:47,210 --> 00:22:48,609 Nos ponemos todos desde app. 532 00:22:48,950 --> 00:22:51,130 A ver, no es necesario que 533 00:22:51,130 --> 00:22:53,109 estuvieran todos. En realidad solo los que tienen 534 00:22:53,109 --> 00:22:55,069 beams que va a gestionar sprint. 535 00:22:55,549 --> 00:22:56,910 Pero un poquito también para 536 00:22:56,910 --> 00:22:59,029 Coherencia un poco del modelo 537 00:22:59,029 --> 00:22:59,789 Y por todo 538 00:22:59,789 --> 00:23:02,990 Venga, pues aquí, el modelo de esto 539 00:23:02,990 --> 00:23:05,069 Vamos a hacer 540 00:23:05,069 --> 00:23:06,910 Seguramente más rápidos 541 00:23:06,910 --> 00:23:07,829 Haciéndolo a mano 542 00:23:07,829 --> 00:23:11,470 Poniéndole una foto a HGPT del diagrama 543 00:23:11,470 --> 00:23:13,190 Y que nos lo deis en anotaciones para anotarla 544 00:23:13,190 --> 00:23:15,309 ¿No? Vamos a hacer seguramente 545 00:23:15,309 --> 00:23:16,930 Pues venga, vamos a empezar 546 00:23:16,930 --> 00:23:19,490 Con, yo que sé, con alumnos 547 00:23:19,490 --> 00:23:20,309 Por ejemplo 548 00:23:20,309 --> 00:23:23,869 Pues hacemos nuestra nueva clase 549 00:23:23,869 --> 00:23:25,069 Alumno 550 00:23:25,069 --> 00:23:25,829 Vale 551 00:23:25,829 --> 00:23:30,099 Nuestra clase alumno tiene 552 00:23:30,099 --> 00:23:34,339 Su ID 553 00:23:34,339 --> 00:23:39,299 ¿Eh? 554 00:23:41,700 --> 00:23:42,339 Supongo 555 00:23:42,339 --> 00:23:45,400 A ver, supongo porque le pasamos el script 556 00:23:45,400 --> 00:23:46,720 El otro día y el 557 00:23:46,720 --> 00:23:48,599 ChaGPT nos lo devolvió como long 558 00:23:48,599 --> 00:23:50,200 Pero vamos, tiene toda la pinta 559 00:23:50,200 --> 00:23:53,099 Pero en cualquier caso 560 00:23:53,099 --> 00:23:54,539 Los mapeos entre enteros 561 00:23:54,539 --> 00:23:56,339 Son relativamente flexibles 562 00:23:56,339 --> 00:23:59,599 Si, pero si no ponen 563 00:23:59,599 --> 00:24:01,220 Si ponen 564 00:24:01,220 --> 00:24:08,410 Ya, bueno 565 00:24:08,410 --> 00:24:11,230 Nombre, hemos dicho 566 00:24:11,230 --> 00:24:14,460 E-mail 567 00:24:14,460 --> 00:24:17,299 Estas serían las tres propiedades que tiene alumno 568 00:24:17,299 --> 00:24:19,759 Y ya podemos avanzar 569 00:24:19,759 --> 00:24:20,500 Que tiene 570 00:24:20,500 --> 00:24:23,380 ¿El qué? Una lista de matrículas 571 00:24:23,380 --> 00:24:24,559 Porque hay una clave ajena 572 00:24:24,559 --> 00:24:29,059 Matrícula, ya podemos avanzar esto 573 00:24:29,059 --> 00:24:30,900 Matrículas 574 00:24:31,579 --> 00:24:34,359 Y ya que estamos 575 00:24:34,359 --> 00:24:37,000 Pues vamos a asegurarnos 576 00:24:37,000 --> 00:24:38,480 Una inicialización 577 00:24:38,480 --> 00:24:46,599 Vale 578 00:24:46,599 --> 00:24:49,099 El constructor sin parámetros 579 00:24:49,099 --> 00:24:50,680 Ya sabemos que cuando se trata de hibernate 580 00:24:50,680 --> 00:24:52,079 El constructor sin parámetros 581 00:24:52,079 --> 00:24:54,420 Tardo o temprano te lo va a pedir 582 00:24:54,420 --> 00:24:57,279 Porque hibernate instancia siempre con constructor sin parámetros 583 00:24:57,279 --> 00:24:58,660 Con lo cual 584 00:24:58,660 --> 00:25:00,099 Si yo lo dejo así, vale 585 00:25:00,099 --> 00:25:02,619 Pero si le pongo un constructor con parámetros 586 00:25:02,619 --> 00:25:03,920 Que 587 00:25:03,920 --> 00:25:06,519 Eso sí ya, que puede ser útil 588 00:25:06,519 --> 00:25:08,440 Por código, pues entonces 589 00:25:08,440 --> 00:25:14,420 le voy a quitar en el constructor este 590 00:25:14,420 --> 00:25:19,180 esto que es muy feo, instanciar un alumno ya con sus matrículas 591 00:25:19,180 --> 00:25:23,279 es un poco feo, y hacemos el constructor normal 592 00:25:23,279 --> 00:25:32,579 y los get y set 593 00:25:32,579 --> 00:25:57,420 de todo, antes de empezar con las anotaciones vamos a hacer la matrícula 594 00:25:57,420 --> 00:26:07,190 para que se nos quite este error, matrícula 595 00:26:07,190 --> 00:26:12,460 y matrícula tenía su id también 596 00:26:12,460 --> 00:26:17,230 Long porque hemos puesto 597 00:26:17,230 --> 00:26:18,569 Bing Hint en el otro lado 598 00:26:18,569 --> 00:26:23,609 Nombre, o no sé cómo se llamaba 599 00:26:23,609 --> 00:26:25,130 Ese campo, pero da igual cómo se llame 600 00:26:25,130 --> 00:26:27,390 Porque se llama asignatura 601 00:26:27,390 --> 00:26:29,549 De todas formas, vamos a cambiarlo 602 00:26:29,549 --> 00:26:30,609 Aquí, que es un poco feo 603 00:26:30,609 --> 00:26:31,170 Nombre 604 00:26:31,170 --> 00:26:37,019 No, nombre de la matrícula es feo 605 00:26:37,019 --> 00:26:38,640 No, no, no, está mucho mejor pensado 606 00:26:38,640 --> 00:26:40,859 Asignatura, claro, con razón lo llamamos así 607 00:26:40,859 --> 00:26:43,039 Vale, la matrícula 608 00:26:43,039 --> 00:26:43,960 Es de una asignatura 609 00:26:43,960 --> 00:26:46,519 Y tiene una fecha 610 00:26:46,519 --> 00:26:47,640 Vale 611 00:26:47,640 --> 00:26:50,759 Podríamos usar date y Bernat la va a mapear 612 00:26:50,759 --> 00:26:52,380 Pero bueno, local date 613 00:26:52,380 --> 00:26:54,900 Está un poco más actualizada 614 00:26:54,900 --> 00:26:57,400 Local date es de java time 615 00:26:57,400 --> 00:26:59,680 Y date es de java útil 616 00:26:59,680 --> 00:27:00,980 Que es la que se ha usado de toda la vida 617 00:27:00,980 --> 00:27:02,680 Pero java time es un paquete 618 00:27:02,680 --> 00:27:05,599 Un poquito más actualizado para trabajar con fechas 619 00:27:05,599 --> 00:27:08,619 A la fecha de la matrícula 620 00:27:08,619 --> 00:27:12,990 Y ya sabemos 621 00:27:12,990 --> 00:27:15,390 Que la matrícula pertenece a un alumno 622 00:27:15,390 --> 00:27:17,450 Porque es una relación de uno a muchos 623 00:27:17,450 --> 00:27:29,119 Nos hacemos el constructor 624 00:27:29,119 --> 00:27:38,690 Este que si no 625 00:27:38,690 --> 00:27:40,769 Nos lo va a pedir cuando tenga que instanciar 626 00:27:40,769 --> 00:27:41,690 Una matrícula nueva 627 00:27:41,690 --> 00:27:42,910 Para 628 00:27:42,910 --> 00:27:45,569 Mapearla 629 00:27:45,569 --> 00:27:47,450 Get y set 630 00:27:47,450 --> 00:27:57,500 Y a falta de hashCode, equal to string 631 00:27:57,500 --> 00:27:59,319 Esos tres métodos básicos 632 00:27:59,319 --> 00:28:00,619 A falta de eso 633 00:28:00,619 --> 00:28:03,240 Que vamos a dejarlos para 634 00:28:03,240 --> 00:28:05,240 Si luego los necesitamos 635 00:28:05,240 --> 00:28:05,960 Aunque 636 00:28:05,960 --> 00:28:09,119 Dejar entidades sin el equals 637 00:28:09,119 --> 00:28:10,779 Es un poco peligroso 638 00:28:10,779 --> 00:28:12,740 Pero bueno, vamos a dejarlo así 639 00:28:12,740 --> 00:28:13,660 A ver si detectamos 640 00:28:13,660 --> 00:28:15,640 Tenemos algún mal funcionamiento 641 00:28:15,640 --> 00:28:18,619 Y acabamos deduciendo que falta el equals 642 00:28:18,619 --> 00:28:20,680 Porque eso sí que nos va a hacer 643 00:28:20,680 --> 00:28:21,440 Aprender algo 644 00:28:21,440 --> 00:28:24,039 Somos conscientes de la importancia del equals 645 00:28:24,039 --> 00:28:24,980 Y para qué sirve 646 00:28:24,980 --> 00:28:27,420 Pero lo dejamos así 647 00:28:27,420 --> 00:28:30,680 Pues hemos lanzado 648 00:28:30,680 --> 00:28:33,299 Vale, ahora ya sí que nos ponemos a anotar 649 00:28:33,299 --> 00:28:34,119 Pues venga 650 00:28:34,119 --> 00:28:36,359 Matrícula 651 00:28:36,359 --> 00:28:38,299 Es una entidad 652 00:28:38,299 --> 00:28:40,099 ¿Vale? 653 00:28:40,839 --> 00:28:42,160 Pero, matrícula 654 00:28:42,160 --> 00:28:45,480 La tabla no se llama matrícula 655 00:28:45,480 --> 00:28:46,779 Sino que se llama matrículas 656 00:28:46,779 --> 00:28:48,180 Entonces 657 00:28:48,180 --> 00:28:52,099 Pues le ponemos nuestro nombrecito 658 00:28:52,099 --> 00:28:53,400 Matrículas 659 00:28:53,400 --> 00:28:57,380 Vale, y esto 660 00:28:57,380 --> 00:28:59,720 De Yakarta Persistence 661 00:28:59,720 --> 00:29:00,259 Muy bien 662 00:29:00,259 --> 00:29:02,559 Ah, no he mirado aquí por curiosidad 663 00:29:02,559 --> 00:29:03,940 En qué me ha puesto la máquina 664 00:29:03,940 --> 00:29:05,019 Ah, en la 21, vale 665 00:29:05,019 --> 00:29:08,039 Vale, matrículas 666 00:29:08,039 --> 00:29:09,180 Ahora los campos 667 00:29:09,180 --> 00:29:11,700 El IDE es clave primaria 668 00:29:11,700 --> 00:29:13,700 Pues si es clave primaria 669 00:29:13,700 --> 00:29:15,259 Ya sabemos que se anota con IDE 670 00:29:15,259 --> 00:29:18,680 Y ya sabemos 671 00:29:18,680 --> 00:29:20,880 Que si es autoincrement 672 00:29:20,880 --> 00:29:21,960 Había que poner 673 00:29:21,960 --> 00:29:23,940 No sé qué 674 00:29:23,940 --> 00:29:25,059 Clash patatín 675 00:29:25,059 --> 00:29:26,079 Que 676 00:29:26,079 --> 00:29:30,640 El generated value 677 00:29:30,640 --> 00:29:34,420 Venga, ahí que tenemos 678 00:29:34,420 --> 00:29:35,720 Tres horitas estupendas 679 00:29:35,720 --> 00:29:38,180 Vamos a usarlo para poner las cosas un poco más a mano 680 00:29:38,180 --> 00:29:39,759 Y así 681 00:29:39,759 --> 00:29:42,220 Que la memoria 682 00:29:42,220 --> 00:29:47,619 Juanfi coge la tercera hora de hoy 683 00:29:47,619 --> 00:29:49,380 Eso cuando os lo dijo 684 00:29:49,380 --> 00:29:57,259 No, a ver 685 00:29:57,259 --> 00:29:59,200 Claro, es que yo daba por sentado que esta hora 686 00:29:59,200 --> 00:30:00,980 Como Alejandra me la regala siempre que quiero 687 00:30:00,980 --> 00:30:03,299 Yo daba por sentado que esta hora siempre que podía cogerla 688 00:30:03,299 --> 00:30:03,740 La cojo 689 00:30:03,740 --> 00:30:05,000 Pero 690 00:30:05,000 --> 00:30:08,960 Igual es que Juanfi no sabe que yo la cojo 691 00:30:08,960 --> 00:30:09,759 De vez en cuando 692 00:30:09,759 --> 00:30:12,259 O sea, lo de Juanfi está confirmado 693 00:30:12,259 --> 00:30:16,400 Bueno, a ver 694 00:30:16,400 --> 00:30:22,589 Tú quieres ver la sangre 695 00:30:22,589 --> 00:30:23,890 ¿No? 696 00:30:25,509 --> 00:30:30,259 Por la pelea 697 00:30:30,259 --> 00:30:30,579 ¡Hala! 698 00:30:31,920 --> 00:30:32,740 Esto era 699 00:30:32,740 --> 00:30:40,240 Cuidado con las anotaciones 700 00:30:40,240 --> 00:30:40,839 ¿Vale? 701 00:30:42,039 --> 00:30:43,440 Con los import, me refiero 702 00:30:43,440 --> 00:30:45,140 Cuidado con los import 703 00:30:45,140 --> 00:30:45,960 Vale 704 00:30:45,960 --> 00:31:00,660 Espera, no, no, no 705 00:31:00,660 --> 00:31:01,220 Espérate 706 00:31:01,220 --> 00:31:02,819 Perdón, perdón, perdón 707 00:31:02,819 --> 00:31:04,619 Que me he metido con Spring aquí, perdón 708 00:31:04,619 --> 00:31:06,579 Y no estoy con Spring ahora, estoy con JPA 709 00:31:06,579 --> 00:31:08,660 ¿Vale? Sí, adelante 710 00:31:08,660 --> 00:31:11,730 Sí 711 00:31:11,730 --> 00:31:13,130 ¿Vale? 712 00:31:14,950 --> 00:31:16,190 Cuidado con los import 713 00:31:16,190 --> 00:31:18,890 Que estos errores son típicos 714 00:31:18,890 --> 00:31:20,769 Yo ahora estoy en JPA 715 00:31:20,769 --> 00:31:22,150 Esto no es Spring ni es nada 716 00:31:22,150 --> 00:31:24,390 Entonces, de lo que me ha ofrecido 717 00:31:24,390 --> 00:31:27,410 Como yo estoy con el chip ya de que está metido con Spring 718 00:31:27,410 --> 00:31:28,690 Me he metido aquí, pero que no 719 00:31:28,690 --> 00:31:31,089 Esto es JPA 720 00:31:31,089 --> 00:31:32,049 Esto es JPA 721 00:31:32,049 --> 00:31:33,549 Con lo cual esto es de Yacarta 722 00:31:33,549 --> 00:31:34,230 ¿Vale? 723 00:31:35,869 --> 00:31:37,910 Podría a lo mejor esto haberme dado un error 724 00:31:37,910 --> 00:31:38,789 Más adelante 725 00:31:38,789 --> 00:31:42,009 Y haberme estado, ni se sabe, hasta que me he dado cuenta 726 00:31:42,009 --> 00:31:43,690 De que estaba importando el ID del sitio 727 00:31:43,690 --> 00:31:45,289 No correcto, ¿vale? 728 00:31:45,349 --> 00:31:46,230 Situación habitual 729 00:31:46,230 --> 00:31:50,670 Ya está 730 00:31:50,670 --> 00:31:54,029 Y hay que cambiar algo más 731 00:31:54,029 --> 00:31:56,230 Se llaman todos los campos igual 732 00:31:56,230 --> 00:31:56,950 ¿Verdad? 733 00:31:57,650 --> 00:31:59,250 ¿Vale? Pero tenemos la clave 734 00:31:59,250 --> 00:32:01,109 ¿Alumno? 735 00:32:01,109 --> 00:32:04,089 Ah, la clave, sí, pero tenemos la clave 736 00:32:04,089 --> 00:32:06,450 El nombre de los campos 737 00:32:06,450 --> 00:32:08,269 Son igual, pero tenemos ya una clave ajena 738 00:32:08,269 --> 00:32:09,089 Que es lo que nos falta 739 00:32:09,089 --> 00:32:11,309 Entonces la clave ajena viene por aquí 740 00:32:11,309 --> 00:32:12,849 Entonces 741 00:32:12,849 --> 00:32:16,289 Esta es, muchas matrículas 742 00:32:16,289 --> 00:32:17,910 Pueden pertenecer a un mismo alumno 743 00:32:17,910 --> 00:32:20,150 Luego entonces, aquí 744 00:32:20,150 --> 00:32:21,529 Many to one, ¿vale? 745 00:32:22,269 --> 00:32:23,569 Y aquí es donde 746 00:32:23,569 --> 00:32:25,450 Configuramos 747 00:32:25,450 --> 00:32:27,289 La columna 748 00:32:27,289 --> 00:32:30,690 Joint column 749 00:32:30,690 --> 00:32:33,430 vale, entonces la columna 750 00:32:33,430 --> 00:32:36,569 que está en la tabla matrículas 751 00:32:36,569 --> 00:32:38,509 la columna que está en la tabla matrículas 752 00:32:38,509 --> 00:32:40,269 porque estamos en la clase matrículas 753 00:32:40,269 --> 00:32:41,529 que sería alumno ID 754 00:32:41,529 --> 00:32:42,950 suponemos 755 00:32:42,950 --> 00:32:44,410 vale 756 00:32:44,410 --> 00:32:46,710 y aquí 757 00:32:46,710 --> 00:32:50,369 podemos configurar unas cuantas cositas 758 00:32:50,369 --> 00:32:51,150 si nos da la gana 759 00:32:51,150 --> 00:32:54,009 el fetch type en el extremo 760 00:32:54,009 --> 00:32:55,970 many to one, recordad que 761 00:32:55,970 --> 00:32:58,069 por defecto es eager, con lo cual 762 00:32:58,069 --> 00:32:59,509 carga siempre al alumno 763 00:32:59,509 --> 00:33:02,410 queremos que cargue siempre al alumno 764 00:33:02,410 --> 00:33:04,450 cuando recuperemos 765 00:33:04,450 --> 00:33:06,170 una matrícula 766 00:33:06,170 --> 00:33:08,190 siendo uno 767 00:33:08,190 --> 00:33:10,809 no es grave, podemos dejarlo por defecto 768 00:33:10,809 --> 00:33:11,109 vale 769 00:33:11,109 --> 00:33:15,450 hay más campos que se pueden 770 00:33:15,450 --> 00:33:17,109 configurar aquí 771 00:33:17,109 --> 00:33:18,410 pues el 772 00:33:18,410 --> 00:33:21,369 el opcional, por ejemplo 773 00:33:21,369 --> 00:33:23,789 el opcional, si este campo 774 00:33:23,789 --> 00:33:25,369 es opcional o no 775 00:33:25,369 --> 00:33:26,230 si 776 00:33:26,230 --> 00:33:29,230 entonces bueno 777 00:33:29,230 --> 00:33:30,970 Ahora mismo no hay nada 778 00:33:30,970 --> 00:33:32,250 El FaceTag no es importante 779 00:33:32,250 --> 00:33:34,150 No hay nada que nos importe especialmente 780 00:33:34,150 --> 00:33:36,490 Entonces lo podemos dejar así 781 00:33:36,490 --> 00:33:37,210 Y ya está 782 00:33:37,210 --> 00:33:42,420 Nos vamos a matrícula 783 00:33:42,420 --> 00:33:43,240 Alumnos 784 00:33:43,240 --> 00:33:47,079 Aquí ya vamos a copiar esto 785 00:33:47,079 --> 00:33:51,660 Lo copiamos en ID 786 00:33:51,660 --> 00:33:55,019 Copiamos lo de Entity de matrícula 787 00:33:55,019 --> 00:33:55,980 Cambiando el nombre 788 00:33:55,980 --> 00:34:04,410 Alumnos 789 00:34:04,410 --> 00:34:10,690 Algún este cambia de nombre 790 00:34:10,690 --> 00:34:12,489 Yo creo que no hay ninguno que cambie de nombre 791 00:34:12,489 --> 00:34:14,710 ¿Verdad? 792 00:34:15,309 --> 00:34:15,829 Entonces 793 00:34:15,829 --> 00:34:19,510 La relación 794 00:34:19,510 --> 00:34:20,889 Es lo único que nos falta 795 00:34:20,889 --> 00:34:21,809 ¿Verdad? La relación 796 00:34:21,809 --> 00:34:24,030 Entonces, este es el otro extremo 797 00:34:24,030 --> 00:34:25,309 Y este extremo significa 798 00:34:25,309 --> 00:34:29,010 Que es un alumno, muchas matrículas 799 00:34:29,010 --> 00:34:31,650 Aquí por defecto es lazy 800 00:34:31,650 --> 00:34:33,570 Con lo cual no hace falta que lo pongamos 801 00:34:33,570 --> 00:34:35,130 Pero lo que sí que tenemos que poner 802 00:34:35,130 --> 00:34:38,030 Es quién ha mapeado 803 00:34:38,030 --> 00:34:39,530 Quién mapea 804 00:34:39,530 --> 00:34:41,650 Quién informa de esto 805 00:34:41,650 --> 00:34:43,710 Pues de esto, ¿quién informa? 806 00:34:44,190 --> 00:34:48,130 El campo alumno de la clase matrícula 807 00:34:48,130 --> 00:34:50,489 El campo alumno de la clase matrícula 808 00:34:50,489 --> 00:34:53,150 Pues entonces ponemos aquí nuestro alumno 809 00:34:53,150 --> 00:34:54,469 ¿Verdad? 810 00:34:59,800 --> 00:35:10,329 Y aquí también, el fetch type como por defecto es lazy 811 00:35:10,329 --> 00:35:11,590 Pues vamos a dejarlo en lazy 812 00:35:11,590 --> 00:35:13,250 Que no cargue todas las matrículas 813 00:35:13,250 --> 00:35:16,050 Que cogemos un alumno, por ejemplo 814 00:35:16,050 --> 00:35:18,530 Si queremos que se carguen 815 00:35:18,530 --> 00:35:22,030 Pues o nos hacemos una consulta específica con el join fetch 816 00:35:22,030 --> 00:35:26,289 o trabajamos dentro de la misma transacción en el mismo método 817 00:35:26,289 --> 00:35:30,349 sin cerrar la transacción, porque el problema del lazy 818 00:35:30,349 --> 00:35:34,829 es cuando pides las matrículas si el contexto de presidencia 819 00:35:34,829 --> 00:35:38,309 se ha cerrado, es decir, si estás ya fuera del método, pero si estás dentro del método 820 00:35:38,309 --> 00:35:41,929 tú puedes pedir tranquilamente las matrículas y no pasa nada por muy lazy que sea 821 00:35:41,929 --> 00:35:46,750 aquí también se podría configurar el parámetro cascade 822 00:35:46,750 --> 00:35:50,409 para ver si borrar alumnos borra las matrículas 823 00:35:50,409 --> 00:35:53,170 Si insertar alumnos, si inserta las matrículas 824 00:35:53,170 --> 00:35:54,829 Recordad que esto en pruebas 825 00:35:54,829 --> 00:35:55,710 Normalmente 826 00:35:55,710 --> 00:35:59,110 Se hace así 827 00:35:59,110 --> 00:35:59,449 ¿Verdad? 828 00:36:03,210 --> 00:36:04,610 Cascade punto 829 00:36:04,610 --> 00:36:05,989 Cascade type 830 00:36:05,989 --> 00:36:08,570 Sí, punto 831 00:36:08,570 --> 00:36:11,289 Vale, que me haga cascada 832 00:36:11,289 --> 00:36:13,570 Del persist, del remove, de todo eso 833 00:36:13,570 --> 00:36:15,590 Pues 834 00:36:15,590 --> 00:36:16,949 Si, opcional 835 00:36:16,949 --> 00:36:19,349 Unix, bueno, unix aquí con una lista 836 00:36:19,349 --> 00:36:21,030 Hace mucha falta, el orphan removal 837 00:36:21,030 --> 00:36:23,070 También es un parámetro que se pone a veces 838 00:36:23,070 --> 00:36:24,070 ¿Vale? Recordad 839 00:36:24,070 --> 00:36:26,050 Que el orphan 840 00:36:26,050 --> 00:36:28,849 Removal 841 00:36:28,849 --> 00:36:32,510 Lo puedes poner a true o a false 842 00:36:32,510 --> 00:36:34,909 ¿Vale? En función de 843 00:36:34,909 --> 00:36:36,170 Si 844 00:36:36,170 --> 00:36:39,070 Una matrícula se ha descolgado 845 00:36:39,070 --> 00:36:40,750 De su alumno porque le hemos quitado la colección 846 00:36:40,750 --> 00:36:42,210 Si esa matrícula queremos que desaparezca 847 00:36:42,210 --> 00:36:44,670 Normalmente las relaciones de uno a muchos pues las ponemos así 848 00:36:44,670 --> 00:36:46,230 Bueno 849 00:36:46,230 --> 00:36:48,630 Y en principio hemos acabado 850 00:36:48,630 --> 00:36:49,510 Con esta 851 00:36:49,510 --> 00:36:53,889 Está mapeada por alumno de matrícula 852 00:36:53,889 --> 00:36:55,489 Si hemos hecho algún error 853 00:36:55,489 --> 00:36:56,309 Ya nos lo va a decir 854 00:36:56,309 --> 00:36:58,650 ¿Vale? Con suerte hemos cometido alguno 855 00:36:58,650 --> 00:36:59,429 Y lo podemos arreglar 856 00:36:59,429 --> 00:37:00,909 Bueno 857 00:37:00,909 --> 00:37:04,590 Y ahora viene lo facilito 858 00:37:04,590 --> 00:37:05,869 Y lo chuli 859 00:37:05,869 --> 00:37:07,989 Lo que más satisfacción da es escribir cosas 860 00:37:07,989 --> 00:37:08,969 Y que te lo hagan todo solo 861 00:37:08,969 --> 00:37:12,630 ¿Qué es lo siguiente que hacemos después del modelo? 862 00:37:13,070 --> 00:37:13,510 Permisión 863 00:37:13,510 --> 00:37:14,409 ¿Eh? 864 00:37:15,670 --> 00:37:16,869 Normalmente haríamos el DAO 865 00:37:16,869 --> 00:37:19,030 Pero aquí hacemos el repositorio 866 00:37:19,030 --> 00:37:32,960 Ah, muy bien pensado 867 00:37:32,960 --> 00:37:33,679 Efectivamente 868 00:37:33,679 --> 00:37:35,239 Recordad, claro 869 00:37:35,239 --> 00:37:40,340 Que aquí tenemos una relación 870 00:37:40,340 --> 00:37:41,099 De uno a muchos 871 00:37:41,099 --> 00:37:42,900 Eso significa que 872 00:37:42,900 --> 00:37:45,820 En una relación de uno a muchos 873 00:37:45,820 --> 00:37:47,380 Hay uno que es el que manda 874 00:37:47,380 --> 00:37:49,139 El propietario de la relación 875 00:37:49,139 --> 00:37:51,539 ¿Y quién era el propietario de la relación? 876 00:37:52,820 --> 00:37:54,000 ¿El extremo de él? 877 00:37:57,570 --> 00:37:58,010 Vale 878 00:37:58,010 --> 00:37:58,869 Entonces 879 00:37:58,869 --> 00:38:01,769 Ese es el que manda la relación 880 00:38:01,769 --> 00:38:02,889 A partir de la cual 881 00:38:02,889 --> 00:38:05,730 Se tienen que hacer las modificaciones 882 00:38:05,730 --> 00:38:06,449 El que manda 883 00:38:06,449 --> 00:38:09,329 Entonces, si nosotros añadíamos 884 00:38:09,329 --> 00:38:11,429 Una matrícula a un alumno 885 00:38:11,429 --> 00:38:15,210 No, no, no 886 00:38:15,210 --> 00:38:16,510 Según me lo decías 887 00:38:16,510 --> 00:38:18,409 No, no, no, estaba dudando 888 00:38:18,409 --> 00:38:21,849 Claro, la parte que manda es esta 889 00:38:21,849 --> 00:38:23,730 La parte que manda es esta, la del many 890 00:38:23,730 --> 00:38:26,369 ¿Vale? Entonces, ¿cuál es el problema de que la parte 891 00:38:26,369 --> 00:38:27,829 Que manda, la propietaria de la relación 892 00:38:27,829 --> 00:38:29,130 Es la del many? Entonces 893 00:38:29,130 --> 00:38:30,590 ¿Eso qué significa? 894 00:38:31,449 --> 00:38:33,949 Que si nosotros, es la que tiene 895 00:38:33,949 --> 00:38:35,349 La clave ajena, es la que manda 896 00:38:35,349 --> 00:38:38,130 Porque alumno va por libre, alumno, si uno mira aquí 897 00:38:38,130 --> 00:38:39,289 ¿Vale? 898 00:38:40,190 --> 00:38:41,929 Alumno, no sabe nada 899 00:38:41,929 --> 00:38:43,110 De matrícula, ni le importa 900 00:38:43,110 --> 00:38:45,869 Matrícula, sí, matrícula es la que 901 00:38:45,869 --> 00:38:47,710 Decide, oye, yo pertenezco a ti 902 00:38:47,710 --> 00:38:50,030 Soy clave ajena, pues yo soy la propietaria 903 00:38:50,030 --> 00:38:52,010 para JPA, esa es la regla 904 00:38:52,010 --> 00:38:53,869 yo soy la propietaria porque yo tengo la clave ajena 905 00:38:53,869 --> 00:38:56,130 yo soy la propietaria, eso que implica 906 00:38:56,130 --> 00:38:57,929 que si tú vas 907 00:38:57,929 --> 00:39:00,170 desde alumno, añades 908 00:39:00,170 --> 00:39:01,429 una matrícula 909 00:39:01,429 --> 00:39:03,550 esa matrícula 910 00:39:03,550 --> 00:39:06,090 no va a coger, y haces el 911 00:39:06,090 --> 00:39:08,150 persist, esa matrícula 912 00:39:08,150 --> 00:39:10,030 no va a coger la clave 913 00:39:10,030 --> 00:39:11,090 ajena, no se va a hacer 914 00:39:11,090 --> 00:39:13,949 en SQL, no se va a hacer el set 915 00:39:13,949 --> 00:39:16,090 de este alumno ID, no se va a hacer, es SQL 916 00:39:16,090 --> 00:39:18,010 no se va a hacer, sin embargo al revés 917 00:39:18,010 --> 00:39:20,449 sí. Si tú haces persistencia 918 00:39:20,449 --> 00:39:22,170 de una... Es que al revés 919 00:39:22,170 --> 00:39:24,050 no se tiene que hacer nada. Si tú haces persistencia de una 920 00:39:24,050 --> 00:39:26,369 matrícula y fijas un alumno, el alumno 921 00:39:26,369 --> 00:39:27,670 es que no tiene que cambiar nada. 922 00:39:28,190 --> 00:39:29,889 No tiene que cambiar nada. Por eso esta es la 923 00:39:29,889 --> 00:39:32,150 propietaria, porque esta es la que necesita 924 00:39:32,150 --> 00:39:34,090 que se le haga el SQL, la que se 925 00:39:34,090 --> 00:39:35,769 le necesita. Entonces, 926 00:39:36,650 --> 00:39:38,449 el problema se manifestaba 927 00:39:38,449 --> 00:39:39,730 en que 928 00:39:39,730 --> 00:39:41,789 si nosotros hacemos, efectivamente, 929 00:39:41,949 --> 00:39:43,230 añadimos una matrícula 930 00:39:43,230 --> 00:39:46,050 y hacemos un merge o un 931 00:39:46,050 --> 00:39:47,969 commit para que se actualice el objeto alumno, 932 00:39:48,010 --> 00:39:50,829 Pues esto no va a aparecer aquí 933 00:39:50,829 --> 00:39:52,949 Entonces hay que fijárselo específicamente 934 00:39:52,949 --> 00:39:54,369 Y para eso 935 00:39:54,369 --> 00:39:57,130 Era cómodo 936 00:39:57,130 --> 00:39:58,849 Para no tener que hacerlo 937 00:39:58,849 --> 00:39:59,889 Siempre por código 938 00:39:59,889 --> 00:40:02,690 Era cómodo pues hacer algo así 939 00:40:02,690 --> 00:40:04,250 Public void 940 00:40:04,250 --> 00:40:05,409 En alumno 941 00:40:05,409 --> 00:40:07,989 Add matricula 942 00:40:07,989 --> 00:40:11,690 Matricula 943 00:40:11,690 --> 00:40:12,469 M 944 00:40:12,469 --> 00:40:14,769 Y ahora 945 00:40:14,769 --> 00:40:18,570 Que hacíamos aquí 946 00:40:18,570 --> 00:40:23,170 matriculas.add 947 00:40:23,170 --> 00:40:24,329 matricula 948 00:40:24,329 --> 00:40:26,869 y ahora 949 00:40:26,869 --> 00:40:29,670 m.set 950 00:40:29,670 --> 00:40:30,809 alumno 951 00:40:30,809 --> 00:40:32,969 vale 952 00:40:32,969 --> 00:40:38,000 this, ¿verdad? 953 00:40:39,500 --> 00:40:41,059 no se me olvide nada, ¿no? 954 00:40:41,059 --> 00:40:45,670 vale, y cuando borramos 955 00:40:45,670 --> 00:40:47,949 lo mismo, si quitamos una matricula 956 00:40:47,949 --> 00:40:51,489 el objeto matricula necesita su propio 957 00:40:51,489 --> 00:40:51,989 SQL 958 00:40:51,989 --> 00:40:56,289 Para perder esta clave 959 00:40:56,289 --> 00:41:01,639 Entonces 960 00:41:01,639 --> 00:41:11,079 Matrícula 961 00:41:11,079 --> 00:41:13,199 Matrícula M 962 00:41:13,199 --> 00:41:15,320 Entonces 963 00:41:15,320 --> 00:41:16,539 Aquí ahora ya sí 964 00:41:16,539 --> 00:41:18,739 Matrículas 965 00:41:18,739 --> 00:41:20,360 Matrículas 966 00:41:20,360 --> 00:41:21,920 Matrículas no 967 00:41:21,920 --> 00:41:28,489 Matrículas.remove 968 00:41:28,489 --> 00:41:30,769 M 969 00:41:30,769 --> 00:41:32,570 Y ahora 970 00:41:32,570 --> 00:41:34,389 Necesito que matrícula se entere 971 00:41:34,389 --> 00:41:36,150 Porque desde alumno no puedo 972 00:41:36,150 --> 00:41:40,139 tocarla. Y para que matrícula 973 00:41:40,139 --> 00:41:41,820 se entere, pues entonces 974 00:41:41,820 --> 00:41:43,420 set alumno nulo. 975 00:41:43,920 --> 00:41:45,199 Tú ya no perteneces 976 00:41:45,199 --> 00:41:46,619 a este alumno. 977 00:41:49,440 --> 00:41:49,960 Vale. 978 00:41:50,099 --> 00:41:51,800 Entonces, ¿cómo? Esto tiene 979 00:41:51,800 --> 00:41:53,559 sentido porque matrícula 980 00:41:53,559 --> 00:41:55,000 ¿eh? 981 00:41:59,440 --> 00:42:01,460 Justo. Sí, sí, sí. Eso lo iba a decir 982 00:42:01,460 --> 00:42:03,159 ahora. Si esto, el poner esto aquí 983 00:42:03,159 --> 00:42:04,820 nos despertaba unas alarmas. 984 00:42:05,260 --> 00:42:06,280 Si os las despierta, ¿verdad? 985 00:42:07,019 --> 00:42:09,000 Y aparte, para que esto también 986 00:42:09,000 --> 00:42:10,659 tenga sentido, matrícula 987 00:42:10,659 --> 00:42:14,099 Tiene que tener esto como opcional 988 00:42:14,099 --> 00:42:15,619 ¿Verdad? El alumno 989 00:42:15,619 --> 00:42:17,719 Que no se lo hemos puesto 990 00:42:17,719 --> 00:42:19,480 Opcional 991 00:42:19,480 --> 00:42:21,500 Igual a true 992 00:42:21,500 --> 00:42:22,400 ¿Vale? 993 00:42:23,039 --> 00:42:23,800 Opcional 994 00:42:23,800 --> 00:42:24,900 No es 995 00:42:24,900 --> 00:42:26,739 Es opcional ¿Verdad? 996 00:42:27,940 --> 00:42:29,559 Ah, perdón 997 00:42:29,559 --> 00:42:31,219 Es que será aquí 998 00:42:31,219 --> 00:42:31,840 Supongo 999 00:42:31,840 --> 00:42:36,210 Control X 1000 00:42:36,210 --> 00:42:37,090 Vale, es que sí 1001 00:42:37,090 --> 00:42:39,130 Ahí, vale 1002 00:42:39,130 --> 00:42:45,440 Venga, pues ala 1003 00:42:45,440 --> 00:43:27,289 Y entonces, efectivamente, aquí se nos ha despertado ya la angustia de, uy, este remove solamente va a funcionar si tengo el equals y no va por dirección de memoria, pues bueno, como nos cuesta nada, generamos equals por id y ya que estamos en alumno también, generamos equals por id, vale, y este overwrite porque me da problemas. 1004 00:43:51,079 --> 00:43:53,360 No sé por qué se ha puesto tonto ahora 1005 00:43:53,360 --> 00:44:07,500 No sé por qué se me ha puesto tonto 1006 00:44:07,500 --> 00:44:09,019 Pero vamos, que esta anotación me da lo mismo 1007 00:44:09,019 --> 00:44:09,780 Es informativa 1008 00:44:09,780 --> 00:44:13,280 Pero no sé por qué se ha puesto así 1009 00:44:13,280 --> 00:44:14,119 Habría que mirarlo 1010 00:44:14,119 --> 00:44:17,079 ¿Vale? Pero bueno, como es informativa no da igual 1011 00:44:17,079 --> 00:44:19,119 Pues... 1012 00:44:19,119 --> 00:44:19,500 Vale 1013 00:44:19,500 --> 00:44:23,139 Bueno, pues nuestro repositorio famoso 1014 00:44:23,139 --> 00:44:36,070 Ay, perdón 1015 00:44:36,070 --> 00:44:45,889 Pues nada, nuestro interfaz 1016 00:44:45,889 --> 00:44:49,050 Alumno 1017 00:44:49,050 --> 00:44:51,030 Repositori 1018 00:44:51,030 --> 00:44:53,469 Repositori 1019 00:44:53,849 --> 00:44:56,269 Le llamo como me da la gana, lógicamente 1020 00:44:56,269 --> 00:44:57,409 Pero bueno 1021 00:44:57,409 --> 00:45:00,110 Es habitual llamarlo así 1022 00:45:00,110 --> 00:45:02,650 Y este que herede de 1023 00:45:02,650 --> 00:45:04,190 Alumno 1024 00:45:04,190 --> 00:45:06,750 Repositori 1025 00:45:06,750 --> 00:45:08,030 Uy, que 1026 00:45:08,030 --> 00:45:10,250 De JPA, de JPA 1027 00:45:10,250 --> 00:45:12,809 Que sí, que sí, a ver 1028 00:45:12,809 --> 00:45:15,070 No me hagáis mucho caso 1029 00:45:15,070 --> 00:45:17,289 Porque entre que me doy la garganta y he dormido dos horas 1030 00:45:17,289 --> 00:45:19,150 No sé muy bien lo que estoy diciendo 1031 00:45:19,150 --> 00:45:20,670 Pero como estáis muy despiertos 1032 00:45:20,670 --> 00:45:21,849 Pues 1033 00:45:21,849 --> 00:45:23,710 Vale 1034 00:45:23,710 --> 00:45:26,190 Long y alumno 1035 00:45:26,190 --> 00:45:32,559 Primero la entidad y luego la clave 1036 00:45:32,559 --> 00:45:33,559 Tienes razón 1037 00:45:33,559 --> 00:45:37,079 El tipo de la clave 1038 00:45:37,079 --> 00:45:38,019 Vale 1039 00:45:38,019 --> 00:45:45,679 Repository 1040 00:45:45,679 --> 00:45:49,360 Ala, ahí lo tenemos 1041 00:45:49,360 --> 00:45:51,980 Y aquí 1042 00:45:51,980 --> 00:45:54,579 Tenemos los métodos básicos 1043 00:45:54,579 --> 00:45:55,219 Lógicamente 1044 00:45:55,219 --> 00:45:57,679 Vamos a hacer la matrícula repository 1045 00:45:57,679 --> 00:45:58,000 También 1046 00:45:58,000 --> 00:46:00,199 Este no hay que anotarle con repository 1047 00:46:00,199 --> 00:46:01,699 Se infile directamente de aquí 1048 00:46:01,699 --> 00:46:05,420 Vamos a hacer el repository del otro 1049 00:46:05,420 --> 00:46:18,800 Repository 1050 00:46:18,800 --> 00:46:19,920 Ahora lo cambio 1051 00:46:19,920 --> 00:46:36,340 Vale, y esto es 1052 00:46:36,340 --> 00:46:38,079 De matrícula 1053 00:46:38,079 --> 00:46:39,420 No 1054 00:46:39,420 --> 00:46:47,960 Bueno, pues antes de meter más métodos 1055 00:46:47,960 --> 00:46:49,039 En estos repositorios 1056 00:46:49,039 --> 00:46:50,719 Para hacer cosas más raras con el servicio 1057 00:46:50,719 --> 00:46:51,780 Y todo eso, antes de hacerlo 1058 00:46:51,780 --> 00:46:54,920 Vamos a dejarlo, vamos a hacer 1059 00:46:54,920 --> 00:46:56,900 Un servicio, un controlador y lo probamos 1060 00:46:56,900 --> 00:46:57,679 Ahí todo funciona 1061 00:46:57,679 --> 00:47:00,019 Y luego ya nos ponemos a meter aquí más métodos 1062 00:47:00,019 --> 00:47:01,320 Y más cosas que nos interesa 1063 00:47:01,320 --> 00:47:02,880 Vender, ¿vale? 1064 00:47:04,219 --> 00:47:05,820 Bueno, pues ahora este repositorio 1065 00:47:05,820 --> 00:47:08,179 Va a ser llamado a través de unos servicios 1066 00:47:08,179 --> 00:47:09,039 Está claro 1067 00:47:09,039 --> 00:47:11,719 Pues venga, vamos a hacernos 1068 00:47:11,719 --> 00:47:16,900 Uy, el paquete 1069 00:47:16,900 --> 00:47:29,739 App.service 1070 00:47:31,340 --> 00:47:40,980 Pues venga 1071 00:47:40,980 --> 00:47:43,619 Alumnoservice 1072 00:47:43,619 --> 00:47:45,059 Vamos a hacer cosas con alumno 1073 00:47:45,059 --> 00:47:50,809 Entonces, esta sí que hay que anotarla 1074 00:47:50,809 --> 00:47:52,809 para que 1075 00:47:52,809 --> 00:47:54,449 Spring la maneje 1076 00:47:54,449 --> 00:47:56,250 y la inyecte cuando sea necesario 1077 00:47:56,250 --> 00:47:58,750 y aparte pues para poder 1078 00:47:58,750 --> 00:48:00,130 bueno no, para usarla 1079 00:48:00,130 --> 00:48:02,650 y para poder usar las notaciones transactional dentro 1080 00:48:02,650 --> 00:48:03,289 y todo eso 1081 00:48:03,289 --> 00:48:06,789 entonces alumno service ¿quién va a necesitar? 1082 00:48:06,889 --> 00:48:08,510 pues alumno service va a necesitar 1083 00:48:08,510 --> 00:48:11,110 a un alumno repository 1084 00:48:11,110 --> 00:48:14,550 y puede que a un matrícula repository también 1085 00:48:14,550 --> 00:48:16,389 pero bueno por ahora 1086 00:48:16,389 --> 00:48:21,550 RepoAlumno 1087 00:48:21,550 --> 00:48:24,960 RepoAlumno 1088 00:48:24,960 --> 00:48:25,500 Vale 1089 00:48:25,500 --> 00:48:27,800 Que se lo vamos a pasar 1090 00:48:27,800 --> 00:48:30,519 Por constructor 1091 00:48:30,519 --> 00:48:36,559 Se lo pasamos por constructor 1092 00:48:36,559 --> 00:48:40,679 Y ya está 1093 00:48:40,679 --> 00:48:41,440 Que es lo habitual 1094 00:48:41,440 --> 00:48:42,900 Ahí está, por constructor 1095 00:48:42,900 --> 00:48:45,360 Y ahora vamos a hacer un primer servicio básico 1096 00:48:45,360 --> 00:48:46,659 Que es 1097 00:48:46,659 --> 00:48:50,840 PublicAlumno 1098 00:48:50,840 --> 00:48:54,199 GetAlumno 1099 00:48:54,199 --> 00:48:54,960 Por ejemplo 1100 00:48:54,960 --> 00:48:57,599 getAlumno 1101 00:48:57,599 --> 00:48:59,739 a través de su clave 1102 00:48:59,739 --> 00:49:02,460 y ahora 1103 00:49:02,460 --> 00:49:04,579 este 1104 00:49:04,579 --> 00:49:07,039 yo llamo a repo 1105 00:49:07,039 --> 00:49:07,880 alumno 1106 00:49:07,880 --> 00:49:12,070 .find 1107 00:49:12,070 --> 00:49:13,789 by id 1108 00:49:13,789 --> 00:49:16,429 que estará por ahí 1109 00:49:16,429 --> 00:49:18,269 abajo, find by id 1110 00:49:18,269 --> 00:49:19,469 y le paso id 1111 00:49:19,469 --> 00:49:21,289 vale, entonces 1112 00:49:21,289 --> 00:49:24,210 este 1113 00:49:24,210 --> 00:49:25,190 punto 1114 00:49:25,190 --> 00:49:27,989 Or else 1115 00:49:27,989 --> 00:49:29,170 ¿Vale? 1116 00:49:31,440 --> 00:49:32,340 Vamos a hacer 1117 00:49:32,340 --> 00:49:35,099 Para, hombre, jugar un poco 1118 00:49:35,099 --> 00:49:37,199 Que tampoco estamos un poco 1119 00:49:37,199 --> 00:49:39,340 Le podríamos devolverle el get 1120 00:49:39,340 --> 00:49:41,340 Con lo cual propago lo del null de toda la vida 1121 00:49:41,340 --> 00:49:43,800 Pero vamos a decir que si no lance una excepción 1122 00:49:43,800 --> 00:49:45,980 En lugar de una genérica 1123 00:49:45,980 --> 00:49:47,840 Que lance una que construyamos nosotros 1124 00:49:47,840 --> 00:49:48,960 Aquí lo, ¿Ves? 1125 00:49:48,960 --> 00:49:49,400 ¿Veis? 1126 00:49:50,139 --> 00:49:51,579 El or else throw 1127 00:49:51,579 --> 00:49:54,619 Me dice, si me das un supplier 1128 00:49:54,619 --> 00:49:58,300 yo te lanzo la excepción 1129 00:49:58,300 --> 00:50:00,119 de este supplier, entonces un supplier 1130 00:50:00,119 --> 00:50:01,019 que es una lambda 1131 00:50:01,019 --> 00:50:03,659 que no recibe nada y te genera algo 1132 00:50:03,659 --> 00:50:05,219 eso es un supplier 1133 00:50:05,219 --> 00:50:08,059 pues entonces, la lambda que tenemos 1134 00:50:08,059 --> 00:50:09,099 que poner nosotros aquí 1135 00:50:09,099 --> 00:50:13,980 pues es una lambda que no recibe 1136 00:50:13,980 --> 00:50:15,739 nada y genera algo 1137 00:50:15,739 --> 00:50:17,159 ¿qué queremos que genere? 1138 00:50:17,340 --> 00:50:19,679 la excepción nuestra propia 1139 00:50:19,679 --> 00:50:21,880 porque estamos obviando hacer nuestras excepciones 1140 00:50:21,880 --> 00:50:23,139 pero en cualquier aplicación 1141 00:50:23,139 --> 00:50:24,300 uno no tira 1142 00:50:24,300 --> 00:50:27,500 Para comunicarse de las excepciones 1143 00:50:27,500 --> 00:50:29,099 Ya hechas, ni obviamente 1144 00:50:29,099 --> 00:50:30,380 De existenado ni nada de eso 1145 00:50:30,380 --> 00:50:32,780 Tira de lanzando excepciones suyas 1146 00:50:32,780 --> 00:50:34,019 Que se refieren a su negocio 1147 00:50:34,019 --> 00:50:35,539 Pues en este caso podríamos hacer 1148 00:50:35,539 --> 00:50:38,099 Alumno no existe 1149 00:50:38,099 --> 00:50:40,019 Exception, que esta lógicamente 1150 00:50:40,019 --> 00:50:40,920 No la tiene Java 1151 00:50:40,920 --> 00:50:44,440 Vale, pues entonces 1152 00:50:44,440 --> 00:50:46,199 Yo aquí tengo ya mi supplier 1153 00:50:46,199 --> 00:50:47,960 Entonces 1154 00:50:47,960 --> 00:50:50,260 Mi objeto alumno que voy a devolver 1155 00:50:50,260 --> 00:50:54,070 Es este 1156 00:50:54,070 --> 00:50:56,150 Si no está 1157 00:50:56,150 --> 00:50:57,769 Lanzaré una excepción 1158 00:50:57,769 --> 00:50:59,849 Que ahora construimos, que no pasa nada 1159 00:50:59,849 --> 00:51:02,110 Ay, pínchate ahí 1160 00:51:02,110 --> 00:51:03,349 Vale 1161 00:51:03,349 --> 00:51:05,570 Y ahora yo 1162 00:51:05,570 --> 00:51:08,130 Devuelvo el alumno si es que no he salido 1163 00:51:08,130 --> 00:51:10,230 Antes por la excepción, lógicamente 1164 00:51:10,230 --> 00:51:11,969 Entonces vamos a hacer 1165 00:51:11,969 --> 00:51:13,190 La excepción 1166 00:51:13,190 --> 00:51:16,070 Aquí lo normal es que aquí 1167 00:51:16,070 --> 00:51:17,690 Hubiera un paquete 1168 00:51:17,690 --> 00:51:19,530 Con las excepciones, que pueden ser 1169 00:51:19,530 --> 00:51:20,489 Ciento y la madre 1170 00:51:20,489 --> 00:51:29,400 Y en mi paquete excepción, pues yo ya 1171 00:51:29,400 --> 00:51:32,059 Me hago 1172 00:51:32,059 --> 00:51:34,639 Alumno 1173 00:51:34,639 --> 00:51:36,900 No existe 1174 00:51:36,900 --> 00:51:38,639 Exception 1175 00:51:38,639 --> 00:51:45,880 Alumno no existe exception 1176 00:51:45,880 --> 00:51:52,019 Exception 1177 00:51:52,019 --> 00:51:53,940 Necesita 1178 00:51:53,940 --> 00:51:55,360 Su constructor 1179 00:51:55,360 --> 00:52:03,360 Exception 1180 00:52:03,360 --> 00:52:05,440 El constructor voy a usar 1181 00:52:05,440 --> 00:52:07,659 Sin parámetros para ya directamente 1182 00:52:07,659 --> 00:52:09,280 Poner aquí el mensajito que yo quiera 1183 00:52:09,280 --> 00:52:13,090 no existe 1184 00:52:13,090 --> 00:52:14,690 alumno 1185 00:52:14,690 --> 00:52:19,579 esta es mi excepción, bien hecha 1186 00:52:19,579 --> 00:52:22,519 pero si yo dejo la excepción así 1187 00:52:22,519 --> 00:52:24,320 como era 1188 00:52:24,320 --> 00:52:25,139 de esperar 1189 00:52:25,139 --> 00:52:27,960 bueno, primero voy a importar el alumno 1190 00:52:27,960 --> 00:52:29,519 no existe excepción, vale 1191 00:52:29,519 --> 00:52:31,639 si yo dejo mi excepción así 1192 00:52:31,639 --> 00:52:34,500 como era de esperar, me dice, oye este método 1193 00:52:34,500 --> 00:52:36,239 puede que la hace excepción 1194 00:52:36,239 --> 00:52:37,940 entonces capturarla 1195 00:52:37,940 --> 00:52:39,840 es completamente absurdo 1196 00:52:39,840 --> 00:52:43,760 Generamos un mensaje 1197 00:52:43,760 --> 00:52:45,280 Para amordazarnos luego 1198 00:52:45,280 --> 00:52:47,239 Pues para qué sacamos el mensaje si no vamos a amordazar 1199 00:52:47,239 --> 00:52:49,380 Que es lo que hace el try catch, te amordaza 1200 00:52:49,380 --> 00:52:50,380 Pues un throw 1201 00:52:50,380 --> 00:52:53,340 Pero aquí ya en una arquitectura con tantas capas 1202 00:52:53,340 --> 00:52:55,300 De no sé qué, de patatín, me comunico 1203 00:52:55,300 --> 00:52:57,000 Esto en realidad, quién lo va a llamar 1204 00:52:57,000 --> 00:52:58,019 Lo va a llamar un controller 1205 00:52:58,019 --> 00:52:59,760 No lo vamos a 1206 00:52:59,760 --> 00:53:03,300 Poner aquí un throw, esto ya sí que mete 1207 00:53:03,300 --> 00:53:04,039 Basura 1208 00:53:04,039 --> 00:53:06,139 Entonces 1209 00:53:06,139 --> 00:53:08,199 ¿Qué alternativa tenemos? 1210 00:53:08,199 --> 00:53:10,559 Ni un try catch 1211 00:53:10,559 --> 00:53:11,619 Ni throw ni try catch 1212 00:53:11,619 --> 00:53:16,269 Muy bien 1213 00:53:16,269 --> 00:53:18,250 Cambiarla a runtime exception 1214 00:53:18,250 --> 00:53:19,269 Muy bien 1215 00:53:19,269 --> 00:53:22,010 Eso es una memoria 1216 00:53:22,010 --> 00:53:23,829 Muy interesante 1217 00:53:23,829 --> 00:53:25,349 Un ejercicio de memoria 1218 00:53:25,349 --> 00:53:27,769 Bueno, las excepciones de runtime 1219 00:53:27,769 --> 00:53:29,570 No había por código 1220 00:53:29,570 --> 00:53:32,010 Que capturarlas ni programarlas 1221 00:53:32,010 --> 00:53:34,050 Y esto es lo habitual 1222 00:53:34,050 --> 00:53:35,150 En una arquitectura de estas 1223 00:53:35,150 --> 00:53:36,949 Porque no tengamos que arrastrar los throws 1224 00:53:36,949 --> 00:53:39,190 Runtime se ocurre 1225 00:53:39,190 --> 00:53:41,070 Ya está, que salte 1226 00:53:41,070 --> 00:53:47,300 Como que igual salta, pues no debería 1227 00:53:47,300 --> 00:53:49,500 No me desconciertes 1228 00:53:49,500 --> 00:53:50,639 Que no estamos para eso 1229 00:53:50,639 --> 00:53:57,199 Ya, tú lo que quieres es asustar 1230 00:53:57,199 --> 00:53:59,420 Vale 1231 00:53:59,420 --> 00:54:04,539 Bueno, entiendo que 1232 00:54:04,539 --> 00:54:06,480 No necesitamos parar, ¿no? 1233 00:54:07,739 --> 00:54:08,199 ¿Verdad? 1234 00:54:11,269 --> 00:54:12,210 Bueno, pues ahora 1235 00:54:12,210 --> 00:54:14,829 Ahora sería cuando nosotros desde nuestro main 1236 00:54:14,829 --> 00:54:15,409 Dime 1237 00:54:15,409 --> 00:54:16,670 ¿Qué he hecho? 1238 00:54:18,030 --> 00:54:18,510 ¿Este? 1239 00:54:20,010 --> 00:54:21,949 Ah, el, espera, lo voy a pasar aquí debajo 1240 00:54:21,949 --> 00:54:22,829 Para que se vea mejor 1241 00:54:22,829 --> 00:54:25,989 Or else throw es un método 1242 00:54:25,989 --> 00:54:27,510 Que necesita un supplier 1243 00:54:27,510 --> 00:54:28,030 Que es 1244 00:54:28,030 --> 00:54:31,610 Dame algo sin que yo te dé nada 1245 00:54:31,610 --> 00:54:32,570 ¿Qué me tienes que dar? 1246 00:54:33,070 --> 00:54:34,449 Algo que herede de excepción 1247 00:54:34,449 --> 00:54:37,750 ¿Vale? Esa excepción será lanzada 1248 00:54:37,750 --> 00:54:39,329 Si no existe la look 1249 00:54:39,329 --> 00:54:41,710 Y hombre, mejor esto que un get 1250 00:54:41,710 --> 00:54:42,789 ¿Verdad? 1251 00:54:42,969 --> 00:54:44,670 Mejor te aviso con una excepción 1252 00:54:44,670 --> 00:54:46,570 Y tú ya verás que haces con ese desastre 1253 00:54:46,570 --> 00:54:47,969 Que no te doy un null 1254 00:54:47,969 --> 00:54:49,550 Y... 1255 00:54:49,550 --> 00:54:54,570 A ver, no es igual 1256 00:54:54,570 --> 00:54:56,369 No, hombre, no es lo mismo 1257 00:54:56,369 --> 00:54:58,809 Un error de un null pointer exception 1258 00:54:58,809 --> 00:55:01,289 Que una excepción alumno no existe 1259 00:55:01,289 --> 00:55:06,969 Ya, pero no 1260 00:55:06,969 --> 00:55:08,409 Pero no ves la línea 1261 00:55:08,409 --> 00:55:09,969 O sea, tú piensa que esto no 1262 00:55:09,969 --> 00:55:11,650 Esto es un código pequeño 1263 00:55:11,650 --> 00:55:13,809 Pero esto puede formar parte de una aplicación 1264 00:55:13,809 --> 00:55:16,269 Claro, entonces la comunicación 1265 00:55:16,269 --> 00:55:17,250 Tiene que estar un poco más 1266 00:55:17,250 --> 00:55:19,150 Más organizada 1267 00:55:19,150 --> 00:55:22,349 Bueno, pues entonces 1268 00:55:22,349 --> 00:55:24,190 Ahora sería cuando nosotros 1269 00:55:24,190 --> 00:55:26,309 Nos pondríamos con nuestro main 1270 00:55:26,309 --> 00:55:28,190 A probar 1271 00:55:28,190 --> 00:55:30,349 A ver si hemos hecho las excepciones bien 1272 00:55:30,349 --> 00:55:30,750 O no 1273 00:55:30,750 --> 00:55:32,429 Entonces 1274 00:55:32,429 --> 00:55:35,889 Bueno, vamos a hacerlo rápidamente 1275 00:55:35,889 --> 00:55:38,110 Para detectar si hay alguna notación que está mal hecha 1276 00:55:38,110 --> 00:55:40,510 Antes de seguir con el controller 1277 00:55:40,510 --> 00:55:42,090 Vamos a hacernos, bueno, si ya tenemos el main 1278 00:55:42,090 --> 00:55:42,969 Que tontería, que hago 1279 00:55:42,969 --> 00:55:46,170 Nos vamos a hacer rápidamente 1280 00:55:46,170 --> 00:55:48,409 Este que me saca 1281 00:55:48,409 --> 00:55:49,050 Una application 1282 00:55:49,050 --> 00:55:51,769 Vamos a recoger el application context aquí 1283 00:55:51,769 --> 00:55:53,170 Para sacar el bin 1284 00:55:53,170 --> 00:56:02,699 Application context 1285 00:56:02,699 --> 00:56:04,219 Este lo vamos a sacar 1286 00:56:04,219 --> 00:56:06,699 Application 1287 00:56:06,699 --> 00:56:08,039 Vale 1288 00:56:08,039 --> 00:56:11,000 Application context 1289 00:56:11,000 --> 00:56:12,500 Spring framework 1290 00:56:12,500 --> 00:56:15,579 Vale, entonces vamos a sacarla 1291 00:56:15,579 --> 00:56:17,400 Para ahora sacar el bin 1292 00:56:17,400 --> 00:56:18,260 Del service 1293 00:56:18,260 --> 00:56:23,030 el service que es alumno 1294 00:56:23,030 --> 00:56:24,130 service 1295 00:56:24,130 --> 00:56:33,019 application 1296 00:56:33,019 --> 00:56:35,139 context punto get 1297 00:56:35,139 --> 00:56:35,860 bin 1298 00:56:35,860 --> 00:56:38,579 get bin 1299 00:56:38,579 --> 00:56:40,860 alumno service punto 1300 00:56:40,860 --> 00:56:45,179 class, venga, sácame 1301 00:56:45,179 --> 00:56:47,000 este bin con todo lo que 1302 00:56:47,000 --> 00:56:48,320 cuelgue de él, con todo 1303 00:56:48,320 --> 00:56:51,000 y ahora ya vamos a 1304 00:56:51,000 --> 00:56:51,739 probar 1305 00:56:51,739 --> 00:56:53,320 a ver 1306 00:56:53,320 --> 00:56:57,099 service punto get 1307 00:56:57,099 --> 00:56:58,780 alumno 1 1308 00:56:58,780 --> 00:57:05,190 alumno 1 1309 00:57:05,190 --> 00:57:07,750 ah, vale, porque la L 1310 00:57:07,750 --> 00:57:09,409 vale 1311 00:57:09,409 --> 00:57:13,219 bueno, no sé si vosotros 1312 00:57:13,219 --> 00:57:15,159 no tendréis alumnos metidos 1313 00:57:15,159 --> 00:57:17,260 meted uno cualquiera rápidamente 1314 00:57:17,260 --> 00:57:20,099 yo mientras voy probando a ver si esto 1315 00:57:20,099 --> 00:57:21,480 funciona 1316 00:57:21,480 --> 00:57:31,900 venga, pues sprint se lanza 1317 00:57:31,900 --> 00:57:33,079 blu, blu, blu 1318 00:57:33,079 --> 00:57:34,880 perfecto 1319 00:57:34,880 --> 00:57:37,679 todas nuestras anotaciones, aquí está el alumno 1320 00:57:37,679 --> 00:57:40,039 como no tengo un toString, pues vaya patata 1321 00:57:40,039 --> 00:57:42,300 pero bueno, me ha recuperado un alumno 1322 00:57:42,300 --> 00:57:44,000 lógicamente, no tengo un toString 1323 00:57:44,000 --> 00:57:47,610 vale 1324 00:57:47,610 --> 00:57:52,349 no veo aquí el 1325 00:57:52,349 --> 00:57:54,309 select, con lo cual la opción 1326 00:57:54,309 --> 00:57:56,510 de showSQL por defecto no está 1327 00:57:56,510 --> 00:57:58,510 true, luego vamos a ponérsela 1328 00:57:58,510 --> 00:58:00,329 al properties, porque es que 1329 00:58:00,329 --> 00:58:01,989 si no, pues 1330 00:58:01,989 --> 00:58:04,570 que yo aquí 1331 00:58:04,570 --> 00:58:06,130 no he visto 1332 00:58:06,130 --> 00:58:08,429 el select no sé qué, todo lo que me 1333 00:58:08,429 --> 00:58:10,369 sale que es lo que está haciendo Ibernate para controlar 1334 00:58:10,369 --> 00:58:12,090 porque la opción showSQL 1335 00:58:12,090 --> 00:58:13,170 No está puesta 1336 00:58:13,170 --> 00:58:16,250 Entonces, como sí que nos interesa 1337 00:58:16,250 --> 00:58:17,190 Volver las cosas 1338 00:58:17,190 --> 00:58:20,150 Vamos a ponérsela en el Application Properties 1339 00:58:20,150 --> 00:58:23,969 ¿Qué? Application Properties 1340 00:58:23,969 --> 00:58:25,369 Que esta 1341 00:58:25,369 --> 00:58:27,909 Se llamaba, ¿tenéis ahí a mano algún? 1342 00:58:34,480 --> 00:58:35,420 A ver 1343 00:58:35,420 --> 00:58:37,360 Es que es por no abrir 1344 00:58:37,360 --> 00:58:39,480 Ah, bueno, yo lo tendría aquí arriba 1345 00:58:39,480 --> 00:58:41,019 Supongo 1346 00:58:41,019 --> 00:58:43,239 Sí, un momento 1347 00:58:43,239 --> 00:58:44,099 Un momentito, porque 1348 00:58:44,099 --> 00:58:47,949 No, pues aquí tampoco lo puse 1349 00:58:47,949 --> 00:58:49,389 Pase de todo 1350 00:58:49,389 --> 00:58:51,130 Es que tendría que abrir el eclipse para 1351 00:58:51,130 --> 00:58:54,789 Para acordarme la propiedad 1352 00:58:54,789 --> 00:58:55,969 O preguntarse al HGPT 1353 00:58:55,969 --> 00:58:57,230 Que no le estamos preguntando nada 1354 00:58:57,230 --> 00:58:58,190 Y se va 1355 00:58:58,190 --> 00:59:00,349 Y se va a aburrir 1356 00:59:00,349 --> 00:59:05,780 Vale, espera, mientras lo copias 1357 00:59:05,780 --> 00:59:06,860 Tú, Cristina 1358 00:59:06,860 --> 00:59:09,699 Voy a pedírselo al HGPT 1359 00:59:09,699 --> 00:59:10,780 Que estará diciendo 1360 00:59:10,780 --> 00:59:13,920 Martes, 3 primeras horas de la mañana 1361 00:59:13,920 --> 00:59:15,039 Y no me preguntas 1362 00:59:15,039 --> 00:59:16,159 ¿Qué está pasando? 1363 00:59:16,159 --> 00:59:25,519 Vale 1364 00:59:25,519 --> 00:59:29,900 Aplicación 1365 00:59:29,900 --> 00:59:32,119 Punto properties 1366 00:59:32,119 --> 00:59:33,239 Típico 1367 00:59:33,239 --> 00:59:39,480 Vale, ya está 1368 00:59:39,480 --> 00:59:42,760 Vale, le he pedido 1369 00:59:42,760 --> 00:59:45,940 ¿Se puede saber por qué me hablan italiano? 1370 00:59:46,860 --> 00:59:47,360 A veces 1371 00:59:47,360 --> 00:59:50,039 Porque no he puesto la tilde 1372 00:59:50,039 --> 00:59:50,739 El típico 1373 00:59:50,739 --> 00:59:53,960 Bueno, pues nada 1374 00:59:53,960 --> 00:59:57,480 Me ha confundido con Estefano 1375 00:59:57,480 --> 00:59:59,400 Vale, pues entonces 1376 00:59:59,400 --> 01:00:01,199 Esto era, venga 1377 01:00:01,199 --> 01:00:06,159 Estas, tres de aquí 1378 01:00:06,159 --> 01:00:07,239 Ala 1379 01:00:07,239 --> 01:00:14,420 Vale, DDL auto 1380 01:00:14,420 --> 01:00:15,860 Que la actualice si cambia 1381 01:00:15,860 --> 01:00:17,000 SOSQL true 1382 01:00:17,000 --> 01:00:19,320 Y que me lo formate true 1383 01:00:19,320 --> 01:00:30,909 Pues venga, ahí está mi selleta 1384 01:00:30,909 --> 01:00:33,170 Vale, mucho más bonito así 1385 01:00:33,170 --> 01:00:40,250 ¿Eh? Acabáis antes y se lo preguntáis 1386 01:00:40,250 --> 01:00:40,730 A Chajerito 1387 01:00:40,730 --> 01:00:54,099 ¿Eh? Bueno, pues 1388 01:00:54,099 --> 01:00:57,900 Las anotaciones están bien 1389 01:00:57,900 --> 01:00:59,099 El repositorio está bien 1390 01:00:59,099 --> 01:01:01,760 A falta de que no tiene ningún método así chulo 1391 01:01:01,760 --> 01:01:03,719 Ya lo incorporaremos 1392 01:01:03,719 --> 01:01:04,940 Luego lo incorporamos 1393 01:01:04,940 --> 01:01:07,300 Ay, a ver 1394 01:01:07,300 --> 01:01:08,639 Que tengo que dejar, esto 1395 01:01:08,639 --> 01:01:11,059 Pero no vamos a hacerlo con un main 1396 01:01:11,059 --> 01:01:13,679 Entonces vamos a hacerlo con un microservicio 1397 01:01:13,679 --> 01:01:17,960 Pues que necesitamos 1398 01:01:17,960 --> 01:01:19,019 El controller 1399 01:01:19,019 --> 01:01:22,340 El controller es el que recoge la url 1400 01:01:22,340 --> 01:01:23,179 De petición 1401 01:01:23,179 --> 01:01:25,119 De ese microservicio 1402 01:01:25,119 --> 01:01:28,179 Hace la llamada al servicio 1403 01:01:28,179 --> 01:01:30,280 Y me devuelve el json correspondiente 1404 01:01:30,280 --> 01:01:32,400 de respuesta o ejecuta 1405 01:01:32,400 --> 01:01:33,780 lo que toque en la base de datos 1406 01:01:33,780 --> 01:01:36,159 depende de si es una consulta o es una 1407 01:01:36,159 --> 01:01:37,880 modificación de la base de datos 1408 01:01:37,880 --> 01:01:39,780 el microservicio, el API REST 1409 01:01:39,780 --> 01:01:42,019 me puede servir tanto para recuperar datos 1410 01:01:42,019 --> 01:01:43,760 como para modificar la base de datos 1411 01:01:43,760 --> 01:01:45,900 ¿vale? ¿ya lo puedo quitar? 1412 01:01:47,960 --> 01:01:49,019 bueno, pues entonces 1413 01:01:49,019 --> 01:01:52,000 nos vamos a hacer nuestro supercontroller 1414 01:01:52,000 --> 01:01:52,980 ¿vale? 1415 01:01:57,820 --> 01:01:59,219 a ver, voy a 1416 01:01:59,219 --> 01:02:01,659 cerrar que tengo aquí con mucha cosa abierta 1417 01:02:03,079 --> 01:02:03,800 pues ala 1418 01:02:03,800 --> 01:02:06,239 Paquete, paquetillo 1419 01:02:06,239 --> 01:02:18,559 App, otra vez me falta 1420 01:02:18,559 --> 01:02:37,179 Vale, controller 1421 01:02:37,179 --> 01:02:39,219 Puede haber todos los que a mí me dé la gana 1422 01:02:39,219 --> 01:02:41,460 Cada uno puede estar asociado 1423 01:02:41,460 --> 01:02:43,719 A un tipo de peticiones relacionadas con alumnos 1424 01:02:43,719 --> 01:02:45,239 Con matrículas, con lo que sea 1425 01:02:45,239 --> 01:02:47,659 Y cada controlador estará 1426 01:02:47,659 --> 01:02:49,599 Colgando, pues de una a una URL 1427 01:02:49,599 --> 01:02:51,239 ¿Vale? Bueno, pues entonces 1428 01:02:51,239 --> 01:02:53,699 Empezamos a configurarlo 1429 01:02:53,699 --> 01:02:54,400 ¿Vale? 1430 01:02:55,340 --> 01:02:57,340 Primero, vamos a avisar a Spring 1431 01:02:57,340 --> 01:02:59,099 A Spring Web, en este caso 1432 01:02:59,099 --> 01:03:01,800 Hasta aquí Spring Web no lo hemos tocado 1433 01:03:01,800 --> 01:03:04,000 Solo hemos tocado la dependencia 1434 01:03:04,000 --> 01:03:05,460 De Spring Data JPA 1435 01:03:05,460 --> 01:03:08,039 Y son las únicas que hemos tocado 1436 01:03:08,039 --> 01:03:09,420 Aquí ya 1437 01:03:09,420 --> 01:03:12,139 Todas las anotaciones que vienen ahora 1438 01:03:12,139 --> 01:03:14,139 Son ya de la parte 1439 01:03:14,139 --> 01:03:16,039 De Spring Web modelo vista controlador 1440 01:03:16,039 --> 01:03:18,099 Bueno, pues vamos a decirle 1441 01:03:18,099 --> 01:03:19,659 Oye tú, Spring Web, tú que sabes 1442 01:03:19,659 --> 01:03:21,800 Configurar todo esto y sabes desplegar 1443 01:03:21,800 --> 01:03:23,400 El Tomcat y sabes hacerlo todo 1444 01:03:23,400 --> 01:03:26,300 Esto va a ser un controlador 1445 01:03:26,300 --> 01:03:27,539 De tipo REST 1446 01:03:27,539 --> 01:03:31,300 ¿Vale? Con todo lo que eso implica 1447 01:03:31,300 --> 01:03:33,699 ¿Qué implica todo eso? 1448 01:03:34,300 --> 01:03:35,760 Pues que se va a comunicar con JSON 1449 01:03:35,760 --> 01:03:37,679 Tanto en las subidas de datos 1450 01:03:37,679 --> 01:03:39,019 Como en lo que él te envía 1451 01:03:39,019 --> 01:03:41,619 Un montón de cosas de arquitectura interna 1452 01:03:41,619 --> 01:03:43,619 ¿Vale? 1453 01:03:44,079 --> 01:03:45,280 ¿Qué diferencia hay si lo marco? 1454 01:03:47,019 --> 01:03:47,500 ¿Perdón? 1455 01:03:47,760 --> 01:03:49,320 ¿Qué diferencia hay si lo marco controller? 1456 01:03:51,260 --> 01:03:52,500 Porque controller 1457 01:03:52,500 --> 01:03:55,039 O sea, es un controlador general 1458 01:03:55,039 --> 01:03:57,239 No es un controlador específico de web 1459 01:03:57,239 --> 01:03:59,000 ¿Vale? 1460 01:03:59,000 --> 01:04:19,460 Entonces, no habilita por debajo todo el Jackson para el Jason, todo. Entonces, Controller como que no tiene una información muy específica, pero REST Controller ya sí. Vale, entonces, hay que avisar de dónde, si es un REST Controller, o sea, un Controller no le pondrías aquí abajo la anotación de GetMapping ni de nada de eso. 1461 01:04:19,460 --> 01:04:23,030 ResController ya implica 1462 01:04:23,030 --> 01:04:25,949 Oye tú, Controller, tú vas a estar a la escucha 1463 01:04:25,949 --> 01:04:27,230 Enganchado 1464 01:04:27,230 --> 01:04:29,789 En un Tomcat que está escuchando peticiones 1465 01:04:29,789 --> 01:04:32,030 Entonces, tengo que decirte 1466 01:04:32,030 --> 01:04:34,070 La URL raíz 1467 01:04:34,070 --> 01:04:35,530 De la cual tú vas a colgar 1468 01:04:35,530 --> 01:04:37,409 Pues como te digo 1469 01:04:37,409 --> 01:04:39,650 La URL raíz de la que tú vas a colgar 1470 01:04:39,650 --> 01:04:41,690 Con la anotación request mapping 1471 01:04:41,690 --> 01:04:44,289 ¿Vale? Y con la anotación request mapping 1472 01:04:44,289 --> 01:04:45,889 Le decimos 1473 01:04:45,889 --> 01:04:46,449 Pues venga 1474 01:04:46,449 --> 01:04:49,469 Tú vas a colgar 1475 01:04:49,469 --> 01:04:52,070 a partir de la ruta base 1476 01:04:52,070 --> 01:04:52,889 de mi proyecto 1477 01:04:52,889 --> 01:04:55,750 vas a colgar, por ejemplo, de alumnos 1478 01:04:55,750 --> 01:04:57,989 ¿vale? vas a colgar de ahí 1479 01:04:57,989 --> 01:04:59,869 entonces, ¿eso qué significa? 1480 01:05:00,869 --> 01:05:02,010 que los métodos 1481 01:05:02,010 --> 01:05:03,309 que ahora se pongan aquí debajo 1482 01:05:03,309 --> 01:05:04,989 los métodos que ahora se pongan 1483 01:05:04,989 --> 01:05:07,489 ¿vale? pues se van a invocar 1484 01:05:07,489 --> 01:05:10,130 cuando yo llame a esta ruta 1485 01:05:10,130 --> 01:05:11,710 si es que ese método no tiene nada 1486 01:05:11,710 --> 01:05:13,889 añadido, o a esta ruta 1487 01:05:13,889 --> 01:05:15,989 con catenada con la que yo le ponga 1488 01:05:15,989 --> 01:05:16,309 luego 1489 01:05:16,309 --> 01:05:20,949 Bueno, la que tú quieras 1490 01:05:20,949 --> 01:05:23,210 ¿No te gusta alumno? Pues alumno 1491 01:05:23,210 --> 01:05:24,849 A ver, como es un 1492 01:05:24,849 --> 01:05:27,230 Como es un microservicio relacionado 1493 01:05:27,230 --> 01:05:29,329 Con gestionar alumnos 1494 01:05:29,329 --> 01:05:30,769 Pues lo he llamado alumnos 1495 01:05:30,769 --> 01:05:32,849 Es una 1496 01:05:32,849 --> 01:05:34,250 No, es una ruta 1497 01:05:34,250 --> 01:05:36,170 Entonces, vale 1498 01:05:36,170 --> 01:05:38,329 Puedes poner aquí la ruta que quieras 1499 01:05:38,329 --> 01:05:39,889 La que tú te vayas a entender con ella 1500 01:05:39,889 --> 01:05:41,849 Pues es muy típico también poner 1501 01:05:41,849 --> 01:05:43,869 API 1502 01:05:43,869 --> 01:05:45,710 Porque esto es una API REST 1503 01:05:45,710 --> 01:05:47,650 API alumnos, por ejemplo 1504 01:05:47,650 --> 01:05:49,530 Porque es una API REST, pues yo que sé 1505 01:05:49,530 --> 01:05:51,429 La que quieras poner, la que cuelgue tu servicio 1506 01:05:51,429 --> 01:05:51,949 Vale 1507 01:05:51,949 --> 01:05:54,929 Vale, pues entonces 1508 01:05:54,929 --> 01:05:57,690 El controlador, este es como si fuera nuestro main 1509 01:05:57,690 --> 01:05:59,150 Este es nuestro main 1510 01:05:59,150 --> 01:06:01,030 Entonces necesita el servicio, ¿verdad? 1511 01:06:01,769 --> 01:06:03,050 Entonces, este sí que sí 1512 01:06:03,050 --> 01:06:04,590 Necesita el servicio 1513 01:06:04,590 --> 01:06:06,369 Que se llama 1514 01:06:06,369 --> 01:06:08,010 Alumnoservice 1515 01:06:08,010 --> 01:06:17,420 Va a necesitar alumnoservice 1516 01:06:17,420 --> 01:06:19,079 Y este se lo vamos a inyectar por 1517 01:06:19,079 --> 01:06:21,099 Constructor, lógicamente 1518 01:06:21,099 --> 01:06:33,639 alumno 1519 01:06:33,639 --> 01:06:52,409 y ahora ya vienen 1520 01:06:52,409 --> 01:06:54,889 los métodos 1521 01:06:54,889 --> 01:06:56,809 los métodos que recogen 1522 01:06:56,809 --> 01:06:59,030 lo que este microservicio 1523 01:06:59,030 --> 01:07:00,869 puede hacer, las pequeñas partes 1524 01:07:00,869 --> 01:07:01,610 que puede hacer 1525 01:07:01,610 --> 01:07:03,789 lo de llamarle microservicio 1526 01:07:03,789 --> 01:07:05,969 es porque se supone que hace cosas atómicas 1527 01:07:05,969 --> 01:07:07,909 pequeñitas, por eso os dijeron 1528 01:07:07,909 --> 01:07:10,510 bueno, pues ahora mismo es que solamente 1529 01:07:10,510 --> 01:07:11,670 tenemos un método de servicio 1530 01:07:11,670 --> 01:07:13,789 solo tenemos un método de servicio 1531 01:07:13,789 --> 01:07:15,710 pues entonces vamos a hacer 1532 01:07:15,710 --> 01:07:17,530 Un método de controlador 1533 01:07:17,530 --> 01:07:19,610 Para llamar a ese único método de servicio 1534 01:07:19,610 --> 01:07:20,190 Que tenemos 1535 01:07:20,190 --> 01:07:23,030 Pues venga, vamos a 1536 01:07:23,030 --> 01:07:25,809 A ese método de controlador 1537 01:07:25,809 --> 01:07:27,909 Public 1538 01:07:27,909 --> 01:07:29,969 Pues le llamo como me dé la gana 1539 01:07:29,969 --> 01:07:31,710 A este método de controlador 1540 01:07:32,349 --> 01:07:35,289 GetAlumnoById 1541 01:07:35,289 --> 01:07:37,110 Como me dé a mí la gana llamarlo 1542 01:07:37,110 --> 01:07:39,130 ¿Vale? Ahora completamos todo 1543 01:07:39,130 --> 01:07:40,230 Lo que falta 1544 01:07:40,230 --> 01:07:43,309 Este método es un método de controlador 1545 01:07:43,309 --> 01:07:44,730 Que es el que va a llamar al servicio 1546 01:07:44,730 --> 01:07:47,289 Para devolver al alumno y todo eso 1547 01:07:47,289 --> 01:07:47,769 ¿Vale? 1548 01:07:48,510 --> 01:07:51,030 Entonces, este de aquí 1549 01:07:51,030 --> 01:07:55,230 Me va a hacer algo como esto 1550 01:07:55,230 --> 01:08:01,610 retomService.getAlumno 1551 01:08:01,610 --> 01:08:03,369 Vale 1552 01:08:03,369 --> 01:08:05,190 Pero aquí me faltan cosas 1553 01:08:05,190 --> 01:08:06,710 Por configurar, lógicamente 1554 01:08:06,710 --> 01:08:09,190 La idea es que este método 1555 01:08:09,190 --> 01:08:10,210 De controlador me haga esto 1556 01:08:10,210 --> 01:08:12,050 Primera cosa que me falta por 1557 01:08:12,050 --> 01:08:14,389 Configurar 1558 01:08:14,389 --> 01:08:16,909 Ah, bueno, sí, vale 1559 01:08:16,909 --> 01:08:19,449 Es un error de sintaxis 1560 01:08:19,449 --> 01:08:20,430 Vale 1561 01:08:20,430 --> 01:08:22,710 Sí, sí, sí 1562 01:08:22,710 --> 01:08:27,569 No, hombre, no 1563 01:08:27,569 --> 01:08:29,970 Hay muchos más conocimientos ahí 1564 01:08:29,970 --> 01:08:33,170 Vale, cosas que nos faltan por configurar 1565 01:08:33,170 --> 01:08:35,189 Primera, todos los métodos 1566 01:08:35,189 --> 01:08:35,949 Del controlador 1567 01:08:35,949 --> 01:08:38,489 Todos se despiertan como 1568 01:08:38,489 --> 01:08:40,789 Resultado de una petición HTTP 1569 01:08:40,789 --> 01:08:42,510 Todos, vale 1570 01:08:42,510 --> 01:08:45,329 Las peticiones HTTP pueden ser de dos tipos 1571 01:08:45,329 --> 01:08:46,930 ¿Verdad? Get y Post 1572 01:08:46,930 --> 01:08:49,590 Primera cosa que tenemos que configurar 1573 01:08:49,590 --> 01:08:51,170 Oye, tú, método de controlador 1574 01:08:51,170 --> 01:08:53,470 ¿Te toca despertarte cuando la petición 1575 01:08:53,470 --> 01:08:55,529 Sea get o cuando la 1576 01:08:55,529 --> 01:08:57,569 Petición de la HTTP sea post? 1577 01:08:58,170 --> 01:08:59,189 Vale, pues eso 1578 01:08:59,189 --> 01:09:01,569 En este caso, como este método de controlador 1579 01:09:01,569 --> 01:09:02,829 Es para hacer una consulta 1580 01:09:02,829 --> 01:09:05,409 Queremos que se despierte a una petición get 1581 01:09:05,409 --> 01:09:07,550 ¿Vale? Pues entonces le ponemos 1582 01:09:07,550 --> 01:09:08,750 Aquí la anotación 1583 01:09:08,750 --> 01:09:10,369 GetMapping 1584 01:09:10,369 --> 01:09:12,289 ¿Vale? 1585 01:09:12,869 --> 01:09:14,409 Le ponemos anotación GetMapping 1586 01:09:14,409 --> 01:09:16,770 Ahora, si yo dejo el GetMapping 1587 01:09:16,770 --> 01:09:18,289 aquí sin más 1588 01:09:18,289 --> 01:09:19,590 sin más 1589 01:09:19,590 --> 01:09:22,229 este método se despierta 1590 01:09:22,229 --> 01:09:24,170 cuando yo invoque esto 1591 01:09:24,170 --> 01:09:26,630 con la ruta base, cuando invoque 1592 01:09:26,630 --> 01:09:28,649 la ruta base es cuando se despierta este método 1593 01:09:28,649 --> 01:09:30,010 si yo pongo esto así sin más 1594 01:09:30,010 --> 01:09:32,310 pero en este caso no tiene sentido 1595 01:09:32,310 --> 01:09:34,789 porque yo a este método le quiero pasar un parámetro 1596 01:09:34,789 --> 01:09:36,649 ¿vale? tendría sentido 1597 01:09:36,649 --> 01:09:38,890 si este fuera getAlumnos 1598 01:09:38,890 --> 01:09:40,529 y yo tengo un método service 1599 01:09:40,529 --> 01:09:42,250 de getAlumnos al que llamo 1600 01:09:42,250 --> 01:09:43,729 findAll 1601 01:09:43,729 --> 01:09:45,289 pues ahí sí 1602 01:09:45,289 --> 01:09:59,729 Y entonces, poniendo esto, pero en este caso yo quiero una id, con lo cual vamos a concatenarlo con algo más. Y ese algo más con la que vamos a concatenar alumnos debería ser el parámetro, el id del alumno, debería ser el parámetro. 1603 01:09:59,729 --> 01:10:22,350 Entonces, para indicar que eso no es ruta tal cual, no es ruta tal cual, sino que es parámetro, no, ya ves, aquí, aquí ya ves. Vale, entonces esto significa, tú, GetMapping, despiértate cuando te llegue una petición del tipo, la base donde está desplegada la aplicación, API alumnos y después barra alguna cosita. 1604 01:10:22,350 --> 01:10:25,449 Y esa cosita va a ser tu parámetro 1605 01:10:25,449 --> 01:10:27,310 ¿Vale? Pero hay que indicarle aquí 1606 01:10:27,310 --> 01:10:29,909 Hay que indicarle aquí 1607 01:10:29,909 --> 01:10:32,170 Que este tiene que coger 1608 01:10:32,170 --> 01:10:33,850 Una variable de la ruta 1609 01:10:33,850 --> 01:10:35,170 Hay que decirle, oye tú 1610 01:10:35,170 --> 01:10:37,369 Que tú te vas a llenar de una variable de la ruta 1611 01:10:37,369 --> 01:10:39,890 Pues entonces eso se le indica así 1612 01:10:39,890 --> 01:10:51,239 Claro, entonces 1613 01:10:51,239 --> 01:10:52,979 Path variable significa 1614 01:10:52,979 --> 01:10:56,659 Este parámetro tiene que cogerse 1615 01:10:56,659 --> 01:10:58,920 De la ruta 1616 01:10:58,920 --> 01:11:01,659 De la ur, le tiene que cogerse de ahí 1617 01:11:01,659 --> 01:11:03,399 Entonces pues nada 1618 01:11:03,399 --> 01:11:05,220 Él tranquilamente dice, ah vale, vale, vale 1619 01:11:05,220 --> 01:11:08,000 Me voy a la ruta y lo cojo de aquí 1620 01:11:08,000 --> 01:11:10,100 Busco una variable de la ruta 1621 01:11:10,100 --> 01:11:10,939 Que esté entre llaves 1622 01:11:10,939 --> 01:11:11,720 ¿Vale? 1623 01:11:15,770 --> 01:11:17,470 Se pueden hacer más de uno 1624 01:11:17,470 --> 01:11:19,029 Tú podrías ahí concatenar 1625 01:11:19,029 --> 01:11:21,289 Quiero coger por alumnoide 1626 01:11:21,289 --> 01:11:23,770 Y además recuperar 1627 01:11:23,770 --> 01:11:25,949 Por número de matrícula o por lo que fuera 1628 01:11:25,949 --> 01:11:28,149 Por cualquier otro parámetro que quisieras poner 1629 01:11:28,149 --> 01:11:29,890 Pues esto es válido 1630 01:11:29,890 --> 01:11:30,670 Perfectamente 1631 01:11:30,670 --> 01:11:32,689 Y aquí lo separas por coma 1632 01:11:32,689 --> 01:11:35,069 Pad variable, string 1633 01:11:35,069 --> 01:11:36,529 O lo que sea este jj 1634 01:11:36,529 --> 01:11:39,390 Por el nombrecito 1635 01:11:39,390 --> 01:11:40,529 Por el nombrecito 1636 01:11:40,529 --> 01:11:41,430 ¿Vale? 1637 01:11:43,430 --> 01:11:45,529 Entonces puedes poner lo que quieras 1638 01:11:45,529 --> 01:11:48,460 Entonces 1639 01:11:48,460 --> 01:11:49,340 El problema 1640 01:11:49,340 --> 01:11:51,560 Un problema sutil 1641 01:11:51,560 --> 01:11:53,220 Es que la url 1642 01:11:53,220 --> 01:11:56,340 No distingue entre string, int 1643 01:11:56,340 --> 01:11:57,880 Para ella son todo cadenas 1644 01:11:57,880 --> 01:11:59,300 Entonces 1645 01:11:59,300 --> 01:12:02,920 Tú no puedes hacer dos get mapping 1646 01:12:02,920 --> 01:12:04,600 Que tengan 1647 01:12:04,600 --> 01:12:06,260 Dos variables aquí 1648 01:12:06,260 --> 01:12:07,579 Y decir, ah, son distintas 1649 01:12:07,579 --> 01:12:09,460 Porque una va a ser un número y otra un string 1650 01:12:09,460 --> 01:12:11,479 Ya, pero eso no se entera uno hasta aquí 1651 01:12:11,479 --> 01:12:13,659 Antes no te enteras 1652 01:12:13,659 --> 01:12:15,239 Entonces habría una confusión 1653 01:12:15,239 --> 01:12:18,180 Entonces, que tú quieres dos get mapping 1654 01:12:18,180 --> 01:12:20,079 Pasándole dos variables consecutivas 1655 01:12:20,079 --> 01:12:22,239 Pues inserta alguna cosita entre medias 1656 01:12:22,239 --> 01:12:23,500 Algo que cambie la ruta 1657 01:12:23,500 --> 01:12:26,479 ¿No? Por ejemplo, pues inserta aquí cualquier cosa 1658 01:12:26,479 --> 01:12:28,659 Y matrícula 1659 01:12:28,659 --> 01:12:30,699 no sé qué, entonces 1660 01:12:30,699 --> 01:12:32,800 ya esta sería diferente 1661 01:12:32,800 --> 01:12:34,819 de la otra, ¿vale? me refiero 1662 01:12:34,819 --> 01:12:36,159 que no puede haber dos rutas 1663 01:12:36,159 --> 01:12:40,359 equivalentes, entonces 1664 01:12:40,359 --> 01:12:48,140 claro, o sea, lo que yo quiero decir es que 1665 01:12:48,140 --> 01:12:50,300 si yo hago otro método, porque me apetece a mí 1666 01:12:50,300 --> 01:12:52,260 ¿vale? este método me devuelve a través de un 1667 01:12:52,260 --> 01:12:54,180 int y de otro int, algo 1668 01:12:54,180 --> 01:12:56,159 y ahora quiero hacer un método que me 1669 01:12:56,159 --> 01:12:58,039 devuelva a partir de un int y un 1670 01:12:58,039 --> 01:13:00,159 string, otra cosa, pues eso es 1671 01:13:00,159 --> 01:13:01,739 ambiguo, porque para la URL 1672 01:13:01,739 --> 01:13:03,920 no hay int, no hay string, ni hay nada. 1673 01:13:04,500 --> 01:13:06,020 Entonces, no puedes hacer dos getMapping 1674 01:13:06,020 --> 01:13:07,739 con dos variables así, 1675 01:13:08,220 --> 01:13:10,319 porque no se va a distinguir, aunque tú sepas 1676 01:13:10,319 --> 01:13:12,279 internamente que esta va a nutrir 1677 01:13:12,279 --> 01:13:14,420 un id, esta va a nutrir un string, 1678 01:13:15,239 --> 01:13:16,140 ¿vale? Entonces, pues cambia 1679 01:13:16,140 --> 01:13:18,100 la ruta, cambia la ruta, pones aquí 1680 01:13:18,100 --> 01:13:19,880 otra cosa, lo que sea, para que las rutas sean 1681 01:13:19,880 --> 01:13:21,640 funcionalmente distintas. 1682 01:13:22,000 --> 01:13:23,840 Para que sean funcionalmente distintas, ¿vale? 1683 01:13:24,840 --> 01:13:26,279 Bueno, esto lo has respondido a tu pregunta 1684 01:13:26,279 --> 01:13:28,100 y se pueden poner varios. Pues sí, se pueden poner 1685 01:13:28,100 --> 01:13:29,000 todos los que uno quiera. 1686 01:13:29,000 --> 01:13:30,800 En nuestro caso 1687 01:13:30,800 --> 01:13:32,659 Recuperar por id 1688 01:13:32,659 --> 01:13:37,670 Y ya está 1689 01:13:37,670 --> 01:13:38,970 Ya está 1690 01:13:38,970 --> 01:13:39,869 ¿Vale? 1691 01:13:40,189 --> 01:13:40,750 Ya está 1692 01:13:40,750 --> 01:13:41,710 Entonces todo esto 1693 01:13:41,710 --> 01:13:43,250 Tiene por debajo 1694 01:13:43,250 --> 01:13:45,409 La llamada al servlet 1695 01:13:45,409 --> 01:13:47,329 ¿La llamada a qué? 1696 01:13:48,010 --> 01:13:49,590 Spring tiene por debajo Jackson 1697 01:13:49,590 --> 01:13:50,909 Que ya sabemos cómo funciona 1698 01:13:50,909 --> 01:13:52,489 Jackson pues te construye 1699 01:13:52,489 --> 01:13:54,210 A partir de una entidad 1700 01:13:54,210 --> 01:13:55,289 Te construye un JSON 1701 01:13:55,289 --> 01:13:56,750 Y viceversa 1702 01:13:56,750 --> 01:13:57,090 ¿Vale? 1703 01:13:57,130 --> 01:13:58,770 Mediante anotaciones o lo que sea 1704 01:13:58,770 --> 01:14:00,289 Y si no hay anotaciones 1705 01:14:00,289 --> 01:14:01,229 Pues te lo construye 1706 01:14:01,229 --> 01:14:03,310 con los nombres por defecto 1707 01:14:03,310 --> 01:14:05,270 pues Spring tiene por debajo el Jackson 1708 01:14:05,270 --> 01:14:06,810 que lo hemos visto en las dependencias 1709 01:14:06,810 --> 01:14:08,810 que coge este alumno 1710 01:14:08,810 --> 01:14:10,310 lo mapea a JSON 1711 01:14:10,310 --> 01:14:12,850 y te lo manda, y ya está 1712 01:14:12,850 --> 01:14:15,710 ¿vale? por eso es un microservicio 1713 01:14:15,710 --> 01:14:17,210 porque no está pensado para que alguien 1714 01:14:17,210 --> 01:14:19,229 lo vea en el navegador, nosotros lo vamos a ver en el navegador 1715 01:14:19,229 --> 01:14:20,789 sino está pensado para que 1716 01:14:20,789 --> 01:14:23,090 tú llames a esto desde 1717 01:14:23,090 --> 01:14:24,989 otra aplicación, cojas ese JSON 1718 01:14:24,989 --> 01:14:27,430 con ese JSON te saques la información que te dé la gana 1719 01:14:27,430 --> 01:14:29,229 lo que sea, pero eso ya es otro 1720 01:14:29,229 --> 01:14:31,329 problema, vale, es llamar 1721 01:14:31,329 --> 01:14:33,149 a esto desde un cliente, que podemos hacerlo 1722 01:14:33,149 --> 01:14:35,109 también y ya está, pero bueno, nos es más cómodo 1723 01:14:35,109 --> 01:14:37,250 llamarlo desde el navegador, pues venga 1724 01:14:37,250 --> 01:14:39,390 yo creo que no se me ha 1725 01:14:39,390 --> 01:14:41,250 olvidado nada, veréis, si me he olvidado algo, pues casi 1726 01:14:41,250 --> 01:14:42,449 mejor, porque así 1727 01:14:42,449 --> 01:14:44,130 no salen errores 1728 01:14:44,130 --> 01:14:46,069 vale, pues entonces 1729 01:14:46,069 --> 01:14:48,569 ahora que ya tenemos 1730 01:14:48,569 --> 01:14:50,210 todo 1731 01:14:50,210 --> 01:14:52,729 el controller, el no sé qué 1732 01:14:52,729 --> 01:14:54,710 vamos a lanzar la aplicación 1733 01:14:54,710 --> 01:14:57,149 esto se tiene que desplegar 1734 01:14:57,149 --> 01:14:57,729 en un Tomcat 1735 01:14:57,729 --> 01:15:00,590 pero bueno, tenemos la suerte 1736 01:15:00,590 --> 01:15:02,949 de que para hacer las pruebas 1737 01:15:02,949 --> 01:15:04,930 si nosotros lanzamos 1738 01:15:04,930 --> 01:15:06,869 la aplicación Spring Boot aquí desde el Eclipse 1739 01:15:06,869 --> 01:15:07,890 o desde el IntelliJ 1740 01:15:07,890 --> 01:15:10,609 pues automáticamente 1741 01:15:10,609 --> 01:15:12,770 se lanza un Tomcat 1742 01:15:12,770 --> 01:15:14,630 en el cual se despliega la aplicación 1743 01:15:14,630 --> 01:15:16,529 y ya está, y yo la puedo invocar 1744 01:15:16,529 --> 01:15:18,289 desde mi navegador 1745 01:15:18,289 --> 01:15:22,029 que yo ya no estoy en fase de pruebas 1746 01:15:22,029 --> 01:15:24,369 pues lógicamente el Tomcat que lanza el Eclipse 1747 01:15:24,369 --> 01:15:26,189 y que se cierra con el Eclipse que está embebido 1748 01:15:26,189 --> 01:15:27,909 no me vale, pero es que entonces 1749 01:15:27,909 --> 01:15:29,850 que haríamos, cogemos esta aplicación 1750 01:15:29,850 --> 01:15:31,829 tal cual, la empaquetamos en war 1751 01:15:31,829 --> 01:15:33,770 en el formato war 1752 01:15:33,770 --> 01:15:36,050 y ahora ya nos vamos con ese war 1753 01:15:36,050 --> 01:15:37,470 al servidor Tomcat que sea 1754 01:15:37,470 --> 01:15:39,590 y ya está, metemos el war en el Tomcat, pum 1755 01:15:39,590 --> 01:15:41,770 se despliega y ya puede uno 1756 01:15:41,770 --> 01:15:43,869 llamar a ese 1757 01:15:43,869 --> 01:15:45,789 Tomcat, pero bueno, como estamos en pruebas 1758 01:15:45,789 --> 01:15:46,989 vamos a lanzarlo desde aquí 1759 01:15:46,989 --> 01:15:49,810 vale, pues venga, lanzamos 1760 01:15:49,810 --> 01:15:54,619 esto, a ver 1761 01:15:54,619 --> 01:15:56,119 cuantos errores nos salen 1762 01:15:56,119 --> 01:15:59,220 webserver 1763 01:15:59,220 --> 01:16:01,720 was already in use 1764 01:16:01,720 --> 01:16:04,039 Yo porque lo tengo en use 1765 01:16:04,039 --> 01:16:09,079 Ah, vale, vale, vale 1766 01:16:09,079 --> 01:16:10,859 Que no había parado yo, vale, vale 1767 01:16:10,859 --> 01:16:15,180 El controller 1768 01:16:15,180 --> 01:16:16,859 Es que ya está completamente configurado 1769 01:16:16,859 --> 01:16:19,079 El controller ya automáticamente despliega 1770 01:16:19,079 --> 01:16:21,119 Tu aplicación web en esta url 1771 01:16:21,119 --> 01:16:24,680 Vale, es que aquí no hay página web, no hay nada 1772 01:16:24,680 --> 01:16:28,220 Entonces vamos a volver a intentarlo 1773 01:16:28,220 --> 01:16:29,619 Venga 1774 01:16:29,619 --> 01:16:38,119 Ah, bueno, me ha hecho el main 1775 01:16:38,119 --> 01:16:40,279 Pero el main se me ha olvidado quitarlo 1776 01:16:40,279 --> 01:16:43,180 Entonces, no me ha dado errores 1777 01:16:43,180 --> 01:16:44,260 Esto en principio 1778 01:16:44,260 --> 01:16:49,020 A ver, en el main es que ya lo puedo quitar 1779 01:16:49,020 --> 01:16:50,699 Si quiero, ya no lo, era para hacer la prueba 1780 01:16:50,699 --> 01:16:52,600 O sea, es que me refiero que me lo ha hecho 1781 01:16:52,600 --> 01:16:53,739 Porque se me ha olvidado quitarlo 1782 01:16:53,739 --> 01:16:55,960 Esto, para la próxima lo quito 1783 01:16:55,960 --> 01:16:59,220 Entonces, ahora lo que, esto se supone que está lanzado en un Tomcat 1784 01:16:59,220 --> 01:17:00,520 Vamos a probarlo 1785 01:17:00,520 --> 01:17:02,560 Me voy yo aquí 1786 01:17:02,560 --> 01:17:05,859 vale, como este es el Tomcat 1787 01:17:05,859 --> 01:17:08,140 interno, la aplicación 1788 01:17:08,140 --> 01:17:09,380 se me ha desplegado aquí 1789 01:17:09,380 --> 01:17:12,020 directamente en el localhost, porque estoy en las pruebas 1790 01:17:12,020 --> 01:17:12,479 del Eclipse 1791 01:17:12,479 --> 01:17:14,859 voy tranquilo 1792 01:17:14,859 --> 01:17:17,239 pero en una situación real 1793 01:17:17,239 --> 01:17:20,000 uno cuando coge esta aplicación 1794 01:17:20,000 --> 01:17:22,060 la empaqueta en un guard y la despliega 1795 01:17:22,060 --> 01:17:24,100 en ese guard, pues entonces 1796 01:17:24,100 --> 01:17:25,920 ya la ruta raíz de su aplicación 1797 01:17:25,920 --> 01:17:28,180 será la IP del servidor 1798 01:17:28,180 --> 01:17:30,100 con el nombre de esa 1799 01:17:30,100 --> 01:17:31,960 aplicación, aquí el nombre 1800 01:17:31,960 --> 01:17:33,539 de la aplicación no me hace falta 1801 01:17:33,539 --> 01:17:35,739 porque estoy en el Tomcat interno que se ha 1802 01:17:35,739 --> 01:17:38,020 desplegado específicamente 1803 01:17:38,020 --> 01:17:39,760 para esta aplicación, por eso aquí no lo pongo 1804 01:17:39,760 --> 01:17:41,640 vale, entonces 1805 01:17:41,640 --> 01:17:43,739 aquí lógicamente no tengo nada escuchando aquí 1806 01:17:43,739 --> 01:17:44,760 normal que me dé un error 1807 01:17:44,760 --> 01:17:47,819 pues venga, vamos a llamar 1808 01:17:47,819 --> 01:17:49,220 a mi stack 1809 01:17:49,220 --> 01:17:50,979 API alumnos 1 1810 01:17:50,979 --> 01:17:52,020 vale 1811 01:17:52,020 --> 01:17:55,119 madre del amor hermoso 1812 01:17:55,119 --> 01:17:59,640 porque la matrícula tiene un alumno 1813 01:17:59,640 --> 01:18:01,819 que el alumno tiene matrícula, que la matrícula tiene un alumno 1814 01:18:01,819 --> 01:18:03,979 Qué bonito, ¿verdad? 1815 01:18:05,180 --> 01:18:07,399 Fijaos qué cantidad de llaves juntas 1816 01:18:07,399 --> 01:18:10,399 Sí, mi pregunta es por qué para 1817 01:18:10,399 --> 01:18:11,760 No sé por qué para 1818 01:18:11,760 --> 01:18:13,520 Porque la recursión es infinita 1819 01:18:13,520 --> 01:18:14,539 Pero para 1820 01:18:14,539 --> 01:18:18,760 Vale, en cualquier caso esto no nos gusta 1821 01:18:18,760 --> 01:18:21,079 No nos gusta, nada 1822 01:18:21,079 --> 01:18:25,359 Claro, mola pero nos gusta 1823 01:18:25,359 --> 01:18:28,180 Antes de hacer el cambio que deberíamos hacer 1824 01:18:28,180 --> 01:18:28,960 Para esto 1825 01:18:28,960 --> 01:18:31,039 Vamos a ponerle en el properties 1826 01:18:31,039 --> 01:18:33,899 Porque el JSON de salida así formateado no vemos nada 1827 01:18:33,899 --> 01:18:35,720 Hay una propiedad 1828 01:18:35,720 --> 01:18:36,979 Que le puedes poner en el properties 1829 01:18:36,979 --> 01:18:38,739 Para que te formate 1830 01:18:38,739 --> 01:18:40,600 Que creo que antes este me lo ha dado 1831 01:18:40,600 --> 01:18:44,859 Como que la tenía puesta en el otro lado 1832 01:18:44,859 --> 01:18:47,260 Ah, la tenía puesta en 1833 01:18:47,260 --> 01:18:48,319 Y este no me lo ha ofrecido 1834 01:18:48,319 --> 01:18:50,380 No me lo ha ofrecido 1835 01:18:50,380 --> 01:18:52,420 Bueno, pero yo la tenía puesta en mi otro proyecto 1836 01:18:52,420 --> 01:18:56,100 Vale, la tenía puesta en mi otro proyecto 1837 01:18:56,100 --> 01:18:57,359 Pero me salía muy feo todo 1838 01:18:57,359 --> 01:18:58,619 Esta 1839 01:18:58,619 --> 01:19:03,079 Esta es la que yo quiero 1840 01:19:03,079 --> 01:19:05,140 Para que salga bonito en el navegador 1841 01:19:05,140 --> 01:19:05,760 Que si no 1842 01:19:05,760 --> 01:19:07,840 Sale más feo que nada 1843 01:19:07,840 --> 01:19:13,960 Vale, para que indente el JSON 1844 01:19:13,960 --> 01:19:15,020 En el navegador 1845 01:19:15,020 --> 01:19:16,920 Para que salga intentado 1846 01:19:16,920 --> 01:19:21,399 Si esto va a una máquina, da igual 1847 01:19:21,399 --> 01:19:23,100 Pues va a una máquina 1848 01:19:23,100 --> 01:19:24,779 La máquina parsea 1849 01:19:24,779 --> 01:19:29,090 Los saltos 1850 01:19:29,090 --> 01:19:31,829 Pero para nuestras pruebas de bruno en el navegador 1851 01:19:31,829 --> 01:19:44,760 Vale, voy a volver a relanzarlo 1852 01:19:44,760 --> 01:20:00,909 Pues buf, buf, buf 1853 01:20:00,909 --> 01:20:02,189 Así queda todavía más bonito 1854 01:20:02,189 --> 01:20:03,390 Se ha llegado hasta saltar 1855 01:20:03,390 --> 01:20:04,430 Pam, pam, pam, pam 1856 01:20:04,430 --> 01:20:06,989 Pam, pam, pam, pam 1857 01:20:06,989 --> 01:20:08,289 Así es que mueve más 1858 01:20:08,289 --> 01:20:10,729 Vale, pues no, obviamente no 1859 01:20:10,729 --> 01:20:12,529 No queremos esto 1860 01:20:12,529 --> 01:20:14,970 Entonces 1861 01:20:14,970 --> 01:20:16,710 Soluciones que tenemos 1862 01:20:16,710 --> 01:20:18,750 Efectivamente, solución 1863 01:20:18,750 --> 01:20:20,829 Fea, horrible, muy mala 1864 01:20:20,829 --> 01:20:22,989 Caca, la tuya 1865 01:20:22,989 --> 01:20:25,590 Efectivamente, pero muy natural 1866 01:20:25,590 --> 01:20:26,989 Que es, ¿cuál es el problema? 1867 01:20:26,989 --> 01:20:31,210 El problema es que matrícula me ha devuelto el alumno. 1868 01:20:31,470 --> 01:20:32,810 ¿Alumno tiene matrícula? 1869 01:20:33,109 --> 01:20:34,909 Me voy hasta el infinito. 1870 01:20:36,270 --> 01:20:38,989 Bueno, como recordamos de JSON que había anotaciones 1871 01:20:39,529 --> 01:20:42,289 para configurar el parseo de entidad a JSON, 1872 01:20:43,210 --> 01:20:46,930 pues creemos recordar que había una que era JSON ignore. 1873 01:20:53,689 --> 01:20:57,829 Ignore el alumno a la hora de mapear en JSON la matrícula. 1874 01:20:58,850 --> 01:21:00,770 Esto es independiente de lo anterior. 1875 01:21:01,569 --> 01:21:02,010 ¿Vale? 1876 01:21:02,949 --> 01:21:04,470 Entonces, y lo mismo, 1877 01:21:05,390 --> 01:21:07,029 podríamos, esto no deja de ser 1878 01:21:07,029 --> 01:21:08,909 una entidad que se va a mapear en un JSON. 1879 01:21:09,590 --> 01:21:10,949 Podríamos aquí cambiar los 1880 01:21:10,949 --> 01:21:13,210 campos, que no me gusta que ponga asignatura, 1881 01:21:13,390 --> 01:21:15,029 quiero que ponga nombre, pues JSON 1882 01:21:15,029 --> 01:21:17,010 property nombre, aquí uno puede 1883 01:21:17,010 --> 01:21:19,130 mezclar actuaciones Jackson con actuaciones JPA, 1884 01:21:19,210 --> 01:21:20,750 no hay ningún problema. ¿Vale? 1885 01:21:21,829 --> 01:21:22,270 Entonces, 1886 01:21:22,930 --> 01:21:24,970 que en el mapeo JSON, ignórame 1887 01:21:24,970 --> 01:21:26,869 al alumno en el mapeo JSON, por favor. 1888 01:21:34,619 --> 01:21:35,319 Pero entonces 1889 01:21:35,319 --> 01:21:36,979 tengo que añadir un campo aquí y cambio 1890 01:21:36,979 --> 01:21:39,000 mi lógica de negocio y eso sí que no 1891 01:21:39,000 --> 01:21:40,579 ¿vale? 1892 01:21:40,899 --> 01:21:43,100 pero por ahí van los tiros del segundo 1893 01:21:43,100 --> 01:21:45,000 arreglo, en principio, esa es la idea 1894 01:21:45,000 --> 01:21:46,340 entonces 1895 01:21:46,340 --> 01:21:49,479 vamos a 1896 01:21:49,479 --> 01:21:52,819 la hemos relanzado 1897 01:21:52,819 --> 01:21:57,649 y ahora 1898 01:21:57,649 --> 01:21:58,970 hombre 1899 01:21:58,970 --> 01:22:01,109 muy bien 1900 01:22:01,109 --> 01:22:03,250 ¿vale? 1901 01:22:03,949 --> 01:22:05,989 ya me sale toda la información del alumno 1902 01:22:05,989 --> 01:22:08,109 con sus matrículas, pero de cada 1903 01:22:08,109 --> 01:22:10,029 matrícula no ha vuelto 1904 01:22:10,029 --> 01:22:11,989 mapear el alumno otra vez, así hasta 1905 01:22:11,989 --> 01:22:13,149 el infinito, bla bla bla 1906 01:22:13,149 --> 01:22:21,109 vale, como veis 1907 01:22:21,109 --> 01:22:23,489 porque uno aquí podría hacerse esa 1908 01:22:23,489 --> 01:22:25,609 pregunta, que seguro que os está rondando la cabeza 1909 01:22:25,609 --> 01:22:27,489 pero a ver 1910 01:22:27,489 --> 01:22:28,789 esto era lazy 1911 01:22:28,789 --> 01:22:34,699 claro, o sea 1912 01:22:34,699 --> 01:22:37,579 esto era lazy, entonces cuando yo devuelvo 1913 01:22:37,579 --> 01:22:39,539 el alumno, lo devuelvo el alumno en 1914 01:22:39,539 --> 01:22:41,680 lazy, con lo cual cuando él mapea 1915 01:22:41,680 --> 01:22:43,699 no tiene eso, pero es que el mapeo se hace 1916 01:22:43,699 --> 01:22:45,199 antes, vale 1917 01:22:45,199 --> 01:22:47,340 entonces eso no afecta 1918 01:22:47,340 --> 01:22:48,760 el lazy, el jason va a aparecer 1919 01:22:48,760 --> 01:22:51,760 bueno, pues que ocurre 1920 01:22:51,760 --> 01:22:53,819 que vale, que esto lo podríamos dejar así 1921 01:22:53,819 --> 01:22:55,180 pero 1922 01:22:55,180 --> 01:22:56,279 ostras 1923 01:22:56,279 --> 01:22:59,960 es un poco feo 1924 01:22:59,960 --> 01:23:01,659 ¿vale? porque ya es un parchecillo 1925 01:23:01,659 --> 01:23:03,180 ahí, a lo mejor 1926 01:23:03,180 --> 01:23:05,760 mi aplicación hace más cosas con 1927 01:23:05,760 --> 01:23:07,800 jason, y jolines yo no quiero 1928 01:23:07,800 --> 01:23:09,760 ignorar este campo todo el rato, porque a lo mejor 1929 01:23:09,760 --> 01:23:11,539 me llevo la matrícula con su alumno 1930 01:23:11,539 --> 01:23:13,800 y no quiero que ignore el campo alumno en otros 1931 01:23:13,800 --> 01:23:15,979 contextos, entonces estoy 1932 01:23:15,979 --> 01:23:17,939 poniendo algo 1933 01:23:17,939 --> 01:23:21,199 que a lo mejor en otras situaciones de mi aplicación 1934 01:23:21,199 --> 01:23:22,079 me puede venir mal. 1935 01:23:22,159 --> 01:23:22,739 Eso por un lado. 1936 01:23:23,500 --> 01:23:25,180 Pero aunque eso no sea lo que ocurre, 1937 01:23:25,579 --> 01:23:27,180 que lo normal es que no sea lo que ocurra, 1938 01:23:27,720 --> 01:23:30,920 estoy ensuciando el modelo. 1939 01:23:32,060 --> 01:23:35,640 Entonces, el modelo tiene que ser una cosa muy limpia 1940 01:23:35,640 --> 01:23:40,000 que solamente tenga información relativa a la base de datos 1941 01:23:40,000 --> 01:23:41,560 o lo que es lo mismo, JPA, 1942 01:23:42,460 --> 01:23:45,100 y nada de meterle mierdas relacionadas con mi aplicación. 1943 01:23:45,779 --> 01:23:46,600 Y esto lo es. 1944 01:23:46,600 --> 01:23:48,859 Porque esto es una mierdecilla 1945 01:23:48,859 --> 01:23:51,060 Que yo he metido porque el Jason me sale anidado 1946 01:23:51,060 --> 01:23:52,159 Etcétera, etcétera 1947 01:23:52,159 --> 01:23:55,079 Entonces, modelo tiene que ser como una especie 1948 01:23:55,079 --> 01:23:56,579 De Dios, que no se le toca 1949 01:23:56,579 --> 01:23:58,460 ¿Vale? En principio 1950 01:23:58,460 --> 01:24:00,199 Luego 1951 01:24:00,199 --> 01:24:02,180 Si no me gusta esto 1952 01:24:02,180 --> 01:24:04,560 Que no es que te esté regañando 1953 01:24:04,560 --> 01:24:05,939 Si es la opción natural 1954 01:24:05,939 --> 01:24:08,899 Lo que estoy diciendo es un poco, pues bueno, los principios básicos 1955 01:24:08,899 --> 01:24:09,539 Con lo cual 1956 01:24:09,539 --> 01:24:11,899 ¿Cuál es la solución habitual? 1957 01:24:12,300 --> 01:24:14,680 Es decir, perdona, es que mi problema ha sido 1958 01:24:14,680 --> 01:24:16,420 Que yo ya de partida he hecho una cosa 1959 01:24:16,420 --> 01:24:18,619 muy, muy, muy, muy fea. 1960 01:24:19,600 --> 01:24:20,500 ¿Qué es? 1961 01:24:20,699 --> 01:24:20,819 No. 1962 01:24:23,260 --> 01:24:24,460 Poner objetos 1963 01:24:24,460 --> 01:24:26,500 del modelo ahí en el controlador. 1964 01:24:26,840 --> 01:24:28,319 Tú, controlador, devuélveme a alumno. 1965 01:24:28,920 --> 01:24:30,060 Pero alumno tiene 1966 01:24:30,060 --> 01:24:32,239 todo lo de la base de datos, entre ellos 1967 01:24:32,239 --> 01:24:34,500 ID. ID es un valor 1968 01:24:34,500 --> 01:24:34,960 interno. 1969 01:24:36,300 --> 01:24:38,279 Justo. Yo no quiero que ID 1970 01:24:38,279 --> 01:24:40,520 vaya a lo mejor, que necesidad de que vaya navegando 1971 01:24:40,520 --> 01:24:42,039 por ahí. Entonces, 1972 01:24:42,520 --> 01:24:44,920 lo que el controlador me devuelve 1973 01:24:44,920 --> 01:24:47,159 y lo que yo al controlador le doy 1974 01:24:47,159 --> 01:24:49,600 tiene que ser específicamente 1975 01:24:49,600 --> 01:24:51,600 lo que quiero para esa consulta. 1976 01:24:52,539 --> 01:24:54,000 Pues para eso me hago mi DTO. 1977 01:24:54,539 --> 01:24:56,199 Que tengo 20 consultas 1978 01:24:56,199 --> 01:24:57,760 relacionadas con alumno 1979 01:24:57,760 --> 01:24:59,579 y cada uno me saca una distinta. 1980 01:24:59,899 --> 01:25:01,159 Pues 20 DTOs distintos. 1981 01:25:01,359 --> 01:25:03,140 Y no pasa nada por tener un paquete de DTOs 1982 01:25:03,140 --> 01:25:04,060 con 20 DTOs. 1983 01:25:04,579 --> 01:25:05,960 Cada uno para su consulta. 1984 01:25:06,539 --> 01:25:08,800 Pues entonces, es que yo, por tanto, 1985 01:25:08,920 --> 01:25:10,239 no tendría que haber hecho esto así. 1986 01:25:11,100 --> 01:25:12,199 Yo tendría que haber hecho 1987 01:25:12,199 --> 01:25:13,859 Esto 1988 01:25:13,859 --> 01:25:15,439 Lo voy a 1989 01:25:15,439 --> 01:25:17,859 Exacto 1990 01:25:17,859 --> 01:25:19,659 Tendría que haber hecho esto 1991 01:25:19,659 --> 01:25:22,840 Tú, devuélveme un objeto 1992 01:25:22,840 --> 01:25:23,640 DTO 1993 01:25:23,640 --> 01:25:26,439 Vale, no me devuelvas 1994 01:25:26,439 --> 01:25:28,079 Un 1995 01:25:28,079 --> 01:25:29,319 Vale 1996 01:25:29,319 --> 01:25:32,600 Vamos a hacer una cosa 1997 01:25:32,600 --> 01:25:33,720 Vamos a parar un momentito 1998 01:25:33,720 --> 01:25:36,439 Porque llevamos un montón de rato seguido 1999 01:25:36,439 --> 01:25:37,159 Y aparte hay que 2000 01:25:37,159 --> 01:25:40,079 Ver qué pasa con Javi