1 00:00:01,459 --> 00:00:07,080 Bueno, pues vamos a dar nuestro siguiente pasito en el tema de acceso a datos, 2 00:00:07,080 --> 00:00:08,660 que es el que nos interesa a nosotros. 3 00:00:09,599 --> 00:00:10,039 ¿Verdad? 4 00:00:15,119 --> 00:00:17,760 Pues mira, es de lo poco que te puede interesar en la vida. 5 00:00:26,079 --> 00:00:26,519 ¿Qué? 6 00:00:30,140 --> 00:00:31,940 Joder, con el sprint de los cojones. 7 00:00:32,399 --> 00:00:32,840 ¿Qué? 8 00:00:32,960 --> 00:00:35,520 vale, vamos a 9 00:00:35,520 --> 00:00:36,859 que sí 10 00:00:36,859 --> 00:00:39,280 me da lo mismo que esté grabando 11 00:00:39,280 --> 00:00:40,159 me da igual 12 00:00:40,159 --> 00:00:42,119 vale 13 00:00:42,119 --> 00:00:45,259 pues vamos a ponerle una pequeña capita 14 00:00:45,259 --> 00:00:45,920 ¿vale? 15 00:00:46,700 --> 00:00:48,039 os vais a cagar 16 00:00:48,039 --> 00:00:49,899 ¿queréis sprint? 17 00:00:50,140 --> 00:00:51,740 os vais a cagar 18 00:00:51,740 --> 00:00:54,320 os vais a cagar 19 00:00:54,320 --> 00:00:55,799 ¿vale? 20 00:00:55,799 --> 00:00:57,500 pero vamos 21 00:00:57,500 --> 00:00:59,299 por la pata abajo enterita 22 00:00:59,299 --> 00:01:02,759 y os vais a arrepentir 23 00:01:02,759 --> 00:01:05,180 ¡Ay, sprint, sprint! ¿Pero qué crees que es sprint? 24 00:01:05,260 --> 00:01:06,239 ¿Alguien con solución a la vida? 25 00:01:06,900 --> 00:01:08,939 Si tú lo quieres manejar bien y lo quieres 26 00:01:08,939 --> 00:01:10,959 entender, te vas a cagar. 27 00:01:11,060 --> 00:01:12,859 Hazme caso. Te vas a arrepentir. 28 00:01:14,319 --> 00:01:14,680 Vale. 29 00:01:16,219 --> 00:01:17,079 Bueno, pues vamos a 30 00:01:17,079 --> 00:01:18,920 poner una primerita 31 00:01:18,920 --> 00:01:19,920 capa de abstracción. 32 00:01:20,920 --> 00:01:23,120 Bueno, a ver, es una broma, no pasa nada. 33 00:01:24,140 --> 00:01:25,040 Es una broma todo. 34 00:01:25,040 --> 00:01:25,760 No os asustéis. 35 00:01:27,099 --> 00:01:27,939 No, no. 36 00:01:27,939 --> 00:01:36,579 de verdad, confía en mí 37 00:01:36,579 --> 00:01:38,239 no los pongo yo, los pone la vida 38 00:01:38,239 --> 00:01:40,439 los pone el universo, los pone el entorno 39 00:01:40,439 --> 00:01:41,640 claro 40 00:01:41,640 --> 00:01:43,640 vale, pues entonces 41 00:01:43,640 --> 00:01:46,340 en esta aplicación que hemos hecho 42 00:01:46,340 --> 00:01:48,420 bueno, tenía un 43 00:01:48,420 --> 00:01:50,359 serlet, pero eso ahora mismo es un detallito 44 00:01:50,359 --> 00:01:52,319 para nosotros, vale, nos da igual 45 00:01:52,319 --> 00:01:54,299 un main, un serlet, la capa 46 00:01:54,299 --> 00:01:55,819 sobre todo que nos importaba 47 00:01:55,819 --> 00:01:57,439 que es la nuestra 48 00:01:57,439 --> 00:01:59,540 la de nuestro módulo es esta 49 00:01:59,540 --> 00:02:01,560 la implementación del DAO 50 00:02:01,560 --> 00:02:04,159 ¿vale? entonces la implementación 51 00:02:04,159 --> 00:02:06,019 del DAO es la que tiene el acceso 52 00:02:06,019 --> 00:02:06,540 a datos 53 00:02:06,540 --> 00:02:08,979 vale, pues nosotros 54 00:02:08,979 --> 00:02:11,680 lo hemos hecho con 55 00:02:11,680 --> 00:02:13,199 JDBC puro 56 00:02:13,199 --> 00:02:15,520 que es lo que hay 57 00:02:15,520 --> 00:02:17,479 lo que está ahí abajo 58 00:02:17,479 --> 00:02:19,500 y no hay nada más que eso, otra cosa 59 00:02:19,500 --> 00:02:21,479 repito, es lo que vayamos poniendo por encima 60 00:02:21,479 --> 00:02:23,460 para encapsular o enmascarar esto 61 00:02:23,460 --> 00:02:24,340 pero esto es lo que hay 62 00:02:24,340 --> 00:02:26,360 entonces nosotros lo vemos 63 00:02:26,360 --> 00:02:28,539 y bueno, vale, no es tan horrible 64 00:02:28,539 --> 00:02:30,840 pero bueno, tiene un try 65 00:02:30,840 --> 00:02:32,919 con recursos que es un poco 66 00:02:32,919 --> 00:02:35,039 feo, tiene aquí 67 00:02:35,039 --> 00:02:37,280 pues bueno, este en particular 68 00:02:37,280 --> 00:02:39,039 que es hacer un insert no tiene tanto 69 00:02:39,039 --> 00:02:41,199 pero este de aquí, por ejemplo 70 00:02:41,199 --> 00:02:42,560 que era recuperar por ID 71 00:02:42,560 --> 00:02:44,580 pues ya empieza, con esta 72 00:02:44,580 --> 00:02:46,939 generación de vagos, pues ya 73 00:02:46,939 --> 00:02:47,960 empieza a angustiarnos 74 00:02:47,960 --> 00:02:51,240 porque yo tengo que devolver una venta 75 00:02:51,240 --> 00:02:53,159 pero lo que saco 76 00:02:53,159 --> 00:02:54,360 con el result set 77 00:02:54,360 --> 00:02:55,939 pues lo que saco con el query 78 00:02:55,939 --> 00:02:57,939 son valores sueltos 79 00:02:57,939 --> 00:03:00,539 entonces tengo que preocuparme de instanciar 80 00:03:00,539 --> 00:03:02,379 la venta, poner los valores sueltos 81 00:03:02,379 --> 00:03:04,379 uff, que pereza 82 00:03:04,379 --> 00:03:06,280 ver todo esto aquí, por no hablar de capturar 83 00:03:06,280 --> 00:03:07,199 las excepciones 84 00:03:07,199 --> 00:03:10,659 pues 85 00:03:10,659 --> 00:03:12,879 si es fácil 86 00:03:12,879 --> 00:03:14,539 bueno, os pondré 87 00:03:14,539 --> 00:03:16,319 os dejaré para el fin de semana 88 00:03:16,319 --> 00:03:18,099 esta tarde yo me daré a tiempo 89 00:03:18,099 --> 00:03:20,020 pues algunos ejercicios para que 90 00:03:20,020 --> 00:03:21,360 practiquéis con JDBC 91 00:03:21,360 --> 00:03:23,759 que no son más que pues seguir haciendo 92 00:03:23,759 --> 00:03:25,740 consultas, borrados, lo que fuera 93 00:03:25,740 --> 00:03:27,360 para que practiquéis con el JDBC 94 00:03:27,360 --> 00:03:30,000 que será pues poner las sentencias que sean 95 00:03:30,000 --> 00:03:32,080 ejecutarlas y comprobar que funcionan 96 00:03:32,080 --> 00:03:32,419 y ya 97 00:03:32,419 --> 00:03:34,159 ¿vale? 98 00:03:35,599 --> 00:03:37,939 bueno, pues esto ya, entre capturar 99 00:03:37,939 --> 00:03:40,120 excepciones, mapear 100 00:03:40,120 --> 00:03:41,740 mis campitos sueltos 101 00:03:41,740 --> 00:03:43,039 a un objeto 102 00:03:43,039 --> 00:03:45,939 eh, abrir y, preocuparme 103 00:03:45,939 --> 00:03:47,520 de abrir y cerrar las cosas 104 00:03:47,520 --> 00:03:49,800 gracias al try con 105 00:03:49,800 --> 00:03:51,840 recursos, pues no tengo que preocuparme de cerrarlas 106 00:03:51,840 --> 00:03:53,659 pero bueno, tengo que preocuparme de poner un try 107 00:03:53,659 --> 00:03:55,919 de este estilo, pues esto ya empiezan a quedar 108 00:03:55,919 --> 00:03:57,300 códigos un poquito 109 00:03:57,300 --> 00:03:59,719 feos y sobre todo que me obligan a 110 00:03:59,719 --> 00:04:00,860 preocuparme de muchas cosas 111 00:04:00,860 --> 00:04:03,400 bueno, pues hay una primera 112 00:04:03,400 --> 00:04:05,759 y pequeñita, una primera y pequeñita 113 00:04:05,759 --> 00:04:07,939 capa de abstracción que podemos 114 00:04:07,939 --> 00:04:08,340 poner 115 00:04:08,340 --> 00:04:11,479 que se llama Spring 116 00:04:11,479 --> 00:04:13,139 JDBC, vale 117 00:04:13,139 --> 00:04:14,759 porque Spring es mucho 118 00:04:14,759 --> 00:04:19,560 pues hay una pequeñita capa de abstracción 119 00:04:19,560 --> 00:04:20,879 que podemos poner 120 00:04:20,879 --> 00:04:25,720 que viene dada a través de 121 00:04:25,720 --> 00:04:26,079 esto 122 00:04:26,079 --> 00:04:29,060 de una de las partes de Sprint 123 00:04:29,060 --> 00:04:31,519 que encapsula el JDBC, una pequeñita 124 00:04:31,519 --> 00:04:32,740 capa de abstracción, ligera 125 00:04:32,740 --> 00:04:35,060 no tiene nada que ver con el líder de Sprint 126 00:04:35,060 --> 00:04:37,199 no tiene que ver, forma parte del líder de Sprint 127 00:04:37,199 --> 00:04:38,920 Sprint es una cosa muy gorda 128 00:04:38,920 --> 00:04:43,220 y esta es una parte de Sprint 129 00:04:43,220 --> 00:04:45,040 esta es una parte de Sprint 130 00:04:45,040 --> 00:04:47,139 que me permite poner una capa 131 00:04:47,139 --> 00:04:47,680 ligera 132 00:04:47,680 --> 00:04:50,899 entonces, esta capa ligera 133 00:04:50,899 --> 00:04:52,600 esta capa 134 00:04:52,600 --> 00:04:53,639 ligerita 135 00:04:53,639 --> 00:04:57,019 esta capa 136 00:04:57,019 --> 00:04:57,439 ligera 137 00:04:57,439 --> 00:05:00,680 no es la 138 00:05:00,680 --> 00:05:02,660 capa gorda que también puede hacer el sprint 139 00:05:02,660 --> 00:05:04,899 con el sprint data JPA no es la capa gorda 140 00:05:04,899 --> 00:05:06,759 porque es que esa capa gorda, que es una capa 141 00:05:06,759 --> 00:05:07,899 más gorda que viene por arriba 142 00:05:07,899 --> 00:05:10,420 esa yo ahí ya sí que no veo SQL 143 00:05:10,420 --> 00:05:12,300 ni veo nada, de repente todo aparece 144 00:05:12,300 --> 00:05:14,720 y así no se hacen las cosas 145 00:05:14,720 --> 00:05:16,819 porque luego no entiende uno lo que está pasando 146 00:05:16,819 --> 00:05:18,800 por debajo, entonces sprint JPA 147 00:05:18,800 --> 00:05:20,519 es una primera capa ligerita 148 00:05:20,519 --> 00:05:24,620 que todavía te permite tener tu acceso al SQL. 149 00:05:24,920 --> 00:05:27,540 Tú lo ves y tú haces las sentencias SQL que tú quieras. 150 00:05:28,360 --> 00:05:32,220 Entonces, eso te permite optimizar el acceso a la base de datos 151 00:05:32,220 --> 00:05:34,680 porque tú seleccionas los SQL que quieres. 152 00:05:35,100 --> 00:05:39,259 No como con el sprint más la siguiente capa de sprint 153 00:05:39,259 --> 00:05:41,279 que tú ahí no haces SQL para nada. 154 00:05:44,600 --> 00:05:48,139 Entonces, si esta capa no me evita hacer SQL, 155 00:05:48,139 --> 00:05:50,279 no me lo evita, ¿qué me evita? 156 00:05:51,180 --> 00:05:52,000 Pues me evita 157 00:05:52,000 --> 00:05:54,500 una de las cosas más importantes 158 00:05:54,500 --> 00:05:55,079 y pesadas. 159 00:05:55,980 --> 00:05:58,600 Lo que se llama 160 00:05:58,600 --> 00:05:59,540 el mapeo. 161 00:06:02,189 --> 00:06:03,990 Me evita lo que se llama 162 00:06:03,990 --> 00:06:05,529 hacer el mapeo, que es 163 00:06:05,529 --> 00:06:08,410 pasar de campos sueltos 164 00:06:08,410 --> 00:06:09,569 que yo me he sacado de aquí, 165 00:06:10,449 --> 00:06:11,889 pasar a mi objeto. 166 00:06:12,930 --> 00:06:14,110 Me evita el mapeo, ¿vale? 167 00:06:14,110 --> 00:06:16,529 A través de una cosa que ahora instanciamos 168 00:06:16,529 --> 00:06:17,970 que se llama 169 00:06:17,970 --> 00:06:22,370 todo lo que vamos a ver 170 00:06:22,370 --> 00:06:23,410 lo vemos lógicamente 171 00:06:23,410 --> 00:06:25,110 en un overview reducido 172 00:06:25,110 --> 00:06:26,129 pero luego a partir de ahí 173 00:06:26,129 --> 00:06:27,230 uno ya puede meterse 174 00:06:27,230 --> 00:06:28,509 y ver el resto de métodos 175 00:06:28,509 --> 00:06:29,449 de clases que tiene 176 00:06:29,449 --> 00:06:29,990 pero bueno 177 00:06:29,990 --> 00:06:30,730 eso ya son detalles 178 00:06:30,730 --> 00:06:31,790 una vez que uno ha entendido 179 00:06:31,790 --> 00:06:32,990 realmente de qué va el rollo 180 00:06:32,990 --> 00:06:34,069 ¿vale? 181 00:06:34,209 --> 00:06:35,930 entonces me evita eso 182 00:06:35,930 --> 00:06:36,589 por un lado 183 00:06:36,589 --> 00:06:39,129 ¿qué más nos evita? 184 00:06:39,490 --> 00:06:40,790 manejar los try-catch 185 00:06:40,790 --> 00:06:41,569 nos lo evita 186 00:06:41,569 --> 00:06:43,050 ¿vale? 187 00:06:43,050 --> 00:06:46,129 nos 188 00:06:46,129 --> 00:06:49,050 evita también 189 00:06:49,050 --> 00:06:51,649 o nos enmascara de forma muy sencilla 190 00:06:51,649 --> 00:06:53,189 la gestión de las transacciones 191 00:06:53,189 --> 00:06:54,769 que eso es casi lo más importante 192 00:06:54,769 --> 00:06:57,370 ¿vale? porque cuando 193 00:06:57,370 --> 00:06:58,750 trabajas con una base de datos 194 00:06:58,750 --> 00:07:01,110 lo puedes hacer todo muy bien 195 00:07:01,110 --> 00:07:03,069 no hay errores y todo funciona 196 00:07:03,069 --> 00:07:05,410 pero si tú no has diseñado bien 197 00:07:05,410 --> 00:07:07,250 la política de transacciones, lo que estás 198 00:07:07,250 --> 00:07:08,889 haciendo puede ser una cagada, ¿no? 199 00:07:08,889 --> 00:07:11,110 el típico ejemplo que os pondrán siempre 200 00:07:11,110 --> 00:07:23,209 envases de datos de hacer una transferencia. Si tú el SQL, el insert, lo haces primero y luego 201 00:07:23,209 --> 00:07:31,110 falla el delete de la otra, pues el dinero se queda en las dos cuentas. Con lo cual, para ti muy bien, 202 00:07:31,209 --> 00:07:37,490 pero para el banco muy mal. O al contrario, si haces primero el delete, que ese funciona y luego 203 00:07:37,490 --> 00:07:39,189 al hacer el insert en la otra cuenta 204 00:07:39,189 --> 00:07:41,470 ese falla, pues va al banco 205 00:07:41,470 --> 00:07:43,069 fenomenal, pero para ti una putada 206 00:07:43,069 --> 00:07:45,610 entonces, esta es 207 00:07:45,610 --> 00:07:47,129 una simplificación de una situación 208 00:07:47,129 --> 00:07:49,329 en la que expresamos que hay 209 00:07:49,329 --> 00:07:51,430 muchas cosas que se hacen en las bases 210 00:07:51,430 --> 00:07:53,550 de datos, una sucesión de sentencias que queremos 211 00:07:53,550 --> 00:07:54,750 que o se hagan todas 212 00:07:54,750 --> 00:07:56,269 o no se haga ninguna 213 00:07:56,269 --> 00:07:59,110 porque si se hacen a la mitad 214 00:07:59,110 --> 00:08:01,649 todo ha funcionado, la aplicación 215 00:08:01,649 --> 00:08:03,569 no da problemas, pero el estado final 216 00:08:03,569 --> 00:08:05,170 en el que se queda la base de datos 217 00:08:05,170 --> 00:08:06,810 no es el que queremos 218 00:08:06,810 --> 00:08:10,529 entonces de transacciones 219 00:08:10,529 --> 00:08:12,610 no trabajasteis 220 00:08:12,610 --> 00:08:14,689 o el concepto de transacciones a mi pasa en bases de datos 221 00:08:14,689 --> 00:08:15,509 no 222 00:08:15,509 --> 00:08:17,050 no vale 223 00:08:17,050 --> 00:08:18,949 tiene que ver con los coches 224 00:08:18,949 --> 00:08:21,449 hombre pues si 225 00:08:21,449 --> 00:08:23,230 tú compras un coche 226 00:08:23,230 --> 00:08:25,589 vale pues entonces 227 00:08:25,589 --> 00:08:28,389 normalmente si uno está 228 00:08:28,389 --> 00:08:30,209 tocando con JDBC puro 229 00:08:30,209 --> 00:08:31,569 con JDBC puro 230 00:08:31,569 --> 00:08:34,370 uno tiene que preocuparse 231 00:08:34,370 --> 00:08:35,649 de establecer 232 00:08:35,649 --> 00:08:37,529 perfectamente se 233 00:08:37,529 --> 00:08:39,690 con todas las transacciones, quiero estas sentencias 234 00:08:39,690 --> 00:08:41,570 todas juntas, pues aquí 235 00:08:41,570 --> 00:08:43,269 me las apaño para 236 00:08:43,269 --> 00:08:45,529 ya mencionaremos como, me las 237 00:08:45,529 --> 00:08:47,549 apaño para decir que 238 00:08:47,549 --> 00:08:49,809 aquí inicio una transacción, aquí ya he terminado 239 00:08:49,809 --> 00:08:51,629 y hago el commit, el commit y el 240 00:08:51,629 --> 00:08:52,669 rollback, si que os suena 241 00:08:52,669 --> 00:08:55,330 ¿no? el año pasado 242 00:08:55,330 --> 00:08:56,870 el commit y el rollback, si os suena 243 00:08:56,870 --> 00:08:58,870 entonces si que os suena lo que es una transacción 244 00:08:58,870 --> 00:09:01,529 ah y de que os suena 245 00:09:01,529 --> 00:09:02,029 entonces 246 00:09:02,029 --> 00:09:03,870 bueno 247 00:09:03,870 --> 00:09:06,950 vale, bueno, en general 248 00:09:06,950 --> 00:09:09,309 una transacción es 249 00:09:09,309 --> 00:09:11,289 un conjunto de sentencias 250 00:09:11,289 --> 00:09:13,370 SQL que queremos 251 00:09:13,370 --> 00:09:14,769 que funcionen de tal manera 252 00:09:14,769 --> 00:09:17,210 que o se ejecutan todas 253 00:09:17,210 --> 00:09:18,450 o no se ejecuta ninguna 254 00:09:18,450 --> 00:09:21,289 entonces, ¿qué política seguimos cuando queremos 255 00:09:21,289 --> 00:09:21,850 hacer eso? 256 00:09:23,090 --> 00:09:25,169 pues nosotros fijamos 257 00:09:25,169 --> 00:09:27,350 que el 258 00:09:27,350 --> 00:09:29,289 commit no se haga automáticamente 259 00:09:29,289 --> 00:09:31,330 o sea, commit es lo que 260 00:09:31,330 --> 00:09:33,429 la sentencia 261 00:09:33,429 --> 00:09:35,649 que tú ejecutas para decir, oye, lo que acabo 262 00:09:35,649 --> 00:09:37,750 de hacer en la base de datos, que se consolide, 263 00:09:37,929 --> 00:09:39,370 que no se quede ahí 264 00:09:39,370 --> 00:09:41,250 pendiente, que se consolide, ¿vale? 265 00:09:41,789 --> 00:09:43,289 Entonces, cuando queremos una transacción, 266 00:09:43,990 --> 00:09:45,470 nosotros decimos, oye, el commit 267 00:09:45,470 --> 00:09:47,929 no me lo hagas automáticamente por sentencia. 268 00:09:48,309 --> 00:09:49,450 No me lo hagas automáticamente. 269 00:09:49,750 --> 00:09:50,990 Falso, commit, no quiero commit. 270 00:09:51,570 --> 00:09:53,549 Ahora, me pongo a hacer sentencias todas las que hay en la 271 00:09:53,549 --> 00:09:55,590 transacción. Si todo 272 00:09:55,590 --> 00:09:57,370 ha ido bien y he llegado al final, porque 273 00:09:57,370 --> 00:09:59,429 ninguna me ha dado excepción, entonces ahora 274 00:09:59,429 --> 00:10:00,789 ya hago el commit. 275 00:10:00,789 --> 00:10:02,730 que el commit significa 276 00:10:02,730 --> 00:10:04,690 consolida este estado final 277 00:10:04,690 --> 00:10:06,909 consolídalo, porque se han hecho 278 00:10:06,909 --> 00:10:08,509 todas las sentencias una tras otra 279 00:10:08,509 --> 00:10:09,950 ninguna ha generado excepción 280 00:10:09,950 --> 00:10:12,470 luego todo está perfecto, ahora 281 00:10:12,470 --> 00:10:14,669 consolido estas acciones 282 00:10:14,669 --> 00:10:16,230 y eso significa hacer commit 283 00:10:16,230 --> 00:10:18,549 vale, si en algún momento 284 00:10:18,549 --> 00:10:20,970 de esa secuencia de sentencias 285 00:10:20,970 --> 00:10:22,549 SQL, alguna ha fallado 286 00:10:22,549 --> 00:10:24,690 pues entonces lo que queremos 287 00:10:24,690 --> 00:10:26,409 es que todas las de arriba 288 00:10:26,409 --> 00:10:28,669 se deshagan, se olviden 289 00:10:28,669 --> 00:10:29,529 como si no se hubieran hecho 290 00:10:29,529 --> 00:10:31,789 pues eso es hacer un rollback 291 00:10:31,789 --> 00:10:34,549 un rollback es, fuera, todo lo que he hecho 292 00:10:34,549 --> 00:10:36,450 hasta, de aquí hacia 293 00:10:36,450 --> 00:10:38,629 arriba, hasta el último commit 294 00:10:38,629 --> 00:10:40,710 que hice, deshazlo, como si no hubiera existido 295 00:10:40,710 --> 00:10:42,470 ¿vale? ese es el concepto de commit 296 00:10:42,470 --> 00:10:44,490 y rollback, que lógicamente está relacionado 297 00:10:44,490 --> 00:10:45,730 con las transacciones 298 00:10:45,730 --> 00:10:47,889 bueno, pues todo esto venía a cuento 299 00:10:47,889 --> 00:10:50,230 de que con mi JDBC puro 300 00:10:50,230 --> 00:10:52,509 yo lo controlo todo, con lo cual estupendo 301 00:10:52,509 --> 00:10:54,269 yo tengo un montón de sentencias SQL 302 00:10:54,269 --> 00:10:56,470 que quiero que funcionen con una 303 00:10:56,470 --> 00:10:58,470 transacción, pues antes de 304 00:10:58,470 --> 00:11:00,570 ejecutar todas ellas, statement, ejecutive 305 00:11:00,570 --> 00:11:02,470 date, bla, bla, bla, todas ellas 306 00:11:02,470 --> 00:11:03,570 me pongo arriba, e 307 00:11:03,570 --> 00:11:06,629 autocommit falso, autocommit falso 308 00:11:06,629 --> 00:11:08,529 que se puede hacer con jdbc, muy sencillo 309 00:11:08,529 --> 00:11:10,450 vale, y ahora ya cuando 310 00:11:10,450 --> 00:11:12,450 ya han terminado todas al final, pongo 311 00:11:12,450 --> 00:11:13,850 commit, vale 312 00:11:13,850 --> 00:11:16,409 y en las que están entre medias, que 313 00:11:16,409 --> 00:11:18,490 habrá trycatch, pues en los catch 314 00:11:18,490 --> 00:11:20,330 es porque alguna genera excepción, ahí pongo 315 00:11:20,330 --> 00:11:22,389 rollback, si he entrado en el catch 316 00:11:22,389 --> 00:11:24,190 es porque alguna ha fallado, pues rollback no hay para 317 00:11:24,190 --> 00:11:26,629 así lo haríamos con jdbc 318 00:11:26,629 --> 00:11:28,809 entonces nos tenemos que preocupar 319 00:11:28,809 --> 00:11:30,669 lógicamente pues de poner los commit 320 00:11:30,669 --> 00:11:32,629 false, poner los commit 321 00:11:32,629 --> 00:11:34,549 donde yo quiera, los rollback en los 322 00:11:34,549 --> 00:11:36,649 cats, etcétera, bueno pues 323 00:11:36,649 --> 00:11:38,509 esta capita ligera de 324 00:11:38,509 --> 00:11:40,590 jdbc, además 325 00:11:40,590 --> 00:11:42,509 de este mapeo, además de 326 00:11:42,509 --> 00:11:44,129 cerrar los recursos 327 00:11:44,129 --> 00:11:46,570 y hacer, y permitirme olvidarme 328 00:11:46,570 --> 00:11:48,350 del trycat, dejar las excepciones 329 00:11:48,350 --> 00:11:50,769 ahí me permite una gestión 330 00:11:50,769 --> 00:11:52,730 de transacciones, vale 331 00:11:52,730 --> 00:11:54,590 ya con un modelo más parecido al 332 00:11:54,590 --> 00:11:56,649 Spring Data JPA que sería ya la capa 333 00:11:56,649 --> 00:11:58,509 Gorda, la que no podemos 334 00:11:58,509 --> 00:12:00,490 Arrancar desde el principio con esa capa, porque esa capa 335 00:12:00,490 --> 00:12:02,490 Es pin, ya está 336 00:12:02,490 --> 00:12:04,750 Ni puta idea de lo que ha pasado ahí, ni por qué 337 00:12:04,750 --> 00:12:06,809 Y si cambia algo, ¿qué hago? 338 00:12:07,389 --> 00:12:07,570 ¿Vale? 339 00:12:08,250 --> 00:12:11,110 Bueno, pues entonces, y aparte 340 00:12:11,110 --> 00:12:12,669 Para 341 00:12:12,669 --> 00:12:14,889 Volver a la reflexión 342 00:12:14,889 --> 00:12:16,870 Que estabais dando en digitalización 343 00:12:16,870 --> 00:12:18,370 Lo he dicho 344 00:12:18,370 --> 00:12:20,649 200.000 millones de veces, pero lo vuelvo 345 00:12:20,649 --> 00:12:22,570 A decir, os ha pedido la 346 00:12:22,570 --> 00:12:24,210 Reflexión sobre qué valor 347 00:12:24,210 --> 00:12:26,350 podéis aportar, ¿qué valor podéis aportar? 348 00:12:26,450 --> 00:12:27,470 pues ¿qué valor podéis aportar? 349 00:12:28,929 --> 00:12:30,610 capacidad de aprendizaje 350 00:12:30,610 --> 00:12:32,149 esa 351 00:12:32,149 --> 00:12:34,009 y eso se entrena pues 352 00:12:34,009 --> 00:12:36,330 lucha, conociéndolo todo, luchando 353 00:12:36,330 --> 00:12:38,330 con todo, resiliencia 354 00:12:38,330 --> 00:12:40,149 famosa, ostras 355 00:12:40,149 --> 00:12:42,230 en este examen de acceso a datos es que 356 00:12:42,230 --> 00:12:44,289 no he hecho nada, no pasa 357 00:12:44,289 --> 00:12:45,549 nada, en el siguiente 358 00:12:45,549 --> 00:12:48,509 pues todas estas cosas que están aquí deslavazadas 359 00:12:48,509 --> 00:12:50,250 me pongo y ahora ya si lo hago 360 00:12:50,250 --> 00:12:52,269 bien, esa capacidad de resiliencia 361 00:12:52,269 --> 00:12:54,129 de superación, ese es el valor 362 00:12:54,129 --> 00:12:56,049 que podéis aportar, esa capacidad de aprendizaje 363 00:12:56,049 --> 00:12:58,570 no tanto los contenidos 364 00:12:58,570 --> 00:13:00,090 ¿vale? pues eso 365 00:13:00,090 --> 00:13:01,389 a sufrir 366 00:13:01,389 --> 00:13:02,669 ¿perdona? 367 00:13:06,509 --> 00:13:06,950 vale 368 00:13:06,950 --> 00:13:09,909 bueno, pues venga, vamos a poner 369 00:13:09,909 --> 00:13:11,429 esa pequeña capita 370 00:13:11,429 --> 00:13:13,330 de Spring JDBC 371 00:13:13,330 --> 00:13:16,210 a ver, que esto es poco de escribir 372 00:13:16,210 --> 00:13:17,990 y es que ayer por la tarde no me dio tiempo 373 00:13:17,990 --> 00:13:20,169 a subiros chuleta, pero vamos a tener que escribir 374 00:13:20,169 --> 00:13:22,269 poquito. Y no sé ni en qué proyecto 375 00:13:22,269 --> 00:13:23,009 lo tengo ya. 376 00:13:24,190 --> 00:13:26,389 Ya ni me acuerdo, pero no me dio tiempo a mirarlo. 377 00:13:27,870 --> 00:13:29,909 No, no, no. Sobre este mismo, he dicho. 378 00:13:30,750 --> 00:13:31,870 Vale, entonces voy a ver 379 00:13:31,870 --> 00:13:32,690 un segundito. 380 00:13:39,000 --> 00:13:40,240 Sí, vale, aquí lo tengo. 381 00:13:40,700 --> 00:13:42,559 Vale, pues entonces, dime. 382 00:13:44,100 --> 00:13:44,700 Bueno, pues 383 00:13:44,700 --> 00:13:46,340 este es sobre el proyecto del otro día. 384 00:13:46,759 --> 00:13:49,159 Como este proyecto ya tenemos un dado de implementación. 385 00:13:50,820 --> 00:13:52,720 ¿Vale? Pues sobre este 386 00:13:52,720 --> 00:13:54,019 proyecto del otro día 387 00:13:54,019 --> 00:13:56,440 con este de implementación 388 00:13:56,440 --> 00:13:57,960 ahora vamos a ver 389 00:13:57,960 --> 00:13:59,720 como lo haríamos 390 00:13:59,720 --> 00:14:01,899 con JDBC 391 00:14:01,899 --> 00:14:06,759 vale, vamos a ver 392 00:14:06,759 --> 00:14:08,639 este para no tocarlo 393 00:14:08,639 --> 00:14:10,299 hacéos una copia 394 00:14:10,299 --> 00:14:12,320 de este en vuestro mismo workspace 395 00:14:12,320 --> 00:14:15,179 os hacéis una copia 396 00:14:15,179 --> 00:14:16,440 pues nada, copy 397 00:14:16,440 --> 00:14:18,000 y os creará otro 398 00:14:18,000 --> 00:14:20,519 vale, otro proyecto 399 00:14:20,519 --> 00:14:21,159 igualito 400 00:14:21,159 --> 00:14:25,159 En mi caso es este 401 00:14:25,159 --> 00:14:27,139 Y así este no lo ensuciamos 402 00:14:27,139 --> 00:14:28,519 Este es el que ya se ha quedado limpio 403 00:14:28,519 --> 00:14:30,279 Funcionando perfecto del otro día 404 00:14:30,279 --> 00:14:34,620 Spring JDBC 405 00:14:34,620 --> 00:14:37,120 Que es una parte de Spring 406 00:14:37,120 --> 00:14:38,080 Una capita ligera 407 00:14:38,080 --> 00:14:44,700 Esto es una capa que pone Spring 408 00:14:44,700 --> 00:14:45,840 Sobre JDBC 409 00:14:45,840 --> 00:14:47,600 Para atrapar esto que digo 410 00:14:47,600 --> 00:14:49,159 Para atrapar los trycon recursos 411 00:14:49,159 --> 00:14:51,220 trapar todo eso, es una capa que pone encima 412 00:14:51,220 --> 00:14:53,500 entonces si usamos Spring JDBC 413 00:14:53,500 --> 00:14:55,360 esto se queda enmascarado 414 00:14:55,360 --> 00:14:56,360 y tenemos 415 00:14:56,360 --> 00:14:58,480 el trabajo más sencillo 416 00:14:58,480 --> 00:15:01,000 bueno, pues entonces para no tocar este 417 00:15:01,000 --> 00:15:03,080 que este es el que digo, que lo único que se 418 00:15:03,080 --> 00:15:05,500 se había quedado pendiente en este es hacer los formularios 419 00:15:05,500 --> 00:15:06,980 para desde ellos llamar al 420 00:15:06,980 --> 00:15:08,879 find by id y al insert 421 00:15:08,879 --> 00:15:11,100 porque los servicios y la 422 00:15:11,100 --> 00:15:13,080 implementación estaba, solo faltaban los formularios 423 00:15:13,080 --> 00:15:14,759 para llamar a esto, ¿vale? 424 00:15:14,759 --> 00:15:15,639 todo lo demás estaba 425 00:15:15,639 --> 00:15:19,100 y bueno, faltaban los formularios y faltaba 426 00:15:19,100 --> 00:15:21,720 en este serlet, que sería una buena despedida 427 00:15:21,720 --> 00:15:23,580 de los serlets para vosotros, a ver si realmente 428 00:15:23,580 --> 00:15:25,639 lo habéis entendido, falta en el 429 00:15:25,639 --> 00:15:27,580 serlet hacer las dos acciones 430 00:15:27,580 --> 00:15:29,539 que faltaban, teníamos hecha la acción de 431 00:15:29,539 --> 00:15:31,299 listar y la acción de eliminar 432 00:15:31,299 --> 00:15:33,159 faltan la acción 433 00:15:33,159 --> 00:15:35,259 de insertar, que sería llamar al 434 00:15:35,259 --> 00:15:37,139 implementación de insertar 435 00:15:37,139 --> 00:15:39,639 y la acción de encontrar por id 436 00:15:39,639 --> 00:15:41,720 que sería llamar al servicio 437 00:15:41,720 --> 00:15:43,620 de get por id y ya está 438 00:15:43,620 --> 00:15:45,360 pues eso es lo que faltaría en este serlet 439 00:15:45,360 --> 00:15:47,600 poner los dos acciones 440 00:15:47,600 --> 00:15:48,779 que faltan 441 00:15:48,779 --> 00:15:52,120 hasta aquí se llega desde los dos 442 00:15:52,120 --> 00:15:54,240 formularios que podéis pedir a HGPT 443 00:15:54,240 --> 00:15:56,000 y luego tunear con los nombrecitos 444 00:15:56,000 --> 00:15:57,159 que os interese 445 00:15:57,159 --> 00:16:00,120 y ya está, y desde aquí 446 00:16:00,120 --> 00:16:02,039 llamar al servicio 447 00:16:02,039 --> 00:16:02,759 correspondiente 448 00:16:02,759 --> 00:16:06,220 es lo que faltaría para que quedara esta aplicación 449 00:16:06,220 --> 00:16:07,799 completa, bueno 450 00:16:07,799 --> 00:16:10,080 pues os habéis hecho ya una 451 00:16:10,080 --> 00:16:11,240 copia limpia de este 452 00:16:11,240 --> 00:16:13,960 vale, pues entonces, abrid 453 00:16:13,960 --> 00:16:15,980 vuestro singleton 454 00:16:15,980 --> 00:16:19,240 Vuestro singleton 455 00:16:19,240 --> 00:16:21,100 De conexiones 456 00:16:21,100 --> 00:16:22,879 Que era este, ¿verdad? 457 00:16:24,440 --> 00:16:25,440 Este singleton 458 00:16:25,440 --> 00:16:28,799 Era una clase que nos habíamos hecho 459 00:16:28,799 --> 00:16:30,360 Para asegurarnos 460 00:16:30,360 --> 00:16:33,080 De que objetos que vamos a usar 461 00:16:33,080 --> 00:16:35,179 Para la conexión son únicos 462 00:16:35,179 --> 00:16:37,740 En todo el ámbito de la aplicación 463 00:16:37,740 --> 00:16:39,419 En todo el scope 464 00:16:39,419 --> 00:16:40,700 De la aplicación que se llama 465 00:16:40,700 --> 00:16:42,220 Porque como se usa mucho scope 466 00:16:42,220 --> 00:16:44,139 Cuando uno 467 00:16:44,139 --> 00:16:47,159 en el contexto nuestro 468 00:16:47,159 --> 00:16:49,320 o ya tienes aplicaciones 469 00:16:49,320 --> 00:16:50,080 con un montón de 470 00:16:50,080 --> 00:16:52,519 scopes 471 00:16:52,519 --> 00:16:54,940 se traduce como ámbito 472 00:16:54,940 --> 00:16:56,080 en este contexto 473 00:16:56,080 --> 00:16:59,000 entonces puede haber 474 00:16:59,000 --> 00:17:00,379 en una aplicación en general 475 00:17:00,379 --> 00:17:02,700 puede haber muchos ámbitos 476 00:17:02,700 --> 00:17:04,279 donde se mueven los objetos 477 00:17:04,279 --> 00:17:06,799 el otro día nos vimos ya por ejemplo en esa situación 478 00:17:06,799 --> 00:17:09,099 teníamos el ámbito de Tomcat 479 00:17:09,099 --> 00:17:10,980 y el ámbito de nuestra propia 480 00:17:10,980 --> 00:17:11,559 aplicación 481 00:17:11,559 --> 00:17:14,140 entonces ahí tuvimos el problema 482 00:17:14,140 --> 00:17:15,839 de que el driver manager 483 00:17:15,839 --> 00:17:18,640 que se arrancaba 484 00:17:18,640 --> 00:17:20,000 en el ámbito de Tomcat 485 00:17:20,000 --> 00:17:22,000 porque se arranca según la aplicación arranca 486 00:17:22,000 --> 00:17:24,500 no encontraba el objeto 487 00:17:24,500 --> 00:17:26,380 driver para comunicarse con MySQL 488 00:17:26,380 --> 00:17:28,359 porque el objeto driver estaba en este otro 489 00:17:28,359 --> 00:17:29,740 ámbito, en este otro scope 490 00:17:29,740 --> 00:17:31,980 entonces por eso teníamos que hacer el class for main 491 00:17:31,980 --> 00:17:34,359 para, vale, bueno pues 492 00:17:34,359 --> 00:17:36,319 entonces, este es 493 00:17:36,319 --> 00:17:37,819 nuestro singleton que es 494 00:17:37,819 --> 00:17:40,119 el que tal y como lo hemos 495 00:17:40,119 --> 00:17:42,039 programado garantiza que estos dos 496 00:17:42,039 --> 00:17:44,240 objetos que tenéis vosotros, la conexión 497 00:17:44,240 --> 00:17:46,240 simple y el 498 00:17:46,240 --> 00:17:47,539 pool de conexiones, porque 499 00:17:47,539 --> 00:17:50,220 lo hicimos de las dos maneras, son únicos 500 00:17:50,220 --> 00:17:52,259 en la aplicación. Vale, pues 501 00:17:52,259 --> 00:17:53,920 el objeto de Spring 502 00:17:53,920 --> 00:17:55,819 JDBC base 503 00:17:55,819 --> 00:17:57,980 con el que lo hacemos todo 504 00:17:57,980 --> 00:18:02,160 es este, el JDBC 505 00:18:02,160 --> 00:18:04,160 templata, ¿vale? Es este de aquí 506 00:18:04,160 --> 00:18:06,079 y a través de este ejecutamos 507 00:18:06,079 --> 00:18:07,900 los SQL y listo. 508 00:18:08,559 --> 00:18:09,799 Este ya sí que necesita 509 00:18:09,799 --> 00:18:10,920 una dependencia 510 00:18:10,920 --> 00:18:12,980 que la podéis buscar 511 00:18:12,980 --> 00:18:15,980 en el repositorio 512 00:18:15,980 --> 00:18:18,079 o 513 00:18:18,079 --> 00:18:21,259 es esta, tal cual 514 00:18:21,259 --> 00:18:23,839 del framework de Spring 515 00:18:23,839 --> 00:18:24,880 SpringJRG 516 00:18:24,880 --> 00:18:27,099 vale 517 00:18:27,099 --> 00:18:31,009 la versión que os salga en el repositorio 518 00:18:31,009 --> 00:18:33,069 si lo buscáis por ahí o si no ponéis esto 519 00:18:33,069 --> 00:18:34,809 y se acabó 520 00:18:34,809 --> 00:18:40,839 esto es lo que quería haber subido 521 00:18:40,839 --> 00:18:43,359 para que no tuvierais que copiar 522 00:18:43,359 --> 00:18:43,920 pero no pasa 523 00:18:43,920 --> 00:18:52,609 Pues desgraciadamente sí 524 00:18:52,609 --> 00:18:53,829 Voy a abrir 525 00:18:53,829 --> 00:19:06,140 Vale, pues entonces 526 00:19:06,140 --> 00:19:10,390 Con esta dependencia de aquí 527 00:19:10,390 --> 00:19:12,450 Lo habéis copiado 528 00:19:12,450 --> 00:19:20,470 Si no la cogéis de Maben 529 00:19:20,470 --> 00:19:23,089 Ponéis Spring JDBC y os va a salir esto 530 00:19:23,089 --> 00:19:26,710 Pues con esta dependencia de aquí 531 00:19:26,710 --> 00:19:28,309 ya 532 00:19:28,309 --> 00:19:30,750 podemos 533 00:19:30,750 --> 00:19:33,170 trabajar con este objeto. 534 00:19:33,849 --> 00:19:35,130 Lo podréis importar 535 00:19:35,130 --> 00:19:37,309 de la librería correspondiente 536 00:19:37,309 --> 00:19:38,670 del framework de Spring. 537 00:19:39,329 --> 00:19:41,470 Y ahora, vamos a hacer 538 00:19:41,470 --> 00:19:43,410 el método para que esto realmente se convierta 539 00:19:43,410 --> 00:19:45,289 en un singleton. Este objeto queremos 540 00:19:45,289 --> 00:19:46,849 que sea único en toda la aplicación. 541 00:19:47,950 --> 00:19:51,650 Bueno, vale, 542 00:19:51,750 --> 00:19:52,930 pues este es nuestro get 543 00:19:52,930 --> 00:19:55,529 para el singleton. 544 00:19:56,250 --> 00:19:56,450 ¿Vale? 545 00:19:56,450 --> 00:19:58,130 Entonces 546 00:19:58,130 --> 00:20:01,289 Copiáis y pegáis lo del properties de arriba 547 00:20:01,289 --> 00:20:03,170 Lo copiáis y pegáis 548 00:20:03,170 --> 00:20:05,170 Si es null hay que instanciarlo 549 00:20:05,170 --> 00:20:06,630 Esto lo copiáis y pegáis de arriba 550 00:20:06,630 --> 00:20:08,430 Y esto es 551 00:20:08,430 --> 00:20:12,660 Lo que instancia el JDBC template 552 00:20:12,660 --> 00:20:14,339 El JDBC template 553 00:20:14,339 --> 00:20:16,259 Hay que 554 00:20:16,259 --> 00:20:18,799 Instanciarlo de esta manera 555 00:20:18,799 --> 00:20:19,480 ¿De dónde lo copiamos? 556 00:20:19,480 --> 00:20:22,380 De los métodos de arriba 557 00:20:22,380 --> 00:20:23,420 O sea, arriba que tenéis 558 00:20:23,420 --> 00:20:26,000 El get de la conexión 559 00:20:26,000 --> 00:20:27,259 Y el get del pool 560 00:20:27,259 --> 00:20:28,420 También tenéis esto 561 00:20:28,420 --> 00:20:31,240 Porque sacábamos las propiedades de la base de datos 562 00:20:31,240 --> 00:20:31,819 Del property 563 00:20:31,819 --> 00:20:35,079 Entonces esto lo copiáis tal cual 564 00:20:35,079 --> 00:20:36,880 Y esto es lo que instancia 565 00:20:36,880 --> 00:20:38,180 El JDLC template 566 00:20:38,180 --> 00:20:39,940 Esta de aquí 567 00:20:39,940 --> 00:20:46,029 Esta sentencia de aquí 568 00:20:46,029 --> 00:20:49,529 En realidad es la equivalente al class for name 569 00:20:49,529 --> 00:20:53,519 Esta nos hace falta 570 00:20:53,519 --> 00:20:55,460 Porque estamos viendo 571 00:20:55,460 --> 00:20:57,279 El ejemplo de una aplicación web con tonka 572 00:20:57,279 --> 00:20:57,759 ¿Vale? 573 00:20:59,039 --> 00:21:00,900 Si no, no nos haría falta 574 00:21:00,900 --> 00:21:04,279 Si nos movemos a una aplicación de escritorio 575 00:21:04,279 --> 00:21:05,279 Que nos moveremos ahora 576 00:21:05,279 --> 00:21:07,359 Para ver lo de las transacciones más fácil 577 00:21:07,359 --> 00:21:08,920 Pero las transacciones aquí en esta 578 00:21:08,920 --> 00:21:10,980 En la aplicación web ya se valía demasiado 579 00:21:10,980 --> 00:21:13,579 Si nos movemos a la aplicación de escritorio 580 00:21:13,579 --> 00:21:14,619 Esto ya no lo vamos a poner 581 00:21:14,619 --> 00:21:16,519 Tenemos solo un ámbito de objetos 582 00:21:16,519 --> 00:21:19,319 Ya el driver manager va a encontrar su driver sin problema 583 00:21:19,319 --> 00:21:21,940 Pero aquí sí porque es una aplicación web 584 00:21:21,940 --> 00:21:23,559 Bueno, esto, este proyecto 585 00:21:23,559 --> 00:21:26,059 Lo subiré también 586 00:21:26,059 --> 00:21:26,420 Claro 587 00:21:26,420 --> 00:21:29,119 Vale, pues con esto 588 00:21:29,119 --> 00:21:31,380 Creamos el JDBC template 589 00:21:31,380 --> 00:21:33,559 Que se asocia 590 00:21:33,559 --> 00:21:34,700 A esta conexión 591 00:21:34,700 --> 00:21:39,190 El JDBC template se puede asociar 592 00:21:39,190 --> 00:21:41,269 A una conexión única o a un pool también 593 00:21:41,269 --> 00:21:43,309 Si lo asocio a un pool 594 00:21:43,309 --> 00:21:44,970 Es que esto me lo ahorro 595 00:21:44,970 --> 00:21:46,710 Y pongo aquí el pool de arriba, junto pelota 596 00:21:46,710 --> 00:21:49,190 ¿Vale? Porque tengo ya un pool 597 00:21:49,190 --> 00:21:50,529 También creado en esta conexión 598 00:21:50,529 --> 00:21:53,289 Entonces el pool es un data source 599 00:21:53,289 --> 00:21:55,369 Entonces tengo dos data sources posibles 600 00:21:55,369 --> 00:21:57,690 Este que es el de una conexión única 601 00:21:57,690 --> 00:21:59,230 Y el pool 602 00:21:59,230 --> 00:22:00,910 Que es un datasource pool 603 00:22:00,910 --> 00:22:03,109 Pues pongo aquí el que me dé la gana de los dos 604 00:22:03,109 --> 00:22:05,349 ¿Cómo se llama el método? 605 00:22:06,609 --> 00:22:07,089 El 606 00:22:07,089 --> 00:22:09,509 El get jdbc template 607 00:22:09,509 --> 00:22:11,769 Es el que me va a permitir 608 00:22:11,769 --> 00:22:13,250 Obtener este objeto 609 00:22:13,250 --> 00:22:15,329 Ah 610 00:22:15,329 --> 00:22:20,289 Vale, es el singleton 611 00:22:20,289 --> 00:22:22,109 Igual que tengo el get conexión 612 00:22:22,109 --> 00:22:23,750 Pues es el singleton de este 613 00:22:23,750 --> 00:22:26,190 Si es null, me lo instancia 614 00:22:26,190 --> 00:22:27,650 ¿Vale? 615 00:22:28,170 --> 00:22:30,230 Entonces bueno, estoy viendo un poco los detalles 616 00:22:30,230 --> 00:22:32,390 este me lo instancia 617 00:22:32,390 --> 00:22:34,509 asociado a una conexión 618 00:22:34,509 --> 00:22:36,769 única, pero repito 619 00:22:36,769 --> 00:22:38,609 también admite el constructor 620 00:22:38,609 --> 00:22:40,789 un pool, lo que también es un data source 621 00:22:40,789 --> 00:22:42,630 el pool, podría poner aquí el pool y ya está 622 00:22:42,630 --> 00:22:44,029 y me lo instancia asociado a un pool 623 00:22:44,029 --> 00:22:46,509 me da lo mismo, asociar 624 00:22:46,509 --> 00:22:48,390 a una conexión única que a un pool de conexiones 625 00:22:48,390 --> 00:22:50,549 ¿vale? de hecho lo voy a poner aquí 626 00:22:50,549 --> 00:22:55,309 si luego lo... copiamos 627 00:22:55,309 --> 00:22:57,029 eso sí, nos llevabas copiándolo un rato 628 00:22:57,029 --> 00:23:05,170 ay Rodrigo 629 00:23:05,170 --> 00:23:07,470 te veo así que la... 630 00:23:07,470 --> 00:23:09,029 Intentad meterlas cada vez que podéis, ¿eh? 631 00:23:09,710 --> 00:23:11,470 Es que estaba tratando de entenderlo, 632 00:23:11,549 --> 00:23:12,309 por eso lo he recopiado. 633 00:23:18,140 --> 00:23:19,119 Vale, ahora mismo 634 00:23:19,119 --> 00:23:21,000 lo único que tenéis que entender es 635 00:23:21,000 --> 00:23:23,220 que el objeto este de Spring JDBC, 636 00:23:23,279 --> 00:23:24,299 el JDBC template, 637 00:23:25,299 --> 00:23:26,420 me va a facilitar 638 00:23:26,420 --> 00:23:28,900 ejecutar las sentencias SQL 639 00:23:28,900 --> 00:23:30,940 que yo quiera. Me lo va a facilitar. 640 00:23:33,269 --> 00:23:34,490 ¿Vale? Pero claro, 641 00:23:34,490 --> 00:23:36,470 ese objeto JDBC template hay que asociarlo 642 00:23:36,470 --> 00:23:37,190 a una conexión. 643 00:23:38,569 --> 00:23:40,369 Una conexión única o un pool, me da igual, 644 00:23:40,369 --> 00:23:41,710 Son las dos cosas que estamos manejando 645 00:23:41,710 --> 00:23:42,769 Conexión única o pool 646 00:23:42,769 --> 00:23:45,410 Si lo asocio a conexión única pongo esta cosa 647 00:23:45,410 --> 00:23:46,890 Si lo asocio a un pool 648 00:23:46,890 --> 00:23:49,329 Pues pongo aquí el pool de arriba 649 00:23:49,329 --> 00:23:51,190 Que lo tengo ya instanciado 650 00:23:51,190 --> 00:23:52,170 Y ya está 651 00:23:52,170 --> 00:23:54,130 ¿Vale? Que no es null 652 00:23:54,130 --> 00:23:55,269 Pues devuelvo el que tenga 653 00:23:55,269 --> 00:24:12,160 ¿Vale? 654 00:24:17,140 --> 00:24:18,579 Repito la tontería 655 00:24:18,579 --> 00:24:19,900 ¿Vale? 656 00:24:19,980 --> 00:24:20,960 Que tal y como lo tenía antes 657 00:24:20,960 --> 00:24:23,240 Efectivamente cada vez devolvía un objeto nuevo 658 00:24:23,240 --> 00:24:25,359 Se iba multiplicando la aparición de objetos 659 00:24:25,359 --> 00:24:28,059 lo que quiero es inicializar 660 00:24:28,059 --> 00:24:29,700 el de arriba, en el resto lo tengo bien puesto 661 00:24:29,700 --> 00:24:31,599 ¿verdad? si, si, en el resto, si 662 00:24:31,599 --> 00:24:33,400 vale, vale, aquí lo tenía muy mal 663 00:24:33,400 --> 00:24:35,559 vale, entonces si es null 664 00:24:35,559 --> 00:24:36,759 le doy valor 665 00:24:36,759 --> 00:24:39,700 y si no es null no hace falta darle valor 666 00:24:39,700 --> 00:24:41,519 y en ambos casos lo devuelvo 667 00:24:41,519 --> 00:24:43,920 claro, lógicamente esto no servía 668 00:24:43,920 --> 00:24:45,779 de singleton para nada 669 00:24:45,779 --> 00:24:47,980 podía funcionar 670 00:24:47,980 --> 00:24:49,359 igualmente pero con un montón de objetos 671 00:24:49,359 --> 00:24:50,119 ahí en la memoria 672 00:24:50,119 --> 00:24:53,359 vale, bueno pues ya este 673 00:24:53,359 --> 00:24:55,279 objeto lo tenemos instanciado, ahora vamos 674 00:24:55,279 --> 00:24:57,380 a usarlo. A usarlo 675 00:24:57,380 --> 00:24:58,839 desde nuestras clases 676 00:24:58,839 --> 00:25:01,380 DAO implementación, que son 677 00:25:01,380 --> 00:25:02,940 las que tocan ya la base de datos. 678 00:25:04,200 --> 00:25:05,599 ¿Podemos quitar esto? 679 00:25:06,759 --> 00:25:06,920 ¿Sí? 680 00:25:07,920 --> 00:25:08,579 ¿Sí? ¿No? 681 00:25:10,660 --> 00:25:11,460 ¿Hasta dónde? 682 00:25:23,109 --> 00:25:25,289 La property es la que tiene la conexión. 683 00:25:25,410 --> 00:25:26,470 La localhost, MySQL, 684 00:25:27,349 --> 00:25:34,640 la cadena de conexión. ¿Vale? 685 00:25:45,559 --> 00:25:46,460 Venga, pues ahora 686 00:25:46,460 --> 00:25:48,599 abrimos nuestro 687 00:25:48,599 --> 00:25:50,700 DAO implementación, que ahora lo vamos a hacer distinto. 688 00:25:50,700 --> 00:25:51,660 Lo vamos a hacer 689 00:25:51,660 --> 00:25:53,700 Con JDBC puro 690 00:25:53,700 --> 00:25:58,000 Sino con este de aquí 691 00:25:58,000 --> 00:25:58,759 Entonces 692 00:25:58,759 --> 00:26:03,609 Los métodos que teníais 693 00:26:03,609 --> 00:26:06,329 Dejadlos vacíos directamente 694 00:26:06,329 --> 00:26:08,289 Porque ahora ya no lo vamos a hacer 695 00:26:08,289 --> 00:26:09,970 O no lo vais a hacer con JDBC puro 696 00:26:09,970 --> 00:26:11,789 Los limpiáis y los vaciáis 697 00:26:11,789 --> 00:26:12,349 Vacíos 698 00:26:12,349 --> 00:26:15,970 Y el da implementación vuestro 699 00:26:15,970 --> 00:26:17,630 Os acordáis, tendría ahí 700 00:26:17,630 --> 00:26:19,190 Un connection, ¿no? 701 00:26:19,710 --> 00:26:21,109 Que es luego el que usan 702 00:26:21,109 --> 00:26:23,490 Un connection o un pool, depende 703 00:26:23,490 --> 00:26:26,910 Que es el que usaban luego los métodos de abajo 704 00:26:26,910 --> 00:26:29,009 Pues ahora no vamos a usar ese 705 00:26:29,009 --> 00:26:30,690 Connection, vamos a usar este 706 00:26:30,690 --> 00:26:36,900 ¿Vale? Vale, pues entonces 707 00:26:36,900 --> 00:26:38,700 Vamos a usar este objeto 708 00:26:38,700 --> 00:26:40,579 Pues mi venta da implementación 709 00:26:40,579 --> 00:26:41,440 Necesita este objeto 710 00:26:41,440 --> 00:26:44,640 Necesita este objeto que como veis de forma 711 00:26:44,640 --> 00:26:46,859 Muy sencilla, lo va a hacer todo 712 00:26:46,859 --> 00:26:48,099 Ahora vamos aquí 713 00:26:48,099 --> 00:26:50,480 ¿Vale? Ahora vamos aquí abajo 714 00:26:50,480 --> 00:26:52,720 Pero como veis, mis códigos 715 00:26:52,720 --> 00:26:54,900 De 6, 7, 8, 9, 10 líneas 716 00:26:54,900 --> 00:26:57,059 veréis en que se han reducido 717 00:26:57,059 --> 00:26:58,599 ahora los miramos más en detalle 718 00:26:58,599 --> 00:26:59,960 esto es solo para un primer vistazo 719 00:26:59,960 --> 00:27:02,180 aquí, dime 720 00:27:02,180 --> 00:27:04,960 claro, todo lo que hay 721 00:27:04,960 --> 00:27:06,000 dentro de los métodos fuera 722 00:27:06,000 --> 00:27:09,200 porque ahora la implementación va a ser con Spring JDBC 723 00:27:09,200 --> 00:27:10,680 no va a ser con JDBC puro 724 00:27:10,680 --> 00:27:15,950 y lo que os estaba diciendo 725 00:27:15,950 --> 00:27:17,630 todavía no escribéis nada 726 00:27:17,630 --> 00:27:19,150 como un primer vistazo 727 00:27:19,150 --> 00:27:21,569 mirad como se han reducido 728 00:27:21,569 --> 00:27:23,490 ahora ya yo hago los SQL 729 00:27:23,490 --> 00:27:25,970 y ni gestiono excepciones 730 00:27:25,970 --> 00:27:28,769 Ni me preocupo de los recursos 731 00:27:28,769 --> 00:27:31,170 De abrir la sentencia 732 00:27:31,170 --> 00:27:31,549 Nada 733 00:27:31,549 --> 00:27:35,450 El JDC Template tiene métodos para hacer lo que yo quiera 734 00:27:35,450 --> 00:27:36,589 ¿Vale? 735 00:27:37,170 --> 00:27:37,910 Por ejemplo 736 00:27:37,910 --> 00:27:40,450 Vamos al insert 737 00:27:40,450 --> 00:27:43,089 Si abrís JDC Template 738 00:27:43,089 --> 00:27:44,849 Punto, veréis que se despliega 739 00:27:44,849 --> 00:27:46,549 Hay una cantidad de cosas para hacer mil cosas 740 00:27:46,549 --> 00:27:48,450 Que uno se puede meter, investigar y averiguar 741 00:27:48,450 --> 00:27:50,450 Pero que queremos hacer 742 00:27:50,450 --> 00:27:51,869 Insert, delete, update 743 00:27:51,869 --> 00:27:54,069 Pues JDC Template, update 744 00:27:54,069 --> 00:27:56,150 y ahí ya metemos 745 00:27:56,150 --> 00:27:58,049 el SQL que queramos 746 00:27:58,049 --> 00:28:00,529 con interrogaciones 747 00:28:00,529 --> 00:28:02,890 en las 748 00:28:02,890 --> 00:28:04,410 en las variables 749 00:28:04,410 --> 00:28:06,289 y luego después 750 00:28:06,289 --> 00:28:10,680 pongo tantos parámetros 751 00:28:10,680 --> 00:28:12,259 como interrogación necesite 752 00:28:12,259 --> 00:28:14,079 pam pam pam 753 00:28:14,079 --> 00:28:15,900 pues need comprador 754 00:28:15,900 --> 00:28:16,980 redcoach en el color 755 00:28:16,980 --> 00:28:20,519 este es mi insert, me da implementación 756 00:28:20,519 --> 00:28:22,740 para el insert 757 00:28:22,740 --> 00:28:27,630 esto tú habrás 758 00:28:27,630 --> 00:28:29,430 borrado el antiguo y escribirás esto. 759 00:28:31,490 --> 00:28:31,690 O sea, 760 00:28:31,849 --> 00:28:34,130 hemos reducido unas cuantas líneas 761 00:28:34,130 --> 00:28:34,609 a esto. 762 00:28:36,029 --> 00:28:42,019 ¿Vale? Sí, esto 763 00:28:42,019 --> 00:28:44,140 lo que pasa es que esto todavía 764 00:28:44,140 --> 00:28:46,000 esto lo vamos a escribir ahora. 765 00:28:46,119 --> 00:28:47,420 Esto todavía no lo escribáis. ¿Vale? 766 00:28:47,880 --> 00:28:49,960 Escribís este objeto para poder 767 00:28:49,960 --> 00:28:51,240 hacer esto. ¿Vale? 768 00:28:53,589 --> 00:28:54,329 ¿Vale? Entonces, 769 00:28:54,869 --> 00:28:56,609 se queda mucho más sencillo. 770 00:28:57,369 --> 00:28:59,549 Pero claro, hacemos un segundinín. 771 00:28:59,930 --> 00:29:01,470 Como veis, hemos puesto una 772 00:29:01,470 --> 00:29:03,470 pequeña capita, pero 773 00:29:03,470 --> 00:29:05,150 el SQL no lo enmascara 774 00:29:05,150 --> 00:29:07,089 el SQL lo sigo escribiendo yo 775 00:29:07,089 --> 00:29:08,710 y eso está muy bien 776 00:29:08,710 --> 00:29:11,130 porque tengo un mínimo de control 777 00:29:11,130 --> 00:29:13,589 para optimizar el rendimiento de la base de datos 778 00:29:13,589 --> 00:29:15,730 si yo elijo el SQL, tengo un mínimo de control 779 00:29:15,730 --> 00:29:17,609 ¿vale? 780 00:29:18,990 --> 00:29:19,589 vamos a 781 00:29:19,589 --> 00:29:20,269 pasar de los find 782 00:29:20,269 --> 00:29:23,430 por el delete, pues el delete 783 00:29:23,430 --> 00:29:23,890 es lo mismo 784 00:29:23,890 --> 00:29:26,930 jdbctemplate, update 785 00:29:26,930 --> 00:29:28,470 y pongo mi delete 786 00:29:28,470 --> 00:29:33,230 bueno, porque este método 787 00:29:33,230 --> 00:29:34,410 recordáis que lo habíamos hecho 788 00:29:34,410 --> 00:29:36,230 para que devolviera un boolean 789 00:29:36,230 --> 00:29:38,829 con true si realmente borraba alguna columna 790 00:29:38,829 --> 00:29:39,609 y false si no 791 00:29:39,609 --> 00:29:42,910 y este método te devuelve el número de columnas 792 00:29:42,910 --> 00:29:44,309 afectadas, entonces por eso 793 00:29:44,309 --> 00:29:47,069 lo he igualado a 1 y he devuelto directamente 794 00:29:47,069 --> 00:29:47,549 lo que dé 795 00:29:47,549 --> 00:29:53,670 entonces el insert y el update 796 00:29:53,670 --> 00:29:55,769 perdón, el insert 797 00:29:55,769 --> 00:29:57,529 y el delete se han quedado 798 00:29:57,529 --> 00:29:58,950 muy sencillos 799 00:29:58,950 --> 00:30:15,190 Y ahora esto ya por dentro, hará el prepare statement, hará el setting, hará el ejecuter, lo hará ya todo, capturar a la excepción, todo el rollo, ¿vale? Pero me deja elegir el SQL. 800 00:30:15,190 --> 00:30:20,940 Bueno, ¿el delete y el insert los tenéis escritos? 801 00:30:22,700 --> 00:30:24,259 ¿A cuál vamos? ¿Al insert? 802 00:30:30,329 --> 00:30:35,549 Insert es hacer en SQL y aquí poner los tres parámetros de la venta, V. 803 00:30:35,549 --> 00:30:50,109 A ver, si lo pones directamente 804 00:30:50,109 --> 00:30:51,250 directamente no puedes 805 00:30:51,250 --> 00:30:52,630 porque como va entrecomillado 806 00:30:52,630 --> 00:30:55,430 sería como poner literalmente esto, no tendría sentido 807 00:30:55,430 --> 00:30:57,369 podríamos hacer lo que 808 00:30:57,369 --> 00:30:58,930 hicimos al principio de todo 809 00:30:58,930 --> 00:31:01,589 que es cortar aquí las comillas 810 00:31:01,589 --> 00:31:02,569 y concatenar 811 00:31:02,569 --> 00:31:04,250 entonces ya sí que concatenaría con el valor 812 00:31:04,250 --> 00:31:06,009 Pero volvemos a lo de siempre 813 00:31:06,009 --> 00:31:08,650 Que entonces tú estás construyendo un string 814 00:31:08,650 --> 00:31:10,630 Y en ese string 815 00:31:10,630 --> 00:31:12,269 SQL estás metiendo 816 00:31:12,269 --> 00:31:14,490 Lo que el tío te quiera meter aquí 817 00:31:14,490 --> 00:31:16,750 Que en lugar de NIF comprador 818 00:31:16,750 --> 00:31:17,910 Puede ser Drop Database 819 00:31:17,910 --> 00:31:21,170 Lo has construido aquí y lo pasas a la base de datos 820 00:31:21,170 --> 00:31:23,329 Con interrogaciones 821 00:31:23,329 --> 00:31:25,509 Primero lo pasas a la base de datos 822 00:31:25,509 --> 00:31:26,710 Le dices a la base de datos 823 00:31:26,710 --> 00:31:27,869 Te la paso a medias 824 00:31:27,869 --> 00:31:30,670 Ahora ya te voy a pasar el valor que va aquí 825 00:31:30,670 --> 00:31:33,049 Entonces la base de datos ya sabe 826 00:31:33,049 --> 00:31:34,349 que ahí tiene que llegar un valor 827 00:31:34,349 --> 00:31:36,930 y si le llega un drop database pa pa pa 828 00:31:36,930 --> 00:31:38,190 dice no, esto no me vale 829 00:31:38,190 --> 00:31:41,289 sabe que le tiene que llegar 830 00:31:41,289 --> 00:31:43,150 un valor para encajar en esa cajita 831 00:31:43,150 --> 00:31:44,069 que él se está esperando 832 00:31:44,069 --> 00:31:46,829 vas a la base de datos como en dos pasos 833 00:31:46,829 --> 00:31:49,170 bueno 834 00:31:49,170 --> 00:31:51,289 insert y delete entonces pues ya está 835 00:31:51,289 --> 00:31:53,369 vale, ya hemos visto 836 00:31:53,369 --> 00:31:55,390 alguna de las ventajas del Spring JDBC 837 00:31:55,390 --> 00:31:56,789 que es jolín, que rápido 838 00:31:56,789 --> 00:31:57,910 escribo yo esto 839 00:31:57,910 --> 00:32:02,710 nos vamos al find by id por ejemplo 840 00:32:02,710 --> 00:32:04,869 vale, el find by id 841 00:32:04,869 --> 00:32:06,769 ya significa 842 00:32:06,769 --> 00:32:08,650 recuperar un objeto venta 843 00:32:08,650 --> 00:32:10,950 aquí se nos complicaba más 844 00:32:10,950 --> 00:32:12,589 porque teníamos que hacer el result set 845 00:32:12,589 --> 00:32:14,589 del result set ir campo por campo 846 00:32:14,589 --> 00:32:15,630 construyendo el objeto 847 00:32:15,630 --> 00:32:17,670 pues este es tan listo 848 00:32:17,670 --> 00:32:20,230 que yo le hago el select 849 00:32:20,230 --> 00:32:22,390 y me lo convierte en objeto 850 00:32:22,390 --> 00:32:23,950 directamente, venta 851 00:32:23,950 --> 00:32:25,549 me lo convierte en objeto 852 00:32:25,549 --> 00:32:28,630 pero claro, como sabe 853 00:32:28,630 --> 00:32:30,809 él de estas columnas 854 00:32:30,809 --> 00:32:33,150 cuál es cuál en cada propiedad 855 00:32:33,150 --> 00:32:35,089 del objeto, cómo sabe cómo construirlo 856 00:32:35,089 --> 00:32:37,150 porque le tengo que dar 857 00:32:37,150 --> 00:32:38,589 yo un objeto mapeo 858 00:32:38,589 --> 00:32:41,450 que es el que nos falta poner aquí 859 00:32:41,450 --> 00:32:42,930 ¿vale? entonces 860 00:32:42,930 --> 00:32:45,049 con este objeto le doy la información 861 00:32:45,049 --> 00:32:47,289 de cómo se corresponden 862 00:32:47,289 --> 00:32:48,890 los campos del result set 863 00:32:48,890 --> 00:32:50,569 con las propiedades del objeto 864 00:32:50,569 --> 00:32:51,970 con este mapeo 865 00:32:51,970 --> 00:32:55,170 ¿vale? entonces este mapeo 866 00:32:55,170 --> 00:32:57,009 es una interfaz funcional de las que 867 00:32:57,009 --> 00:32:57,869 tanto os gustan 868 00:32:57,869 --> 00:32:59,670 el mapeo 869 00:32:59,670 --> 00:33:02,309 es una interfaz funcional 870 00:33:02,309 --> 00:33:04,190 row mapper, que el mismo 871 00:33:04,190 --> 00:33:06,150 nombre lo dice, mapeo de filas 872 00:33:06,150 --> 00:33:07,809 es una interfaz funcional 873 00:33:07,809 --> 00:33:09,930 magnífica, en este caso 874 00:33:09,930 --> 00:33:11,410 es una bifuncción 875 00:33:11,410 --> 00:33:13,890 recibe 876 00:33:13,890 --> 00:33:16,130 dos valores y te devuelve algo 877 00:33:16,130 --> 00:33:19,140 que recibe 878 00:33:19,140 --> 00:33:20,700 el result set 879 00:33:20,700 --> 00:33:23,740 y un siguiente parámetro que es el número de columnas 880 00:33:23,740 --> 00:33:25,539 del result set, pero ese 881 00:33:25,539 --> 00:33:27,279 lo podemos usar aquí o no, da igual 882 00:33:27,279 --> 00:33:28,819 depende de lo que queramos hacer en este mapper 883 00:33:28,819 --> 00:33:30,839 este mapper está abierto a que hagamos mil cosas 884 00:33:30,839 --> 00:33:42,339 Pero bueno, el mapper sencillo es, cojo mi result set y con él construyo el objeto que es el que me devuelve el mapper, ¿vale? 885 00:33:44,140 --> 00:33:55,339 Entonces, de mi result set, la propiedad IDE, llévala, claro, hacéos un constructor en venta con todos los parámetros, 886 00:33:55,339 --> 00:33:56,960 Que no lo tendréis 887 00:33:56,960 --> 00:33:58,160 Porque si no, no pasa nada 888 00:33:58,160 --> 00:33:59,920 Pero tendríamos que poner aquí las llavecitas 889 00:33:59,920 --> 00:34:01,640 Y hacer un new venta 890 00:34:01,640 --> 00:34:02,640 Set, set, set, set 891 00:34:02,640 --> 00:34:03,660 Y luego retún venta 892 00:34:03,660 --> 00:34:05,480 Entonces para que quede más cortito 893 00:34:05,480 --> 00:34:06,440 La interfaz funcional 894 00:34:06,440 --> 00:34:11,059 Haceos un constructor con todos los parámetros en venta 895 00:34:11,059 --> 00:34:13,480 Es decir, aquí en venta 896 00:34:13,480 --> 00:34:15,739 Que donde está venta 897 00:34:15,739 --> 00:34:16,119 Aquí 898 00:34:16,119 --> 00:34:20,469 Haceos un constructor con todos los parámetros 899 00:34:20,469 --> 00:34:23,510 Y así la interfaz funcional 900 00:34:23,510 --> 00:34:26,010 Queda más cortita 901 00:34:26,010 --> 00:34:31,329 Bueno, sí, porque tengo uno 902 00:34:31,329 --> 00:34:31,929 Sin ID 903 00:34:31,929 --> 00:34:34,849 Porque, bueno, es como principio básico 904 00:34:34,849 --> 00:34:36,929 Tú cuando instancias un objeto venta 905 00:34:36,929 --> 00:34:38,469 No le das el ID 906 00:34:38,469 --> 00:34:40,409 Porque es auto, entonces, hombre, este es 907 00:34:40,409 --> 00:34:42,730 Pero vamos, el que nos importa ahora 908 00:34:42,730 --> 00:34:43,949 Es este 909 00:34:43,949 --> 00:34:46,670 Entonces, hacéos uno con todos los parámetros 910 00:34:46,670 --> 00:34:48,269 Con el único objeto 911 00:34:48,269 --> 00:34:51,210 De luego escribir ese mapper 912 00:34:51,210 --> 00:34:51,730 Más rápido 913 00:34:51,730 --> 00:34:54,550 Porque si no, tenéis que hacer el new ventas 914 00:34:54,550 --> 00:34:56,369 set, set, set, set, set y retúmbela. 915 00:34:58,320 --> 00:34:58,519 ¿Vale? 916 00:35:01,480 --> 00:35:02,880 Un constructor con todos. 917 00:35:05,340 --> 00:35:05,820 Dime. 918 00:35:06,559 --> 00:35:07,840 Ah, que tú has levantado la mano hace un rato. 919 00:35:07,920 --> 00:35:10,139 Es verdad, perdón. Se me había olvidado. 920 00:35:10,219 --> 00:35:11,000 Es verdad, perdona. 921 00:35:16,539 --> 00:35:18,320 Sí, vamos ahora. 922 00:35:20,440 --> 00:35:20,920 Venga. 923 00:35:23,340 --> 00:35:24,659 Venta la implementación. 924 00:35:24,800 --> 00:35:25,340 ¿Dónde estamos? 925 00:35:25,940 --> 00:35:26,420 Entonces. 926 00:35:26,420 --> 00:35:28,619 Ahora ya 927 00:35:28,619 --> 00:35:32,059 Ese constructor con parámetros 928 00:35:32,059 --> 00:35:34,460 Nos facilita hacer esta interfaz 929 00:35:34,460 --> 00:35:38,179 Acabo de decir 930 00:35:38,179 --> 00:35:39,880 Esta es una interfaz que 931 00:35:39,880 --> 00:35:42,360 Asume, esto llámalo como queráis 932 00:35:42,360 --> 00:35:44,139 X e Y, pero vamos, lo he llamado así 933 00:35:44,139 --> 00:35:44,900 Para que se entienda 934 00:35:44,900 --> 00:35:48,000 Claro, este dice 935 00:35:48,000 --> 00:35:49,719 Cojo estos dos parámetros 936 00:35:49,719 --> 00:35:52,119 Pero claro, para que esa interfaz funcional 937 00:35:52,119 --> 00:35:53,559 Luego tenga sentido 938 00:35:53,559 --> 00:35:55,039 Este RS 939 00:35:55,039 --> 00:35:56,260 este RS 940 00:35:56,260 --> 00:35:59,559 se supone que este RS 941 00:35:59,559 --> 00:36:01,659 va a ser un objeto ResultSet 942 00:36:01,659 --> 00:36:04,909 porque si no es un objeto 943 00:36:04,909 --> 00:36:05,750 ResultSet 944 00:36:05,750 --> 00:36:08,269 cuando luego esta interfaz funcional 945 00:36:08,269 --> 00:36:10,550 entra en acción, que es esto de RSGETIN 946 00:36:10,550 --> 00:36:12,429 ¿vale? 947 00:36:14,900 --> 00:36:15,239 o sea que 948 00:36:15,239 --> 00:36:17,480 yo lo estoy copiando como teniendo fe 949 00:36:17,480 --> 00:36:18,239 ¿cómo? 950 00:36:19,579 --> 00:36:21,420 no me hace falta tener fe 951 00:36:21,420 --> 00:36:24,440 vale, pues ahora 952 00:36:24,440 --> 00:36:25,980 lo vamos a explicar otra vez, dime 953 00:36:25,980 --> 00:36:29,380 Que si puedo, ¿qué? 954 00:36:31,039 --> 00:36:32,059 Sí, a ver 955 00:36:32,059 --> 00:36:33,900 Espera, me bajo la coma aquí abajo 956 00:36:33,900 --> 00:36:35,099 Ahí 957 00:36:35,099 --> 00:36:38,000 Vale 958 00:36:38,000 --> 00:36:40,619 Esta 959 00:36:40,619 --> 00:36:42,679 Es una interfaz 960 00:36:42,679 --> 00:36:45,300 A ver, vamos a repetirlo otra vez, ¿qué es esto? 961 00:36:46,239 --> 00:36:47,340 Esto es un objeto 962 00:36:47,340 --> 00:36:48,659 Interfaz funcional 963 00:36:48,659 --> 00:36:50,940 ¿Qué es un objeto interfaz funcional? 964 00:36:51,699 --> 00:36:52,619 Es un objeto 965 00:36:52,619 --> 00:36:55,039 No es un objeto que tenga un valor, no lo es 966 00:36:55,039 --> 00:36:57,119 Es un objeto que hace algo, ¿vale? 967 00:36:58,000 --> 00:37:00,920 Es decir, los datos pueden contener valores 968 00:37:00,920 --> 00:37:03,679 o pueden contener comportamientos, las dos cosas. 969 00:37:03,940 --> 00:37:06,119 Esa es la base de la programación funcional, ¿vale? 970 00:37:06,559 --> 00:37:07,800 Pues este dato, mape, 971 00:37:08,059 --> 00:37:11,260 este dato lo que contiene es un comportamiento, ¿vale? 972 00:37:12,000 --> 00:37:14,480 Y ese comportamiento, ¿cómo lo programo yo? 973 00:37:14,579 --> 00:37:15,639 ¿Cómo lo especifico en Java? 974 00:37:15,760 --> 00:37:17,119 Mediante una interfaz funcional, 975 00:37:17,280 --> 00:37:18,539 mediante una función lambda, perdón, 976 00:37:18,760 --> 00:37:19,539 mediante una función lambda, 977 00:37:19,619 --> 00:37:22,079 es la forma de especificar comportamientos, ¿vale? 978 00:37:22,079 --> 00:37:24,320 Pues esta función lambda me dice, 979 00:37:25,039 --> 00:37:26,420 Tú dame dos parámetros 980 00:37:26,420 --> 00:37:28,980 que yo con ellos te voy a construir 981 00:37:28,980 --> 00:37:30,119 un objeto de esta manera. 982 00:37:30,780 --> 00:37:31,639 Y te lo voy a devolver. 983 00:37:32,340 --> 00:37:34,360 Pero claro, para que este 984 00:37:34,360 --> 00:37:36,260 RSGetIn tenga sentido, 985 00:37:37,219 --> 00:37:38,780 esto de aquí tiene que ser un 986 00:37:38,780 --> 00:37:41,019 ResultSet, porque de los ResultSet, 987 00:37:41,099 --> 00:37:42,659 de los queries, es de donde salen 988 00:37:42,659 --> 00:37:44,059 estos valores. 989 00:37:44,179 --> 00:37:45,280 La cosa es que en mi clip se dice 990 00:37:45,280 --> 00:37:48,199 respecto a RS. 991 00:37:48,820 --> 00:37:51,039 Pero tu clip no tiene por qué decir eso aquí. 992 00:37:51,599 --> 00:37:52,460 Habéis importado el roadmap. 993 00:37:52,699 --> 00:37:53,699 No tiene por qué decirte nada. 994 00:37:55,039 --> 00:37:57,239 Claro, bueno, importa 995 00:37:57,239 --> 00:37:59,320 Roadmapper, pero tu eclipse se tiene 996 00:37:59,320 --> 00:38:01,400 Que callar, a una lambda tú le metes 997 00:38:01,400 --> 00:38:03,420 Lo que le da la gana, si se lo va a tragar 998 00:38:03,420 --> 00:38:05,239 Todo, luego otra cosa es cuando lo 999 00:38:05,239 --> 00:38:07,199 Ejecute, pero mientras 1000 00:38:07,199 --> 00:38:08,619 Respetes la sintaxis 1001 00:38:08,619 --> 00:38:10,679 ¿Vale? 1002 00:38:13,630 --> 00:38:15,510 O sea, el RSS 1003 00:38:15,510 --> 00:38:16,929 Por dentro también hace lo del 1004 00:38:16,929 --> 00:38:17,769 White hasnet 1005 00:38:17,769 --> 00:38:21,550 Eso lo hace 1006 00:38:21,550 --> 00:38:22,730 Luego el query for object 1007 00:38:22,730 --> 00:38:24,630 Esto lo único que te dice es 1008 00:38:24,630 --> 00:38:27,130 Si tú me das un registro 1009 00:38:27,130 --> 00:38:29,969 un result set posicionado 1010 00:38:29,969 --> 00:38:31,570 en un sitio, porque el result 1011 00:38:31,570 --> 00:38:33,150 William, ¿qué? 1012 00:38:33,769 --> 00:38:34,630 Espera un segundito. 1013 00:38:37,570 --> 00:38:40,010 Un segundito, voy a terminar de explicar esto que deje claro. 1014 00:38:40,130 --> 00:38:41,329 Que quede claro, vale, lo ponemos. 1015 00:38:41,969 --> 00:38:43,210 Vale, o sea, un result set 1016 00:38:43,210 --> 00:38:45,789 es un conjunto de registros 1017 00:38:45,789 --> 00:38:48,050 pero además con un indicador de posición. 1018 00:38:48,849 --> 00:38:49,869 Es las dos cosas 1019 00:38:49,869 --> 00:38:51,349 a la vez. Entonces, 1020 00:38:51,809 --> 00:38:54,170 este me dice, tú dame un result set 1021 00:38:54,170 --> 00:38:55,550 que tendrá su indicador de posición. 1022 00:38:55,550 --> 00:38:58,250 y yo con el registro que esté en esa 1023 00:38:58,250 --> 00:39:00,289 posición, sacaré su 1024 00:39:00,289 --> 00:39:02,309 campo id, su campo este, su campo 1025 00:39:02,309 --> 00:39:04,130 este, su campo este y te construyo un objeto 1026 00:39:04,130 --> 00:39:06,050 es lo que está diciendo 1027 00:39:06,050 --> 00:39:08,449 este comportamiento, tú dame un result set 1028 00:39:08,449 --> 00:39:10,510 que llevará dentro su indicador de fila 1029 00:39:10,510 --> 00:39:12,550 y yo con esa fila 1030 00:39:12,550 --> 00:39:13,489 te hago un objeto 1031 00:39:13,489 --> 00:39:16,309 y ahora, el num es un 1032 00:39:16,309 --> 00:39:18,170 segundo parámetro que necesita esta interfaz 1033 00:39:18,170 --> 00:39:19,949 funcional mapper, que 1034 00:39:19,949 --> 00:39:22,250 es el número de columnas del 1035 00:39:22,250 --> 00:39:24,269 result set, que no tenemos por 1036 00:39:24,269 --> 00:39:26,250 que usarlo aquí. O sea, esto es 1037 00:39:26,250 --> 00:39:28,150 para construir un objeto, pero a lo mejor 1038 00:39:28,150 --> 00:39:30,170 podríamos hacer una intensidad funcional, una 1039 00:39:30,170 --> 00:39:32,429 lambda más compleja, lo que tú verificarás antes 1040 00:39:32,429 --> 00:39:34,170 si num es 1041 00:39:34,170 --> 00:39:36,230 igual al número de columnas del result set 1042 00:39:36,230 --> 00:39:38,250 que lo puedes sacar, porque los objetos result set 1043 00:39:38,250 --> 00:39:40,170 tienen un método getMetadata, donde 1044 00:39:40,170 --> 00:39:42,010 sacas las columnas que tienen, patatín, 1045 00:39:42,329 --> 00:39:43,869 no me quiero meter en berenjenales, ¿vale? 1046 00:39:44,269 --> 00:39:45,750 Pero num es un parámetro 1047 00:39:45,750 --> 00:39:46,989 que 1048 00:39:46,989 --> 00:39:50,610 el roadmap debería interpretarlo 1049 00:39:50,610 --> 00:39:52,010 como número de columnas del result set. 1050 00:39:52,010 --> 00:39:54,309 que tú lo usas para hacer validaciones 1051 00:39:54,309 --> 00:39:55,869 aquí dentro, para hacer una lambda 1052 00:39:55,869 --> 00:39:58,070 complicadísima lo usas, que no 1053 00:39:58,070 --> 00:39:59,949 no lo usas, yo he hecho aquí 1054 00:39:59,949 --> 00:40:02,130 la versión sencillita, que a partir 1055 00:40:02,130 --> 00:40:03,949 de un result set con un número de 1056 00:40:03,949 --> 00:40:04,809 columnas num 1057 00:40:04,809 --> 00:40:07,949 posicionado en un sitio 1058 00:40:07,949 --> 00:40:09,510 me devuelves el objeto 1059 00:40:09,510 --> 00:40:12,090 correspondiente a esa fila 1060 00:40:12,090 --> 00:40:13,949 ¿vale? eso es lo que me hace 1061 00:40:13,949 --> 00:40:15,929 esta lambda, ¿vale? ahora ¿cómo 1062 00:40:15,929 --> 00:40:17,969 vamos a usar esta lambda? pues ahora 1063 00:40:17,969 --> 00:40:20,170 ya esta lambda, ahora ya sí que bajamos 1064 00:40:20,170 --> 00:40:21,929 al find ID, ¿vale? 1065 00:40:22,010 --> 00:40:23,929 Ahora el findMyId 1066 00:40:23,929 --> 00:40:26,429 Es el que ya hace el query for object 1067 00:40:26,429 --> 00:40:27,969 Y ahí es donde se hace todo el while next 1068 00:40:27,969 --> 00:40:28,570 Todo el rollo 1069 00:40:28,570 --> 00:40:32,130 Y ahora, este query for object 1070 00:40:32,130 --> 00:40:32,550 Dice 1071 00:40:32,550 --> 00:40:36,269 Exacto, por eso se lo pasamos 1072 00:40:36,269 --> 00:40:37,289 Aquí, como parámetro 1073 00:40:37,289 --> 00:40:39,269 Entonces este query for object 1074 00:40:39,269 --> 00:40:42,110 Hace el select a través de 1075 00:40:42,110 --> 00:40:43,469 Las órdenes del mapper 1076 00:40:43,469 --> 00:40:45,690 Cada iteración del while 1077 00:40:45,690 --> 00:40:48,110 Va cogiendo y va llevando el objeto 1078 00:40:48,110 --> 00:40:48,909 Etcétera 1079 00:40:48,909 --> 00:40:51,710 En este caso, como estamos pasando 1080 00:40:51,710 --> 00:40:53,550 por id, yo llamo 1081 00:40:53,550 --> 00:40:55,530 al query for object, porque el query for object 1082 00:40:55,530 --> 00:40:57,429 me saca un objeto solo, pero es que aquí 1083 00:40:57,429 --> 00:40:59,829 encaja, claro, si no sería 1084 00:40:59,829 --> 00:41:01,190 pues que el de abajo, el find all 1085 00:41:01,190 --> 00:41:02,809 sería como el de abajo, dime 1086 00:41:02,809 --> 00:41:04,510 ¿el num cuando lo estás usando? 1087 00:41:05,210 --> 00:41:07,750 no lo estoy usando, podría usarlo si quisiera 1088 00:41:07,750 --> 00:41:09,570 es lo que acabo de contarle a él, pero no lo estoy 1089 00:41:09,570 --> 00:41:10,570 usando, repito 1090 00:41:10,570 --> 00:41:13,510 el num se interpreta como 1091 00:41:13,510 --> 00:41:15,809 el número de columnas del registro 1092 00:41:15,809 --> 00:41:17,590 lo uso 1093 00:41:17,590 --> 00:41:19,550 si quisiera hacer esta 1094 00:41:19,550 --> 00:41:21,050 lambda más completa, más 1095 00:41:21,050 --> 00:41:23,469 enrollada, más yo que sé, pues que además me gusta 1096 00:41:23,469 --> 00:41:25,449 el número de columnas, pues cualquier cosa 1097 00:41:25,449 --> 00:41:27,489 si quisiera validar que el número 1098 00:41:27,489 --> 00:41:29,090 de columnas es el número de propiedades del objeto 1099 00:41:29,090 --> 00:41:30,849 para si no, devolverme un null 1100 00:41:30,849 --> 00:41:33,250 para lo que yo quisiera, pero no lo estoy usando aquí 1101 00:41:33,250 --> 00:41:34,710 lo estoy, ¿vale? 1102 00:41:35,670 --> 00:41:37,190 pero es eso, significa eso 1103 00:41:37,190 --> 00:41:39,510 vale 1104 00:41:39,510 --> 00:41:40,530 pues entonces 1105 00:41:40,530 --> 00:41:41,869 el 1106 00:41:41,869 --> 00:41:44,369 el find id 1107 00:41:44,369 --> 00:41:46,710 fijaos, se ha convertido 1108 00:41:46,710 --> 00:41:48,650 de la versión esta rollo 1109 00:41:48,650 --> 00:41:50,750 que teníamos en la otra 1110 00:41:50,750 --> 00:41:53,570 Ha pasado 1111 00:41:53,570 --> 00:41:54,969 De todo esto 1112 00:41:54,969 --> 00:41:57,449 Ha pasado 1113 00:41:57,449 --> 00:41:58,409 A esto 1114 00:41:58,409 --> 00:42:00,090 A esto 1115 00:42:00,090 --> 00:42:03,530 Hombre, pues si yo pongo aquí un retun 1116 00:42:03,530 --> 00:42:04,869 Es una línea 1117 00:42:04,869 --> 00:42:07,590 Hombre 1118 00:42:07,590 --> 00:42:09,590 Cuanto menos escribas 1119 00:42:09,590 --> 00:42:12,110 Menos opción 1120 00:42:12,110 --> 00:42:13,130 Tienes de equivocarte 1121 00:42:13,130 --> 00:42:14,409 ¿Vale? 1122 00:42:15,989 --> 00:42:18,050 Cuanto menos escribas, menos opción tienes de equivocarte 1123 00:42:18,050 --> 00:42:20,190 Si tú tienes 20 novias, la vas a cagar seguro 1124 00:42:20,190 --> 00:42:22,030 Pues yo no tienes una, ¿no? Porque te fuerzan más. 1125 00:42:22,429 --> 00:42:23,010 Pues es lo mismo. 1126 00:42:24,389 --> 00:42:26,389 Cuantas más opciones tengas de cagarla, 1127 00:42:26,449 --> 00:42:26,789 peor. 1128 00:42:28,090 --> 00:42:30,329 Pues cuanto menos código escribas, 1129 00:42:31,070 --> 00:42:32,469 menos opciones de cagarla. 1130 00:42:33,409 --> 00:42:33,670 ¿Vale? 1131 00:42:35,329 --> 00:42:35,769 Vale. 1132 00:42:36,590 --> 00:42:38,289 Pero daos cuenta de que esto, 1133 00:42:38,289 --> 00:42:39,170 pese a eso, 1134 00:42:40,750 --> 00:42:42,010 nos deja poner el 1135 00:42:42,010 --> 00:42:42,730 ese... 1136 00:42:42,730 --> 00:42:46,190 No vale 1137 00:42:46,190 --> 00:42:47,949 cagarla en la primera oportunidad. 1138 00:42:48,690 --> 00:42:48,909 Bueno. 1139 00:42:50,190 --> 00:42:52,150 En la primera idea del código ya la cagaste. 1140 00:42:54,150 --> 00:42:54,809 En fin. 1141 00:42:54,809 --> 00:42:55,769 ¿Quién ha escrito venta con B? 1142 00:42:57,309 --> 00:42:58,429 ¿Quién ha escrito venta con B? 1143 00:42:58,429 --> 00:42:59,269 Ah, creo que yo. 1144 00:42:59,969 --> 00:43:00,769 Vale, y ahora. 1145 00:43:01,750 --> 00:43:04,250 Por ejemplo. 1146 00:43:05,269 --> 00:43:06,730 Eso, lo único que puedes cagarla, 1147 00:43:06,789 --> 00:43:08,289 que es aquí, pues pone 1148 00:43:08,289 --> 00:43:10,349 JDBC, pones esto con B. 1149 00:43:10,630 --> 00:43:10,909 Ya está. 1150 00:43:11,969 --> 00:43:14,530 Vale, y el único que nos falta, 1151 00:43:15,110 --> 00:43:16,889 find all. Fijaos que 1152 00:43:16,889 --> 00:43:18,489 cortito se queda también. 1153 00:43:18,489 --> 00:43:20,269 ahora un query 1154 00:43:20,269 --> 00:43:22,150 y este 1155 00:43:22,150 --> 00:43:25,550 le digo el mapeo 1156 00:43:25,550 --> 00:43:27,670 y como este me va a devolver muchos 1157 00:43:27,670 --> 00:43:30,170 pues me devuelvo un list de venta 1158 00:43:30,170 --> 00:43:31,530 es que no tengo ni que hacer el list 1159 00:43:31,530 --> 00:43:33,610 ni que ir uno por uno añadiendo 1160 00:43:33,610 --> 00:43:35,250 ¿vale? 1161 00:43:35,369 --> 00:43:37,329 en el otro venta da implementación 1162 00:43:37,329 --> 00:43:39,130 en el find all 1163 00:43:39,130 --> 00:43:40,849 tenía que hacerme el list 1164 00:43:40,849 --> 00:43:42,849 ir construyendo, ir añadiendo 1165 00:43:42,849 --> 00:43:43,949 capturar la excepción 1166 00:43:43,949 --> 00:43:46,949 todo este rollo tenía que hacer en el JDBC puro 1167 00:43:46,949 --> 00:43:48,849 en este ya está. 1168 00:43:49,949 --> 00:43:50,230 ¿Vale? 1169 00:43:50,349 --> 00:43:51,809 Le tengo que dar el mapper, lógicamente. 1170 00:43:53,190 --> 00:43:53,630 ¿Perdón? 1171 00:43:55,070 --> 00:43:57,110 Insertar venta, este. 1172 00:44:00,329 --> 00:44:00,769 Dime. 1173 00:44:01,250 --> 00:44:02,889 ¿Cómo se podría usar el numarrio? 1174 00:44:03,050 --> 00:44:03,869 ¿Qué métodos tiene? 1175 00:44:05,070 --> 00:44:06,630 A ver, el num es una variable. 1176 00:44:07,070 --> 00:44:10,210 Tú la usas para lo que quieras hacer en esa lambda. 1177 00:44:10,210 --> 00:44:11,170 Uso típico. 1178 00:44:11,869 --> 00:44:14,489 Solo quieres construir el objeto, por ejemplo, 1179 00:44:14,489 --> 00:44:16,929 si validas 1180 00:44:16,929 --> 00:44:18,489 que ese result set 1181 00:44:18,489 --> 00:44:21,030 es correcto porque tiene tantas columnas 1182 00:44:21,030 --> 00:44:22,030 como tiene tu objeto 1183 00:44:22,030 --> 00:44:24,630 pues entonces podrías hacer pues if num 1184 00:44:24,630 --> 00:44:26,550 igual a no sé qué, pues entonces ahora ya construyo 1185 00:44:26,550 --> 00:44:28,210 el objeto y lo devuelvo 1186 00:44:28,210 --> 00:44:30,449 que no, devuelvo null, yo que sé 1187 00:44:30,449 --> 00:44:32,650 podrías usarlo para lo que quisieras dentro de esa 1188 00:44:32,650 --> 00:44:34,769 lambda, nosotros no lo hemos usado para nada 1189 00:44:34,769 --> 00:44:36,630 hemos asumido que el result set viene con 1190 00:44:36,630 --> 00:44:38,469 todos los campos, que es un select asterisco 1191 00:44:38,469 --> 00:44:40,670 que viene con todo, lo hemos asumido y hemos creado el objeto 1192 00:44:40,670 --> 00:44:42,110 y se acabó, ¿vale? 1193 00:44:42,110 --> 00:44:46,980 vale, pues ya está 1194 00:44:46,980 --> 00:44:49,079 esta es nuestra implementación, ¿ya se ha acabado? 1195 00:44:49,980 --> 00:44:51,019 pues ya hemos hecho la libre 1196 00:44:51,019 --> 00:44:53,900 la segunda parte 1197 00:44:53,900 --> 00:44:56,199 ¿hasta dónde? 1198 00:44:57,119 --> 00:44:58,099 hasta el enlace 1199 00:44:58,099 --> 00:45:00,039 hasta aquí 1200 00:45:00,039 --> 00:45:02,280 vale 1201 00:45:02,280 --> 00:45:06,079 entonces, ¿qué hemos hecho? 1202 00:45:06,420 --> 00:45:08,320 simplemente, de la aplicación anterior 1203 00:45:08,320 --> 00:45:09,340 hemos hecho una copia 1204 00:45:09,340 --> 00:45:12,800 hemos añadido el objeto jdbctemplate 1205 00:45:12,800 --> 00:45:14,760 al singleton para poder obtenerlo 1206 00:45:14,760 --> 00:45:17,039 y he cambiado los da implementación 1207 00:45:17,039 --> 00:45:18,760 es lo único que hemos cambiado 1208 00:45:18,760 --> 00:45:22,469 vale 1209 00:45:22,469 --> 00:45:25,289 y nos debería seguir funcionando la aplicación 1210 00:45:25,289 --> 00:45:27,250 vamos a verificarlo 1211 00:45:27,250 --> 00:45:28,250 antes de 1212 00:45:28,250 --> 00:45:30,449 de 1213 00:45:30,449 --> 00:45:33,510 irnos a los baños 1214 00:45:33,510 --> 00:45:34,750 o a lo que sea 1215 00:45:34,750 --> 00:45:37,389 voy a 1216 00:45:37,389 --> 00:45:39,309 lanzar la base de datos 1217 00:45:46,320 --> 00:45:47,880 Lo que tengo que crear es una base de datos. 1218 00:45:48,920 --> 00:45:51,679 Vale, a ver, yo tengo... 1219 00:45:51,679 --> 00:45:52,159 Vale. 1220 00:45:53,139 --> 00:45:55,320 Voy a ver si esta aplicación... 1221 00:45:57,320 --> 00:45:58,980 Porque no hay más cambios que hacer. 1222 00:45:59,500 --> 00:46:02,619 El base de datos properties está aquí con todo. 1223 00:46:02,840 --> 00:46:06,280 Solamente he cambiado el de implementación y el singleton. 1224 00:46:07,099 --> 00:46:07,320 Vale. 1225 00:46:08,199 --> 00:46:13,320 Pues voy a ejecutar esta copia y vosotros también, a ver si... 1226 00:46:16,320 --> 00:46:18,219 Porque no va a pegar error 1227 00:46:18,219 --> 00:46:20,659 No, confía, confía 1228 00:46:20,659 --> 00:46:26,340 Venga, vamos a cruzar los dedos 1229 00:46:26,340 --> 00:46:28,559 El Tomcat ha arrancado 1230 00:46:28,559 --> 00:46:30,440 Ahí está la aplicación 1231 00:46:30,440 --> 00:46:31,699 Listar ventas 1232 00:46:31,699 --> 00:46:33,739 Míralas, que bonita 1233 00:46:33,739 --> 00:46:36,260 Me salen los logs del sprint 1234 00:46:36,260 --> 00:46:36,960 JDBC 1235 00:46:36,960 --> 00:46:39,380 ¿Vale? En la consola 1236 00:46:39,380 --> 00:46:42,019 Uno puede configurar la herramienta 1237 00:46:42,019 --> 00:46:43,239 Para que no muestre los logs 1238 00:46:43,239 --> 00:46:46,019 ¿Vale? Y aquí sale todo tan estupendo 1239 00:46:46,320 --> 00:46:52,840 Sí, el delete 1240 00:46:52,840 --> 00:46:54,340 Aquí está 1241 00:46:54,340 --> 00:46:56,739 Vale, pues quien quiera ir al baño 1242 00:46:56,739 --> 00:46:57,599 Y cualquier cosa 1243 00:46:57,599 --> 00:47:00,739 Aprovechamos a quien hacer la paradinha 1244 00:47:00,739 --> 00:47:01,980 Un momentito