1 00:00:00,000 --> 00:00:04,940 vale, que era Spring en origen 2 00:00:04,940 --> 00:00:07,919 una aplicación al final acaba siendo 3 00:00:07,919 --> 00:00:10,800 objetos que necesitan 4 00:00:10,800 --> 00:00:12,740 de la existencia de otros 5 00:00:12,740 --> 00:00:16,739 para inyectarse en su constructor, lógicamente 6 00:00:16,739 --> 00:00:18,579 ahora a su vez este objeto 7 00:00:18,579 --> 00:00:22,420 se va a inyectar en el constructor del otro para que el otro aparezca 8 00:00:22,420 --> 00:00:25,239 con lo cual al final una aplicación es un montón 9 00:00:25,239 --> 00:00:29,219 de objetos que se van creando para meterse en constructores 10 00:00:29,219 --> 00:00:31,160 de otros para subir, construir otros 11 00:00:31,160 --> 00:00:33,399 es decir, objetos que se van apoyando unos en otros 12 00:00:33,399 --> 00:00:34,259 ¿verdad? 13 00:00:35,679 --> 00:00:36,679 el pool 14 00:00:36,679 --> 00:00:38,920 el data source pool 15 00:00:38,920 --> 00:00:40,880 se apoya en el de la conexión 16 00:00:40,880 --> 00:00:43,119 el de la conexión se apoya en no sé qué 17 00:00:43,119 --> 00:00:45,359 al final una aplicación tiene una parte 18 00:00:45,359 --> 00:00:47,240 muy grande que es de objetos 19 00:00:47,240 --> 00:00:49,460 que para existir necesitan 20 00:00:49,460 --> 00:00:51,780 que existan otros porque necesitan para su construcción 21 00:00:51,780 --> 00:00:53,039 y a su vez yo 22 00:00:53,039 --> 00:00:54,820 otro me va a necesitar para construir 23 00:00:54,820 --> 00:01:01,390 bueno, no sé lo que os dije 24 00:01:01,390 --> 00:01:02,549 pero da igual 25 00:01:02,549 --> 00:01:05,349 como si no os hubiera dicho nada 26 00:01:05,349 --> 00:01:06,329 vale 27 00:01:06,329 --> 00:01:09,489 entonces, lo que importa es lo que os digo 28 00:01:09,489 --> 00:01:10,769 ahora, vale 29 00:01:10,769 --> 00:01:12,969 entonces, una aplicación 30 00:01:12,969 --> 00:01:15,409 tiene una parte muy grande que es eso 31 00:01:15,409 --> 00:01:17,310 entonces, si yo me tengo que 32 00:01:17,310 --> 00:01:18,010 preocupar 33 00:01:18,010 --> 00:01:20,950 de que todos los objetos necesarios 34 00:01:20,950 --> 00:01:22,069 estén creados 35 00:01:22,069 --> 00:01:25,450 pues bueno, eso es una tarea dificultosa 36 00:01:25,450 --> 00:01:28,409 el preocuparme de que todos los objetos estén creados 37 00:01:28,409 --> 00:01:30,109 pues Spring 38 00:01:30,109 --> 00:01:32,069 en origen, lo que es su core 39 00:01:32,069 --> 00:01:34,010 su núcleo en origen 40 00:01:34,010 --> 00:01:36,109 esencialmente era 41 00:01:36,109 --> 00:01:38,069 no te preocupes, yo me 42 00:01:38,069 --> 00:01:39,909 preocupo de instanciar 43 00:01:39,909 --> 00:01:41,530 todos los objetos que hagan falta 44 00:01:41,530 --> 00:01:44,170 y meterlos para construir 45 00:01:44,170 --> 00:01:44,810 el gordote 46 00:01:44,810 --> 00:01:46,989 tú saca el gordote 47 00:01:46,989 --> 00:01:50,450 tú saca el objeto gordote 48 00:01:50,450 --> 00:01:56,390 A ver, que soy de igualdad de género 49 00:01:56,390 --> 00:01:58,310 No vayáis de machirulos ahora 50 00:01:58,310 --> 00:01:59,629 Porque os tengo que bajar la nota 51 00:01:59,629 --> 00:02:03,950 Ah, ¿por qué? 52 00:02:04,450 --> 00:02:05,969 Por ser hombre bajas la nota 53 00:02:05,969 --> 00:02:07,290 Efectivamente 54 00:02:07,290 --> 00:02:10,250 Para discriminación positiva, lo siento 55 00:02:10,250 --> 00:02:11,610 Ah, bueno, entonces si es positiva 56 00:02:11,610 --> 00:02:13,250 Si es positiva, entonces 57 00:02:13,250 --> 00:02:14,830 Si es positiva, se acepta 58 00:02:14,830 --> 00:02:18,009 Vale, pues entonces 59 00:02:18,009 --> 00:02:20,150 ¿Qué me decía Spring? 60 00:02:20,449 --> 00:02:22,270 tú creas el objeto grandote. 61 00:02:22,870 --> 00:02:25,669 Y yo ya me preocupo de ir instanciando todos los que hacen 62 00:02:25,669 --> 00:02:29,689 falta hasta construir la pirámide de objetos, ¿vale? 63 00:02:30,030 --> 00:02:32,289 Eso es lo que objeto llama bin, un bin. 64 00:02:32,870 --> 00:02:37,009 Entonces, en origen, pues, tú configurabas un XML enorme 65 00:02:37,009 --> 00:02:40,430 donde decías, necesito este y necesito este y este y este y 66 00:02:40,430 --> 00:02:44,889 este y se iban inyectando en el gordo que tú ya creabas en la 67 00:02:44,889 --> 00:02:46,270 aplicación, ¿vale? 68 00:02:46,270 --> 00:02:48,689 Entonces, a su vez 69 00:02:48,689 --> 00:02:51,370 Eso te facilitaba la idea del singleton 70 00:02:51,370 --> 00:02:52,969 Es decir, asegurar 71 00:02:52,969 --> 00:02:54,409 Que los objetos eran únicos 72 00:02:54,409 --> 00:02:56,210 Porque ya Spring 73 00:02:56,210 --> 00:02:58,110 Una vez que había creado un objeto 74 00:02:58,110 --> 00:03:00,270 Para meterlo en el otro que hiciera falta 75 00:03:00,270 --> 00:03:02,289 Ese objeto era único, se hacía falta en otro momento 76 00:03:02,289 --> 00:03:04,110 Pues en origen era eso 77 00:03:04,110 --> 00:03:06,710 Y eso sigue estando en la base 78 00:03:06,710 --> 00:03:07,669 De cualquier 79 00:03:07,669 --> 00:03:11,009 Ya subherramienta que uses con Spring 80 00:03:11,009 --> 00:03:12,229 ¿Vale? 81 00:03:12,229 --> 00:03:14,150 Que usas Spring Data JPA 82 00:03:14,150 --> 00:03:16,210 el core que es la gestión 83 00:03:16,210 --> 00:03:17,229 de Bing sigue estando 84 00:03:17,229 --> 00:03:19,729 que usas el Spring MVC 85 00:03:19,729 --> 00:03:21,729 el core que es la gestión de Bing 86 00:03:21,729 --> 00:03:23,909 sigue estando, o sea, eso ya está 87 00:03:23,909 --> 00:03:26,210 en cualquier parte 88 00:03:26,210 --> 00:03:27,870 que ya uses específica de Spring 89 00:03:27,870 --> 00:03:30,210 ¿vale? lo que pasa es que ahora 90 00:03:30,210 --> 00:03:31,530 pues no se 91 00:03:31,530 --> 00:03:34,090 configura normalmente con XML 92 00:03:34,090 --> 00:03:35,930 sino con anotaciones 93 00:03:35,930 --> 00:03:38,009 pero es lo mismo, entonces cuando 94 00:03:38,009 --> 00:03:40,289 se pone el famoso repository para el JPA 95 00:03:40,289 --> 00:03:42,090 uy, he puesto repository y me han aparecido un montón 96 00:03:42,090 --> 00:03:43,909 de métodos, ¿qué es repository? 97 00:03:43,909 --> 00:03:47,229 es una anotación que te dice 98 00:03:47,229 --> 00:03:48,870 oye, este objeto es único 99 00:03:48,870 --> 00:03:50,689 Spring, por favor, detectalo 100 00:03:50,689 --> 00:03:52,550 hazlo aparecer cuando haga falta 101 00:03:52,550 --> 00:03:54,009 todo eso significa 102 00:03:54,009 --> 00:03:56,490 y como eso, pues mil cosas 103 00:03:56,490 --> 00:03:58,669 ¿vale? pues entonces a lo que vamos 104 00:03:58,669 --> 00:04:03,150 para esto de las transacciones 105 00:04:03,150 --> 00:04:05,030 vamos a usar el Spring Core también 106 00:04:05,030 --> 00:04:07,330 porque ya sí que necesitamos más objetos 107 00:04:07,330 --> 00:04:08,810 que se van a inyectar unos en otros 108 00:04:08,810 --> 00:04:10,909 entonces vamos a usar anotaciones 109 00:04:10,909 --> 00:04:12,729 para identificar los objetos como 110 00:04:12,729 --> 00:04:14,969 oye, ojo, Spring, este es un bin 111 00:04:14,969 --> 00:04:16,730 que créalo cuando te haga falta y mételo 112 00:04:16,730 --> 00:04:18,670 donde te haga falta, ¿vale? Esa es la idea 113 00:04:18,670 --> 00:04:20,730 de fondo, pues que uno no se pierda 114 00:04:20,730 --> 00:04:22,810 en, o no debería perderse en 115 00:04:22,810 --> 00:04:24,649 pongo anotaciones porque 116 00:04:24,649 --> 00:04:26,790 funciona y ya está, no 117 00:04:26,790 --> 00:04:29,069 la gran mayoría de ellas 118 00:04:29,069 --> 00:04:30,629 aunque se llamen diferentes, service, 119 00:04:30,769 --> 00:04:33,029 repository, no sé qué, la gran mayoría 120 00:04:33,029 --> 00:04:34,550 de ellas sirven para decir 121 00:04:34,550 --> 00:04:37,230 Spring, porfis, instánciame 122 00:04:37,230 --> 00:04:39,029 esto cuando te haga falta y mételo 123 00:04:39,029 --> 00:04:40,509 donde quieras, ¿vale? 124 00:04:40,509 --> 00:04:42,610 pues venga, vamos a hacernos ahora 125 00:04:42,610 --> 00:04:45,149 un proyecto de escritorio sencillísimo 126 00:04:45,149 --> 00:04:47,029 para gestionar una transacción 127 00:04:47,029 --> 00:04:48,709 entonces yo le he llamado 128 00:04:48,709 --> 00:04:51,009 llamadlo como queráis, vamos a copiar 129 00:04:51,009 --> 00:04:52,810 y pegar los modelos y demás 130 00:04:52,810 --> 00:04:54,870 del otro, entonces no vais a tener 131 00:04:54,870 --> 00:04:55,670 que escribir mucho 132 00:04:55,670 --> 00:04:58,649 pues ejemplo trans 133 00:04:58,649 --> 00:04:59,910 se llama para mí 134 00:04:59,910 --> 00:05:02,810 claro, es que este 135 00:05:02,810 --> 00:05:04,750 lo hice cuando todavía no era coordinadora 136 00:05:04,750 --> 00:05:06,810 de igualdad de género, si hubiera sido no lo habría llamado 137 00:05:06,810 --> 00:05:08,569 así, pero ahora ya 138 00:05:08,569 --> 00:05:10,329 no lo voy a cambiar de nombre 139 00:05:10,329 --> 00:05:16,629 no, pero que 140 00:05:16,629 --> 00:05:18,889 no es algo que hubiera hecho 141 00:05:18,889 --> 00:05:22,730 porque implica que de alguna manera 142 00:05:22,730 --> 00:05:24,629 no normalizas, no sé si me estoy explicando 143 00:05:24,629 --> 00:05:26,490 pero da igual, lo acabo de improvisar así que 144 00:05:26,490 --> 00:05:30,589 no, no, no, no, no, no 145 00:05:30,589 --> 00:05:31,129 me refiero 146 00:05:31,129 --> 00:05:35,170 no normalizarlo 147 00:05:35,170 --> 00:05:36,670 sería dejarlo patente 148 00:05:36,670 --> 00:05:38,230 como si tuviera algún tipo de significado 149 00:05:38,230 --> 00:05:39,529 no sé si me estoy explicando 150 00:05:39,529 --> 00:05:42,290 normalizarlo sería asumirlo dentro de cualquier otra 151 00:05:42,290 --> 00:05:44,709 casuística de las que tú asumes 152 00:05:44,709 --> 00:05:45,470 de partida 153 00:05:45,470 --> 00:05:47,670 ¿no has entendido nada? 154 00:05:47,670 --> 00:05:48,449 vaya por Dios 155 00:05:48,449 --> 00:05:52,230 sí, en definitiva 156 00:05:52,230 --> 00:05:53,509 un proyecto nuevo, de Maven 157 00:05:53,509 --> 00:05:55,110 no, no, no 158 00:05:55,110 --> 00:05:57,629 el proyecto, no, no lo he copiado 159 00:05:57,629 --> 00:05:59,209 porque voy a quitar mucho 160 00:05:59,209 --> 00:06:01,730 ahora las vamos a ir copiando 161 00:06:01,730 --> 00:06:03,230 una a una vosotros, no os preocupéis 162 00:06:03,230 --> 00:06:04,610 haced uno nuevo de Maven 163 00:06:04,610 --> 00:06:06,750 y ahora 164 00:06:06,750 --> 00:06:09,329 en este proyecto va a usar el mismo 165 00:06:09,329 --> 00:06:11,050 modelo y el mismo servicio 166 00:06:11,050 --> 00:06:13,050 que el otro, que ahora lo vamos a ir copiando 167 00:06:13,050 --> 00:06:15,430 pero que es el método que se me ha ocurrido 168 00:06:15,430 --> 00:06:17,069 a mí, el primero que se me ocurrió sobre la marcha 169 00:06:17,069 --> 00:06:19,009 con este modelo de coches tan 170 00:06:19,009 --> 00:06:21,490 chorra que me pusisteis, pues lo único que se me 171 00:06:21,490 --> 00:06:23,329 ocurrió sobre la marcha para hacer 172 00:06:23,329 --> 00:06:25,329 algo que me, que necesitará 173 00:06:25,329 --> 00:06:27,009 como transacción es 174 00:06:27,009 --> 00:06:29,430 pues que cuando tú tienes un único 175 00:06:29,430 --> 00:06:30,649 coche en el escaparate 176 00:06:30,649 --> 00:06:33,329 entonces cuando quitas un coche 177 00:06:33,329 --> 00:06:34,089 del escaparate 178 00:06:34,089 --> 00:06:37,329 y pones otro, eso lo tienes que hacer 179 00:06:37,329 --> 00:06:39,689 los dos a la vez, porque no pueden existir 180 00:06:39,689 --> 00:06:40,810 dos coches en el escaparate 181 00:06:40,810 --> 00:06:43,449 luego, para simular 182 00:06:43,449 --> 00:06:45,089 esa transacción sencillita 183 00:06:45,089 --> 00:06:46,629 añadid 184 00:06:46,629 --> 00:06:48,649 en vuestra base de datos 185 00:06:48,649 --> 00:06:51,230 añadid un campo nuevo 186 00:06:51,230 --> 00:06:53,050 para poder simular esa transacción 187 00:06:53,050 --> 00:06:54,889 ¿cómo añadís 188 00:06:54,889 --> 00:06:56,910 desde el Workbench? 189 00:06:57,230 --> 00:06:58,670 ¿cómo alteráis una tabla? 190 00:06:59,050 --> 00:07:00,389 pues si seleccionáis la tabla 191 00:07:00,389 --> 00:07:03,350 seleccionáis la tabla y le dais a la llave inglesa 192 00:07:03,350 --> 00:07:06,389 se os abre el menú 193 00:07:06,389 --> 00:07:08,629 para iniciar, ponéis ahí una columna 194 00:07:08,629 --> 00:07:12,569 como SQL no admite 195 00:07:12,569 --> 00:07:14,490 boolean para decir si está en escaparate 196 00:07:14,490 --> 00:07:15,769 no está en escaparate 197 00:07:15,769 --> 00:07:18,329 pues él te lo pone directamente como 198 00:07:18,329 --> 00:07:20,050 timing, si marcáis boolean 199 00:07:20,050 --> 00:07:22,290 te lo va a poner en entero pequeñito 200 00:07:22,290 --> 00:07:24,290 ¿verdad? pues bueno 201 00:07:24,290 --> 00:07:26,610 añadís una columna con entero 202 00:07:26,610 --> 00:07:28,009 o entero pequeño, me da igual 203 00:07:28,009 --> 00:07:32,379 cuando ya la tengáis pues apply 204 00:07:32,379 --> 00:07:32,980 abajo 205 00:07:32,980 --> 00:07:35,279 y ya está 206 00:07:35,279 --> 00:07:38,420 y os aparecerá 207 00:07:38,420 --> 00:07:43,139 os aparecerá 208 00:07:43,139 --> 00:07:45,240 esta nueva columna 209 00:07:45,240 --> 00:07:45,680 ¿vale? 210 00:07:48,560 --> 00:07:49,100 tinyint 211 00:07:49,100 --> 00:07:51,079 o ponint, da lo mismo, tinyint es porque 212 00:07:51,079 --> 00:07:52,800 ocupe menos, es un número entero pequeñito 213 00:07:52,800 --> 00:07:53,959 ¿vale? 214 00:07:57,699 --> 00:07:58,259 ¿esto? 215 00:07:59,519 --> 00:08:01,100 ¿cómo se añade? ¿te refieres? 216 00:08:01,860 --> 00:08:02,939 en la tabla 217 00:08:02,939 --> 00:08:04,899 ventas, si tú la seleccionas aquí 218 00:08:04,899 --> 00:08:06,720 te aparece una llave inglesa 219 00:08:06,720 --> 00:08:08,660 que es para configurarla 220 00:08:08,660 --> 00:08:10,980 entonces si pulsas en la llave inglesa 221 00:08:10,980 --> 00:08:12,980 te aparece ya este menú 222 00:08:12,980 --> 00:08:14,819 para hacer los cambios que quieras en esa tabla 223 00:08:14,819 --> 00:08:17,519 pues entre ellas, añades aquí abajo una columna nueva 224 00:08:17,519 --> 00:08:19,519 con el tipo de dato que sea 225 00:08:19,519 --> 00:08:20,560 apply y ya está 226 00:08:20,560 --> 00:08:21,540 ¿vale? 227 00:08:23,379 --> 00:08:23,779 ¿correcto? 228 00:08:32,980 --> 00:08:33,539 nada 229 00:08:33,539 --> 00:08:35,559 No pongáis nada 230 00:08:35,559 --> 00:08:39,200 A ver, poned 231 00:08:39,200 --> 00:08:40,720 Marcadlo como Boolean 232 00:08:40,720 --> 00:08:41,620 Y al darlo a Apply 233 00:08:41,620 --> 00:08:45,320 Él os lo va a transformar automáticamente al TinyInt 234 00:08:45,320 --> 00:08:48,960 Hay un tipo Boolean por ahí abajo 235 00:08:48,960 --> 00:08:50,740 En el desplegable, si marcáis ese 236 00:08:50,740 --> 00:08:52,620 Cuando ya se haga el SQL 237 00:08:52,620 --> 00:08:55,039 Él ya lo mueve al TinyInt y ya está 238 00:08:55,039 --> 00:08:56,720 Porque como el Boolean no existe 239 00:08:56,720 --> 00:09:01,940 Mi columna es esta 240 00:09:01,940 --> 00:09:05,419 que veis que 241 00:09:05,419 --> 00:09:07,039 tiene ahí un boolean 242 00:09:07,039 --> 00:09:08,840 poned el boolean y ya está 243 00:09:08,840 --> 00:09:09,940 y él lo pone como tiny 244 00:09:09,940 --> 00:09:23,769 vale, pues entonces 245 00:09:23,769 --> 00:09:27,450 ¿qué quiero con esta 246 00:09:27,450 --> 00:09:30,009 con este 247 00:09:30,009 --> 00:09:30,769 campo de aquí? 248 00:09:31,409 --> 00:09:33,450 la única idea que he querido reflejar 249 00:09:33,450 --> 00:09:34,990 para explicar las transacciones es 250 00:09:34,990 --> 00:09:37,590 solamente puede haber un coche 251 00:09:37,590 --> 00:09:39,850 en el escaparate, el que tenga 252 00:09:39,850 --> 00:09:41,690 esto a cero no está expuesto 253 00:09:41,690 --> 00:09:43,690 y el que tenga 254 00:09:43,690 --> 00:09:45,570 esto a uno sí está expuesto 255 00:09:45,570 --> 00:09:47,850 entonces, ahora 256 00:09:47,850 --> 00:09:49,789 en el servicio vamos a hacer un método 257 00:09:49,789 --> 00:09:50,309 que sea 258 00:09:50,309 --> 00:09:53,470 modificar el escaparate, entonces 259 00:09:53,470 --> 00:09:55,909 modificar el escaparate va a necesitar 260 00:09:55,909 --> 00:09:57,309 dos 261 00:09:57,309 --> 00:09:58,649 updates 262 00:09:58,649 --> 00:10:01,750 pasar este de cero a uno y pasar este 263 00:10:01,750 --> 00:10:02,350 de uno a cero 264 00:10:02,350 --> 00:10:06,210 vamos a necesitar que se hagan, ¿los dos o ninguno? 265 00:10:06,210 --> 00:10:09,269 porque en el escaparate tiene que haber siempre uno solo 266 00:10:09,269 --> 00:10:10,970 no puede haber dos o cero 267 00:10:10,970 --> 00:10:12,590 entonces pues bueno 268 00:10:12,590 --> 00:10:14,370 esta es la única idea sobre esta tabla 269 00:10:14,370 --> 00:10:16,129 que se me ha ocurrido para simular 270 00:10:16,129 --> 00:10:18,750 algo que tenemos que manejar 271 00:10:18,750 --> 00:10:20,470 como transacción o todo o nada 272 00:10:20,470 --> 00:10:22,950 vale, la tabla ya está con este campo añadido 273 00:10:22,950 --> 00:10:24,889 pues vamos 274 00:10:24,889 --> 00:10:26,230 al proyecto que tenéis vacío 275 00:10:26,230 --> 00:10:28,409 entonces, del proyecto que tenéis vacío 276 00:10:28,409 --> 00:10:30,190 podéis copiar ya mucho 277 00:10:30,190 --> 00:10:32,009 del otro día 278 00:10:32,009 --> 00:10:34,490 por ejemplo, os hacéis el paquete modelo 279 00:10:34,490 --> 00:10:36,250 para hacer la clase venta. 280 00:10:36,750 --> 00:10:38,529 En la clase venta 281 00:10:38,529 --> 00:10:41,269 la copiáis, o sea, la copiáis del otro. 282 00:10:41,610 --> 00:10:43,669 En el eclipse de escritorio del otro día 283 00:10:43,669 --> 00:10:46,330 tenéis el ejemplo de JDBC que hicimos, 284 00:10:46,429 --> 00:10:46,830 que es este. 285 00:10:47,830 --> 00:10:49,529 Tenemos este ejemplo que hicimos 286 00:10:49,529 --> 00:10:51,649 que está completito. 287 00:10:54,779 --> 00:10:57,000 Claro, por eso digo que lo tenéis que añadir, 288 00:10:57,039 --> 00:10:58,200 el íntegro, ¿vale? 289 00:10:58,259 --> 00:11:00,639 Entonces, copiáis el paquete modelo 290 00:11:00,639 --> 00:11:02,000 y en la venta, 291 00:11:02,000 --> 00:11:03,340 cuando os ha añadido una columna nueva, 292 00:11:04,179 --> 00:11:05,580 añadís un campo íntegro. 293 00:11:08,139 --> 00:11:10,159 ¿Vale? Añadís el campo íntegro, el escaparate 294 00:11:10,159 --> 00:11:11,820 y ponéis su get y su set. 295 00:11:13,259 --> 00:11:14,620 Su get y su set 296 00:11:14,620 --> 00:11:17,490 y generad 297 00:11:17,490 --> 00:11:19,210 el constructor con todos los parámetros 298 00:11:19,210 --> 00:11:21,429 porque luego lo vamos a usar para el JDBCTemplate. 299 00:11:21,850 --> 00:11:23,289 Entonces, el paquete modelo 300 00:11:23,289 --> 00:11:24,830 se queda tal cual 301 00:11:24,830 --> 00:11:26,909 añadiendo este campo. 302 00:11:27,370 --> 00:11:28,970 Solamente, añadiendo este campo. 303 00:11:29,529 --> 00:11:33,370 ¿Vale? Get y set, 304 00:11:33,470 --> 00:11:34,330 claro, añadidlo 305 00:11:34,330 --> 00:11:37,309 y poned un constructor, 306 00:11:37,470 --> 00:11:39,230 repito, con todos los parámetros porque luego 307 00:11:39,230 --> 00:11:40,830 el JDBCTemplate lo va a facilitar. 308 00:11:41,529 --> 00:11:44,250 No, no le he dado longitud. 309 00:11:48,129 --> 00:11:49,950 Si tú, si te da error, 310 00:11:50,070 --> 00:11:51,929 selecciona el tipo de datos Boolean y él ya 311 00:11:51,929 --> 00:11:54,250 te lo va a modificar al TinyIn sin valores 312 00:11:54,250 --> 00:11:55,149 y no te va a dar error. 313 00:11:57,149 --> 00:11:59,509 Lo he hecho limpio. 314 00:12:00,809 --> 00:12:02,070 Sí, y lo que estamos es, 315 00:12:02,450 --> 00:12:04,269 a ver, podríais copiarse 316 00:12:04,269 --> 00:12:05,990 una copia de este, pero había que borrar más 317 00:12:05,990 --> 00:12:07,909 cosas que las que tenemos que añadir al proyecto 318 00:12:07,909 --> 00:12:10,169 limpio. Entonces, haced uno limpio, 319 00:12:10,370 --> 00:12:12,149 entonces, copiáis el modelo 320 00:12:12,149 --> 00:12:13,230 Añadiendo esa clase 321 00:12:13,230 --> 00:12:14,210 ¿Vale? 322 00:12:18,830 --> 00:12:19,769 El del otro día 323 00:12:19,769 --> 00:12:20,610 Que es el que está en la virtual 324 00:12:20,610 --> 00:12:21,070 Vale 325 00:12:21,070 --> 00:12:22,029 Ahora ya tenemos 326 00:12:22,029 --> 00:12:23,309 Venta con el escaparate 327 00:12:23,309 --> 00:12:24,529 Siguiente clase 328 00:12:24,529 --> 00:12:24,990 ¿Qué hacemos? 329 00:12:25,090 --> 00:12:25,470 La DAO 330 00:12:25,470 --> 00:12:28,009 Pues copiaos el paquete DAO 331 00:12:28,009 --> 00:12:29,210 Si queréis 332 00:12:29,210 --> 00:12:30,750 Pero 333 00:12:30,750 --> 00:12:31,450 El único 334 00:12:31,450 --> 00:12:33,269 O mejor haceros lo limpio 335 00:12:33,269 --> 00:12:33,929 Porque lo que hemos hecho 336 00:12:33,929 --> 00:12:34,750 Es que vamos a hacer uno limpio 337 00:12:34,750 --> 00:12:35,870 Sin la basura del de arriba 338 00:12:35,870 --> 00:12:36,990 Entonces 339 00:12:36,990 --> 00:12:38,309 Hacer un DAO limpio 340 00:12:38,309 --> 00:12:39,470 Porque el único método 341 00:12:39,470 --> 00:12:40,169 Que me va a interesar 342 00:12:40,169 --> 00:12:40,629 Es este 343 00:12:40,629 --> 00:12:41,710 Porque es el que quiero gestionar 344 00:12:41,710 --> 00:12:42,470 Como transacción 345 00:12:42,470 --> 00:12:44,529 ¿Vale? 346 00:12:44,529 --> 00:12:48,289 Este proyecto es solo para verlo de transacciones 347 00:12:48,289 --> 00:12:50,250 Bueno, pues hacéis un DAO limpito 348 00:12:50,250 --> 00:12:52,090 Con el único método 349 00:12:52,090 --> 00:12:53,529 Que queremos que tenga ese DAO 350 00:12:53,529 --> 00:12:56,409 Que es cambiar el escaparate 351 00:12:56,409 --> 00:12:58,710 El coche con el ID1 352 00:12:58,710 --> 00:13:01,210 Va a salir del escaparate 353 00:13:01,210 --> 00:13:02,690 Y se va a ir al escaparate 354 00:13:02,690 --> 00:13:03,870 El coche con el ID2 355 00:13:03,870 --> 00:13:04,570 ¿Vale? 356 00:13:04,590 --> 00:13:05,309 Lo cambiamos 357 00:13:05,309 --> 00:13:14,570 Ahora 358 00:13:14,570 --> 00:13:25,169 Tenemos el modelo y el DAO 359 00:13:25,169 --> 00:13:26,149 Ya está 360 00:13:26,149 --> 00:13:30,049 ¿Vale? 361 00:13:32,580 --> 00:13:35,320 Esto es, ahora nosotros esto lo vamos a ejecutar desde un main. 362 00:13:35,799 --> 00:13:37,779 El main va a ser el que cambie el escaparate, un main. 363 00:13:37,860 --> 00:13:40,019 No desde un server, que nos daría igual, pero desde un main. 364 00:13:40,080 --> 00:13:41,659 Y así se queda más limpio y más sencillo. 365 00:13:42,340 --> 00:13:44,460 Vale, pues ahora este DAO habrá que implementarlo. 366 00:13:46,159 --> 00:13:49,399 Venga, pues el paquete de implementación con el venta de 367 00:13:49,399 --> 00:13:50,059 implementación. 368 00:13:52,039 --> 00:13:52,399 ¿Vale? 369 00:13:55,559 --> 00:13:58,200 De esta anotación de aquí, por ahora os olvidáis. 370 00:13:58,299 --> 00:13:59,240 Vamos a implementarlo. 371 00:14:00,600 --> 00:14:01,960 Vamos a implementarlo. 372 00:14:02,700 --> 00:14:04,360 ¿Cómo sabemos implementarlo? 373 00:14:04,360 --> 00:14:13,679 Esto es lo que ya hemos hecho en el otro proyecto. 374 00:14:13,779 --> 00:14:17,259 Lo único es que hay que añadir el otro parámetro. 375 00:14:17,659 --> 00:14:18,500 Hay que añadir otro parámetro. 376 00:14:18,740 --> 00:14:19,419 Esto es tal cual. 377 00:14:21,179 --> 00:14:22,539 El jdbc template. 378 00:14:25,860 --> 00:14:26,600 El mapper. 379 00:14:27,340 --> 00:14:31,440 Cuidado, añadiendo la propiedad. 380 00:14:31,440 --> 00:14:34,220 Sí, sí. 381 00:14:34,220 --> 00:14:41,620 Entonces, si copiáis el POM 382 00:14:41,620 --> 00:14:42,840 Tal cual 383 00:14:42,840 --> 00:14:45,559 Del proyecto que acabamos de hacer ahora 384 00:14:45,559 --> 00:14:46,779 Pues ya lo tenéis todo 385 00:14:46,779 --> 00:14:49,600 Para tener estas dependencias 386 00:14:49,600 --> 00:14:53,519 Pues nada, esto es nuestro 387 00:14:53,519 --> 00:14:54,899 JDBC template 388 00:14:54,899 --> 00:14:56,799 El mapper 389 00:14:56,799 --> 00:14:59,879 El constructor 390 00:14:59,879 --> 00:15:01,539 Este 391 00:15:01,539 --> 00:15:04,500 Va a necesitar 392 00:15:04,500 --> 00:15:05,899 para instanciarse 393 00:15:05,899 --> 00:15:08,200 va a necesitar que alguien le meta 394 00:15:08,200 --> 00:15:09,360 un JDBC template 395 00:15:09,360 --> 00:15:10,919 ¿vale? 396 00:15:14,149 --> 00:15:14,789 entonces 397 00:15:14,789 --> 00:15:17,990 este ya va a empezar a ser 398 00:15:17,990 --> 00:15:19,210 este ya 399 00:15:19,210 --> 00:15:21,730 va a ser necesario que lo gestione Spring 400 00:15:21,730 --> 00:15:24,230 porque se le inyecta 401 00:15:24,230 --> 00:15:25,169 una dependencia 402 00:15:25,169 --> 00:15:28,210 y vamos a dar ese salto 403 00:15:28,210 --> 00:15:30,850 vamos a dar el salto de ahorrarnos 404 00:15:30,850 --> 00:15:32,490 nosotros la inyección 405 00:15:32,490 --> 00:15:33,570 de las dependencias 406 00:15:33,570 --> 00:15:35,769 vamos a ahorrar ese salto 407 00:15:35,769 --> 00:15:38,570 vale, pues entonces 408 00:15:38,570 --> 00:15:40,870 para ahorrarnos el salto de la inyección 409 00:15:40,870 --> 00:15:41,990 de la dependencia 410 00:15:41,990 --> 00:15:44,789 de alguna manera hay que decirle al core 411 00:15:44,789 --> 00:15:46,610 de sprint, que tendremos que poder 412 00:15:46,610 --> 00:15:48,690 también en las dependencias 413 00:15:48,690 --> 00:15:50,610 del POM, de alguna manera habrá que 414 00:15:50,610 --> 00:15:52,629 decirle, ¡eh! este es un BIN 415 00:15:52,629 --> 00:15:53,809 del que te encargas tú 416 00:15:53,809 --> 00:15:56,210 este es un BIN del que te encargas tú 417 00:15:56,210 --> 00:15:58,370 fijaos que venta 418 00:15:58,370 --> 00:16:03,110 no necesita a nadie 419 00:16:03,110 --> 00:16:05,169 no necesita 420 00:16:05,169 --> 00:16:05,710 a nadie 421 00:16:05,710 --> 00:16:08,049 no se le inyecta nada 422 00:16:08,049 --> 00:16:09,529 se le inyectan valores 423 00:16:09,529 --> 00:16:12,009 string, integer, que es que no son 424 00:16:12,009 --> 00:16:14,029 objetos que se tengan que instanciar, son cosas 425 00:16:14,029 --> 00:16:16,070 que yo le doy, entonces este 426 00:16:16,070 --> 00:16:16,330 bin 427 00:16:16,330 --> 00:16:20,049 spring puede pasar de él, yo no necesito 428 00:16:20,049 --> 00:16:21,289 decirle a spring gestiónalo 429 00:16:21,289 --> 00:16:24,049 porque este bin es muy simple, no se 430 00:16:24,049 --> 00:16:25,649 le inyecta nada, vale 431 00:16:25,649 --> 00:16:27,950 entonces yo aquí ni he puesto anotación ni he puesto 432 00:16:27,950 --> 00:16:30,269 nada, pero este 433 00:16:30,269 --> 00:16:32,009 este ya 434 00:16:32,009 --> 00:16:34,429 empieza a necesitar 435 00:16:34,429 --> 00:16:36,309 ya empieza 436 00:16:36,309 --> 00:16:38,350 necesitar que le pasen otros 437 00:16:38,350 --> 00:16:40,509 entonces aquí ya empieza 438 00:16:40,509 --> 00:16:42,230 el caos de 439 00:16:42,230 --> 00:16:44,169 de Spring, que es 440 00:16:44,169 --> 00:16:46,490 uy, un bin 441 00:16:46,490 --> 00:16:48,210 un objeto que necesita de otro 442 00:16:48,210 --> 00:16:49,830 ocúpate tú 443 00:16:49,830 --> 00:16:52,070 ocúpate tú Spring, ocúpate 444 00:16:52,070 --> 00:16:54,549 vale, pues para que Spring se ocupe 445 00:16:54,549 --> 00:16:56,389 tenemos que anotarlo 446 00:16:56,389 --> 00:16:57,990 tenemos que anotarlo 447 00:16:57,990 --> 00:16:58,789 vale 448 00:16:58,789 --> 00:17:02,710 y ahora, ¿qué anotación ponemos? 449 00:17:03,509 --> 00:17:04,650 la anotación general 450 00:17:04,650 --> 00:17:07,089 que se le dice a Spring para decir 451 00:17:07,089 --> 00:17:08,690 esto es un bin del que tú te ocupas 452 00:17:08,690 --> 00:17:11,029 es la anotación component. 453 00:17:11,930 --> 00:17:13,089 Esa es muy genérica. 454 00:17:14,150 --> 00:17:15,710 Bin del que tú te ocupas, component. 455 00:17:16,329 --> 00:17:18,069 Pero luego cada bin normalmente 456 00:17:18,069 --> 00:17:19,869 tiene un significado específico. 457 00:17:20,029 --> 00:17:21,230 Sirve para una cosa en concreto. 458 00:17:21,910 --> 00:17:23,589 Lo cual le da como más fuerza. 459 00:17:24,470 --> 00:17:25,430 Entonces repository 460 00:17:25,430 --> 00:17:27,910 es un caso concreto de bin 461 00:17:27,910 --> 00:17:29,990 que se ocupa de acceso a datos. 462 00:17:30,430 --> 00:17:32,250 Yo podría anotarlo como component 463 00:17:32,250 --> 00:17:33,150 y decir 464 00:17:33,150 --> 00:17:36,950 ocúpate tu 465 00:17:36,950 --> 00:17:38,690 sprint de él porque es un bin 466 00:17:38,690 --> 00:17:40,009 tuyo 467 00:17:40,009 --> 00:17:42,869 pero sería genérico, no pasa nada 468 00:17:42,869 --> 00:17:44,750 me va a funcionar igual porque yo en esta aplicación 469 00:17:44,750 --> 00:17:46,849 no estoy haciendo nada específico que necesite 470 00:17:46,849 --> 00:17:48,589 ser repositorio, no estoy haciendo nada 471 00:17:48,589 --> 00:17:50,950 pero bueno, como es 472 00:17:50,950 --> 00:17:52,809 una clase que se ocupa de acceso a datos 473 00:17:52,809 --> 00:17:54,349 y que va a hablar con la base de datos 474 00:17:54,349 --> 00:17:56,710 pues le puedo anotar como un caso 475 00:17:56,710 --> 00:17:59,210 concreto de component, que es el repositorio 476 00:17:59,210 --> 00:18:01,069 y lo dejo ya anotadito 477 00:18:01,069 --> 00:18:01,950 ya caracterizado 478 00:18:01,950 --> 00:18:04,670 el hecho de que sea repositorio o no 479 00:18:04,670 --> 00:18:06,490 en esta aplicación 480 00:18:06,490 --> 00:18:08,509 concreta pequeña de aquí, no me está aportando nada 481 00:18:08,509 --> 00:18:10,450 podría poner component, pero en el futuro 482 00:18:10,450 --> 00:18:12,490 pues si nos aportará, si queremos que haga cosas 483 00:18:12,490 --> 00:18:14,569 vale, pues entonces 484 00:18:14,569 --> 00:18:16,569 este proyecto como lo tengo yo, lo voy a subir 485 00:18:16,569 --> 00:18:18,250 así que como vendrá con todos los comentarios 486 00:18:18,250 --> 00:18:20,190 pues más o menos lo tenéis explicado todo 487 00:18:20,190 --> 00:18:22,109 vale, aquí 488 00:18:22,109 --> 00:18:23,930 esto significa 489 00:18:23,930 --> 00:18:25,490 lo que acabo de decir, vale 490 00:18:25,490 --> 00:18:28,509 ah, entonces 491 00:18:28,509 --> 00:18:28,910 ahora 492 00:18:28,910 --> 00:18:32,809 Ahora ya necesitamos el core de Spring 493 00:18:32,809 --> 00:18:34,470 Necesitamos el core de Spring 494 00:18:34,470 --> 00:18:35,650 No solo el Spring JDBC 495 00:18:35,650 --> 00:18:38,250 Y entonces ahora ya en el POM 496 00:18:38,250 --> 00:18:42,700 O cogéis el Spring Core 497 00:18:42,700 --> 00:18:43,059 Del 498 00:18:43,059 --> 00:18:45,480 Repositorio 499 00:18:45,480 --> 00:18:46,539 O 500 00:18:46,539 --> 00:18:48,819 Copiáis esto 501 00:18:48,819 --> 00:18:51,160 Lo que os sea más cómodo 502 00:18:51,160 --> 00:18:57,269 La de abajo ya la tenéis 503 00:18:57,269 --> 00:18:58,410 Que es la de Spring JDBC 504 00:19:17,559 --> 00:19:21,740 Esto es para que el jefe 505 00:19:21,740 --> 00:19:24,460 Ya, bueno 506 00:19:24,460 --> 00:19:27,000 A ver 507 00:19:27,000 --> 00:19:28,819 Calmaos 508 00:19:28,819 --> 00:19:30,380 Aquí tenéis 509 00:19:30,380 --> 00:19:32,640 Lo tenéis 510 00:19:32,640 --> 00:19:35,940 Lo tengo dos veces 511 00:19:35,940 --> 00:19:37,420 El SpringJD lo tengo dos veces 512 00:19:37,420 --> 00:19:39,180 Vale 513 00:19:39,180 --> 00:19:41,940 Este es el context 514 00:19:41,940 --> 00:19:44,200 Primero copian este 515 00:19:44,200 --> 00:19:45,140 Este es 516 00:19:45,140 --> 00:19:47,299 Este es como el jefe 517 00:19:47,299 --> 00:19:55,559 este es como el jefe, es una aplicación Spring 518 00:19:55,559 --> 00:19:57,400 arranca siempre 519 00:19:57,400 --> 00:19:59,319 desde un objeto enorme, gordote 520 00:19:59,319 --> 00:20:01,099 que es el contexto 521 00:20:01,099 --> 00:20:03,400 y el contexto ya es el que 522 00:20:03,400 --> 00:20:05,380 lo hace todo, instancia los bins 523 00:20:05,380 --> 00:20:06,259 todo lo que haga falta 524 00:20:06,259 --> 00:20:12,339 ¿vale? vais a odiar Spring, tanto que me lo pedíais 525 00:20:12,339 --> 00:20:13,220 pues ahora lo vais a odiar 526 00:20:13,220 --> 00:20:17,420 vale 527 00:20:17,420 --> 00:20:20,079 odiar una cosa no implica que no odiemos más otra 528 00:20:20,079 --> 00:20:22,400 bueno, o lo odiáis todo 529 00:20:22,400 --> 00:20:23,220 no, en realidad 530 00:20:23,220 --> 00:20:25,759 en realidad lo estáis disfrutando 531 00:20:25,759 --> 00:20:26,960 Aunque no lo reconozcáis. 532 00:20:27,680 --> 00:20:29,519 ¿A quién no le está gustando el módulo? 533 00:20:30,119 --> 00:20:31,079 Sed sinceros. 534 00:20:33,079 --> 00:20:34,640 ¿A quién no le está gustando el módulo? 535 00:20:35,220 --> 00:20:37,960 A mí no me está gustando porque no soy capaz de entenderlo. 536 00:20:39,140 --> 00:20:42,079 Claro, pero es que hemos dado un salto conceptual muy grande. 537 00:20:42,079 --> 00:20:45,059 Ya, no le tocamos un salto tan grande en 20 segundos. 538 00:20:45,660 --> 00:20:48,079 Es como saltamos el vacío. 539 00:20:49,319 --> 00:20:49,900 ¿Y qué hacemos? 540 00:20:50,500 --> 00:20:53,619 A ver, que yo podría quedarme con los contenidos del módulo 541 00:20:53,619 --> 00:20:55,599 y quedarme así bajito y ya. 542 00:20:55,759 --> 00:20:56,980 pero 543 00:20:56,980 --> 00:21:00,299 vosotros lo que tenéis es que 544 00:21:00,299 --> 00:21:01,740 llegar a una empresa 545 00:21:01,740 --> 00:21:04,619 y la empresa tiene que flipar con vosotros 546 00:21:04,619 --> 00:21:06,359 y el resto que van de otros institutos 547 00:21:06,359 --> 00:21:07,740 se van a caer 548 00:21:07,740 --> 00:21:10,539 se van a caer porque no van a saber 549 00:21:10,539 --> 00:21:11,819 ni la mitad de lo que hay vosotros 550 00:21:11,819 --> 00:21:14,500 lo que hay que hacer es que en el primer curso 551 00:21:14,500 --> 00:21:16,079 uno se dé tantas cosas random 552 00:21:16,079 --> 00:21:17,759 y se dé más cosas de estas 553 00:21:17,759 --> 00:21:20,519 en el primer curso tres meses 554 00:21:20,519 --> 00:21:21,180 con el primitivo 555 00:21:21,180 --> 00:21:24,880 vale, y cómo hacemos para que 556 00:21:24,880 --> 00:21:30,259 Vale, entonces, si a mí me dejan que aprueben dos personas, encantada. 557 00:21:31,059 --> 00:21:32,420 Pero no me dejan, pues ya está. 558 00:21:34,119 --> 00:21:36,319 Ya, pero es verdad que a mí sí siempre me ha faltado curso y también. 559 00:21:38,980 --> 00:21:40,059 Ya, ya, ya. 560 00:21:40,319 --> 00:21:41,900 Pues el año que vamos a repetir. 561 00:21:42,319 --> 00:21:44,000 No, no, no vais a repetir. 562 00:21:44,259 --> 00:21:44,940 Que no, que no, que no. 563 00:21:45,319 --> 00:21:46,420 Venga, vais a coger unas... 564 00:21:47,099 --> 00:21:50,220 Si luego yo cuando se examino, se examina a un nivel más bajito. 565 00:21:50,480 --> 00:21:52,980 Lo que pasa es que si que quiero, pues que todo lo que podamos, 566 00:21:52,980 --> 00:21:54,980 Pues más o menos ver, conocer, saber, ver de qué va 567 00:21:54,980 --> 00:21:56,220 Pues que lo sepamos 568 00:21:56,220 --> 00:21:58,720 Dentro de lo que se usa ahora, claro 569 00:21:58,720 --> 00:22:00,839 Venga, ¿esta la habéis copiado? 570 00:22:01,259 --> 00:22:01,500 No 571 00:22:01,500 --> 00:22:04,819 Se siente cada clase como 572 00:22:04,819 --> 00:22:05,339 El garrote de 573 00:22:05,339 --> 00:22:14,759 Pero a ver, lo que sí que tenéis que hacer es 574 00:22:14,759 --> 00:22:15,700 Luego mirarlo en casa 575 00:22:15,700 --> 00:22:18,700 Porque es que si no, es verdad que uno se 576 00:22:18,700 --> 00:22:20,759 Desconcierta, tenéis que mirarlo 577 00:22:20,759 --> 00:22:21,700 En casa, ¿vale? 578 00:22:22,980 --> 00:22:28,619 Venga, pues a ver 579 00:22:28,619 --> 00:22:31,339 Esta ya la tenemos 580 00:22:31,339 --> 00:22:36,180 Y esta es para transacciones 581 00:22:36,180 --> 00:22:39,559 Con lo cual, esta la vamos a poner 582 00:22:39,559 --> 00:22:41,259 Porque vamos a hacer algo de transacciones 583 00:22:41,259 --> 00:22:43,579 Si no usáramos transacciones 584 00:22:43,579 --> 00:22:47,500 Pues del repositorio de Maven la puedes sacar 585 00:22:47,500 --> 00:22:48,720 O le dices a HGPT 586 00:22:48,720 --> 00:22:51,619 Dame la dependencia para si quieres usar transacciones de free 587 00:22:51,619 --> 00:22:52,880 Y te da esto 588 00:22:52,880 --> 00:22:56,539 si tú le pides a él cosas concretitas 589 00:22:56,539 --> 00:22:57,539 sabiendo lo que le pides 590 00:22:57,539 --> 00:22:59,160 te suele dar cosas con sentido 591 00:22:59,160 --> 00:23:00,539 como le pidas algo así muy general 592 00:23:00,539 --> 00:23:09,700 bueno, pero 593 00:23:09,700 --> 00:23:11,839 claro, pídeselo más afinado 594 00:23:11,839 --> 00:23:14,079 y si no, luego tú lo retocas 595 00:23:14,079 --> 00:23:17,319 pero bueno, esta versión sí está bien 596 00:23:17,319 --> 00:23:25,000 yo creo que sí 597 00:23:25,000 --> 00:23:26,859 pero puede que, por si acaso 598 00:23:26,859 --> 00:23:28,720 yo he puesto las específicas para en este proyecto 599 00:23:28,720 --> 00:23:29,079 tampoco 600 00:23:29,079 --> 00:23:32,660 liar mucho, pero 601 00:23:32,660 --> 00:23:34,420 yo creo que el core, esta 602 00:23:34,420 --> 00:23:36,180 las de arriba las tiene fijo, claro 603 00:23:36,180 --> 00:23:38,819 y esta entiendo que también 604 00:23:38,819 --> 00:23:40,619 pero bueno, las he buscado 605 00:23:40,619 --> 00:23:41,500 por separado 606 00:23:41,500 --> 00:23:45,359 pues estará, pero bueno 607 00:23:45,359 --> 00:23:48,680 no hay una biblioteca 608 00:23:48,680 --> 00:23:50,119 que se encargue ya de importarte 609 00:23:50,119 --> 00:23:51,880 el resto de bibliotecas 610 00:23:51,880 --> 00:23:54,380 vamos a 611 00:23:54,380 --> 00:23:55,880 no cedamos el control 612 00:23:55,880 --> 00:23:58,440 no cedas nunca el control, como cedas el control 613 00:23:58,440 --> 00:24:00,480 de tu vida y de tus cosas, 614 00:24:00,759 --> 00:24:02,519 uf, jamás le des el control 615 00:24:02,519 --> 00:24:02,960 a nadie. 616 00:24:03,440 --> 00:24:04,180 Vivo tranquilo. 617 00:24:04,619 --> 00:24:05,119 No, no, no. 618 00:24:05,140 --> 00:24:05,920 Tampoco quiero mucho. 619 00:24:07,200 --> 00:24:07,440 ¿Eh? 620 00:24:09,559 --> 00:24:10,039 ¿Qué? 621 00:24:11,920 --> 00:24:12,799 Por ejemplo. 622 00:24:13,619 --> 00:24:14,779 Vale, pues entonces. 623 00:24:16,140 --> 00:24:17,339 Ahora ya sí que sí. 624 00:24:17,440 --> 00:24:19,440 Con estas dependencias puestas, 625 00:24:20,960 --> 00:24:21,960 Repositori 626 00:24:21,960 --> 00:24:23,400 ya la tenemos. 627 00:24:24,839 --> 00:24:26,000 ¿Vale? O con la del core 628 00:24:26,000 --> 00:24:26,660 o con la que sea. 629 00:24:28,440 --> 00:24:31,880 esto es lo de la otra clase 630 00:24:31,880 --> 00:24:34,339 y esto es 631 00:24:34,339 --> 00:24:36,099 ahora ya vamos a implementar 632 00:24:36,099 --> 00:24:37,119 mi método escaparate 633 00:24:37,119 --> 00:24:39,539 se ha quedado así, muy sencillito 634 00:24:39,539 --> 00:24:42,059 como veis, lo voy a bajar aquí para que se vea mejor el string 635 00:24:42,059 --> 00:24:54,250 vale, este es mi método 636 00:24:54,250 --> 00:24:55,789 cambiar escaparate 637 00:24:55,789 --> 00:24:58,150 son dos subdates 638 00:24:58,150 --> 00:25:00,849 que quiero que se hagan 639 00:25:00,849 --> 00:25:02,829 o los dos o ninguno 640 00:25:02,829 --> 00:25:04,329 por eso es una transacción 641 00:25:04,329 --> 00:25:07,549 esto igual 642 00:25:07,549 --> 00:25:09,470 lo podría haber hecho con 643 00:25:09,470 --> 00:25:11,329 jdbc puro 644 00:25:11,329 --> 00:25:13,869 con jdbc pues haciendo 645 00:25:13,869 --> 00:25:14,650 la sentencia 646 00:25:14,650 --> 00:25:17,089 y ya está 647 00:25:17,089 --> 00:25:21,990 vale, pues si lo hago con jdbc puro 648 00:25:21,990 --> 00:25:23,650 entonces me tengo que preocupar de 649 00:25:23,650 --> 00:25:24,990 poner arriba 650 00:25:24,990 --> 00:25:27,269 de la conexión 651 00:25:27,269 --> 00:25:29,730 jdbc set autocommit false 652 00:25:29,730 --> 00:25:31,890 porque si no por defecto 653 00:25:31,890 --> 00:25:33,869 te hace un commit por cada 654 00:25:33,869 --> 00:25:36,049 sentencia. Y cuando ya he terminado 655 00:25:36,049 --> 00:25:38,210 poner conexión.com 656 00:25:38,210 --> 00:25:39,509 ¿Vale? 657 00:25:40,390 --> 00:25:42,130 Pero claro, lo tengo que ir poniendo yo a mano 658 00:25:42,130 --> 00:25:43,970 me tengo que ir preocupando, el código sigue 659 00:25:43,970 --> 00:25:45,589 haciéndose gordo y gordo y gordo, etc. 660 00:25:46,190 --> 00:25:46,369 ¿Vale? 661 00:25:49,309 --> 00:25:49,630 Exacto. 662 00:25:51,470 --> 00:25:51,789 Justo. 663 00:25:51,869 --> 00:25:53,710 Cuando él dice, consolida lo que has hecho 664 00:25:53,710 --> 00:25:55,890 si todo ha ido bien. Consolida 665 00:25:55,890 --> 00:25:57,650 lo que has hecho si has llegado hasta aquí, claro. 666 00:25:58,069 --> 00:25:59,910 Pues si no has llegado hasta aquí, te has ido por un catch 667 00:25:59,910 --> 00:26:01,089 entonces habrá hecho un rollback. 668 00:26:01,789 --> 00:26:03,289 Vale, pues esta es 669 00:26:03,289 --> 00:26:06,210 el método, y ya está, no tiene más esta implementación 670 00:26:06,210 --> 00:26:06,670 entonces 671 00:26:06,670 --> 00:26:08,430 ¿qué? 672 00:26:08,430 --> 00:26:08,509 ¿qué? 673 00:26:14,170 --> 00:26:20,089 quedan 19 674 00:26:20,089 --> 00:26:30,309 en 19 minutos nos da tiempo 675 00:26:30,309 --> 00:26:31,710 luego ya 676 00:26:31,710 --> 00:26:34,269 lo consolidáis en casa 677 00:26:34,269 --> 00:26:36,569 y el próximo día 678 00:26:36,569 --> 00:26:37,710 pues volvemos sobre ello 679 00:26:37,710 --> 00:26:38,369 y seguimos 680 00:26:38,369 --> 00:26:40,369 volvemos sobre ello 681 00:26:40,369 --> 00:26:40,910 el próximo día 682 00:26:40,910 --> 00:26:42,109 para hacer una revisión general 683 00:26:42,109 --> 00:26:43,029 vale 684 00:26:43,029 --> 00:26:44,990 bueno 685 00:26:44,990 --> 00:26:45,710 ¿está el método? 686 00:26:50,509 --> 00:26:51,710 algunos escriben muy lento 687 00:26:51,710 --> 00:26:52,750 y otros escriben muy rápido 688 00:26:52,750 --> 00:26:55,890 córtate la cabeza 689 00:26:55,890 --> 00:26:57,369 pero aunque te tumbes 690 00:26:57,369 --> 00:26:58,490 en la cabeza es suficiente 691 00:26:58,490 --> 00:27:13,869 El próximo día nos va a funcionar a todos 692 00:27:13,869 --> 00:27:18,349 Bueno, vale, pues ya está 693 00:27:18,349 --> 00:27:19,009 Entonces 694 00:27:19,009 --> 00:27:21,250 Esto 695 00:27:21,250 --> 00:27:23,849 Esto tiene que ser una transacción 696 00:27:23,849 --> 00:27:25,009 Pero 697 00:27:25,009 --> 00:27:27,349 La transacción 698 00:27:27,349 --> 00:27:29,750 no se marca aquí. 699 00:27:29,890 --> 00:27:32,190 No es aquí donde hay que decirle 700 00:27:32,190 --> 00:27:34,170 al gestor de transacciones de Sprint 701 00:27:34,170 --> 00:27:35,269 que esto es una transacción. 702 00:27:36,289 --> 00:27:37,329 ¿Dónde hay que hacerlo? 703 00:27:38,390 --> 00:27:39,369 En el servicio. 704 00:27:40,269 --> 00:27:42,529 Porque el servicio realmente es el señor 705 00:27:42,529 --> 00:27:43,970 que hace las cosas. 706 00:27:45,250 --> 00:27:46,210 Es el que hace las cosas. 707 00:27:46,450 --> 00:27:48,089 El servicio llama a este 708 00:27:48,089 --> 00:27:49,849 y a otros si hacen falta. 709 00:27:50,410 --> 00:27:51,529 Pero él es el que hace las cosas. 710 00:27:52,069 --> 00:27:54,009 Pues en el servicio es donde hay que marcar. 711 00:27:54,130 --> 00:27:55,910 Oye, esto que te he encargado es una transacción. 712 00:27:55,910 --> 00:27:58,650 Vale, pues vámonos a implementar el servicio 713 00:27:58,650 --> 00:28:01,190 Venga, el de implementación ya está 714 00:28:01,190 --> 00:28:14,190 Porque le he metido el enter 715 00:28:14,190 --> 00:28:15,549 Para que quepa en la misma línea 716 00:28:15,549 --> 00:28:16,930 Para que quepa en la pantalla 717 00:28:16,930 --> 00:28:18,769 Es que si no esto se iba a ir muy lejos 718 00:28:18,769 --> 00:28:24,910 Bueno, le he dado el enter y me lo ha metido solo 719 00:28:24,910 --> 00:28:27,309 Me lo ha puesto el solo 720 00:28:27,309 --> 00:28:31,029 me lo ha puesto el solito 721 00:28:31,029 --> 00:28:32,049 y queda bonito así 722 00:28:32,049 --> 00:28:34,190 vale, pues ahora 723 00:28:34,190 --> 00:28:37,190 os hacéis el paquete servicio 724 00:28:37,190 --> 00:28:38,990 con dando 725 00:28:38,990 --> 00:28:39,809 service 726 00:28:39,809 --> 00:28:42,029 y vamos a hacer el servicio 727 00:28:42,029 --> 00:28:46,319 el servicio 728 00:28:46,319 --> 00:28:48,460 pues ventaservice 729 00:28:48,460 --> 00:28:52,920 que necesita su venta 730 00:28:52,920 --> 00:28:53,420 dado 731 00:28:53,420 --> 00:28:56,720 una instancia de venta dado, claro 732 00:28:56,720 --> 00:28:59,700 y ahora ya 733 00:28:59,700 --> 00:29:04,019 el método 734 00:29:04,019 --> 00:29:05,640 ¿vale? 735 00:29:07,640 --> 00:29:09,619 el método cambiar escaparate 736 00:29:09,619 --> 00:29:11,980 será simplemente, llamo yo a mi 737 00:29:11,980 --> 00:29:14,220 venta DAO, cambiar escaparate 738 00:29:14,220 --> 00:29:15,160 de uno por y de dos 739 00:29:15,160 --> 00:29:17,839 ese será mi método cambiar escaparate 740 00:29:17,839 --> 00:29:18,799 ¿verdad? 741 00:29:19,539 --> 00:29:21,960 cambiar escaparate con transacción 742 00:29:21,960 --> 00:29:23,039 lo he llamado para que 743 00:29:23,039 --> 00:29:24,460 pero bueno 744 00:29:24,460 --> 00:29:27,619 le pasan los dos id 745 00:29:27,619 --> 00:29:29,640 y él llama al DAO, cambia la etapa, ¿eh? 746 00:29:30,200 --> 00:29:30,460 Vale. 747 00:29:32,220 --> 00:29:33,539 Ya está, este sería el método. 748 00:29:35,240 --> 00:29:36,619 Vale, esto lo he puesto aquí 749 00:29:36,619 --> 00:29:38,839 para forzar que falle 750 00:29:38,839 --> 00:29:40,500 y así veamos qué hace el rollback. 751 00:29:40,619 --> 00:29:41,920 Pero bueno, ahora mismo olvidaros de esto. 752 00:29:43,359 --> 00:29:45,240 Vale, entonces, ahora este método 753 00:29:45,240 --> 00:29:46,859 es el que queremos 754 00:29:46,859 --> 00:29:50,359 que Spring trate como una transacción. 755 00:29:51,119 --> 00:29:54,079 O hace todo y lo termina de principio a fin 756 00:29:54,079 --> 00:29:56,579 o si no lo terminas de principio a fin 757 00:29:56,579 --> 00:29:57,519 sin excepciones, 758 00:29:57,619 --> 00:30:14,640 No hagas nada, como si nada hubiera pasado. Ahí es donde se hacen las transacciones, en los servicios, y así es como tenemos que diseñar la aplicación. Servicios que hacen las cosas, si yo quiero que algo se haga como una transacción, es un servicio, y ese servicio ahora lo anoto como transaccional. 759 00:30:14,640 --> 00:30:16,880 si no lo anoto 760 00:30:16,880 --> 00:30:17,960 como transaccional 761 00:30:17,960 --> 00:30:20,140 esto no es una transacción 762 00:30:20,140 --> 00:30:21,960 luego que se hace parte 763 00:30:21,960 --> 00:30:24,740 de lo que hay aquí dentro, esa parte se queda 764 00:30:24,740 --> 00:30:27,160 en la base de datos, que sale la excepción 765 00:30:27,160 --> 00:30:28,980 después, esa parte no porque ha salido 766 00:30:28,980 --> 00:30:30,839 excepción, pero en ningún momento se va a hacer 767 00:30:30,839 --> 00:30:32,880 un rollback, si yo lo anoto 768 00:30:32,880 --> 00:30:34,039 como transaccional 769 00:30:34,039 --> 00:30:36,440 o se hace todo enterito 770 00:30:36,440 --> 00:30:38,799 o si falla cualquier punto 771 00:30:38,799 --> 00:30:40,460 pum, para atrás, rollback 772 00:30:40,460 --> 00:30:43,099 ¿vale? transaccional lo podéis importar 773 00:30:43,099 --> 00:30:44,559 para dependencias que hayáis puesto y ya está 774 00:30:44,559 --> 00:30:47,839 Ahora volvemos arriba otra vez un poquito 775 00:30:47,839 --> 00:30:49,380 Para esta anotación 776 00:30:49,380 --> 00:30:51,440 De nuevo, este tío 777 00:30:51,440 --> 00:30:53,839 Necesita de otros 778 00:30:53,839 --> 00:30:55,799 Luego, uff 779 00:30:55,799 --> 00:30:57,460 Perdona, sprint 780 00:30:57,460 --> 00:31:00,180 Ocúpate tú de las inyecciones 781 00:31:00,180 --> 00:31:01,160 De objetos 782 00:31:01,160 --> 00:31:03,680 Cuando ventas el B&T 1 783 00:31:03,680 --> 00:31:05,940 El singleton que esté por ahí 784 00:31:05,940 --> 00:31:08,039 Te coges el venta dado que esté por ahí 785 00:31:08,039 --> 00:31:09,980 Implementación y lo metes aquí dentro 786 00:31:09,980 --> 00:31:12,220 Ocúpate tú, no voy a seguir yo 787 00:31:12,220 --> 00:31:14,119 El rastro de que objetos 788 00:31:14,119 --> 00:31:16,079 he instanciado para 789 00:31:16,079 --> 00:31:17,839 irlos enchufando. Yo no voy a seguir el rastro. 790 00:31:18,140 --> 00:31:19,759 Te anoto. ¿Vale? 791 00:31:20,519 --> 00:31:21,980 Anotación genérica para 792 00:31:21,980 --> 00:31:23,680 bin que tiene que registrar 793 00:31:23,680 --> 00:31:25,920 sprint. Component, 794 00:31:26,079 --> 00:31:28,079 otra vez. Pero claro, hay 795 00:31:28,079 --> 00:31:29,599 una subclase de component 796 00:31:29,599 --> 00:31:31,779 que son los que son servicios. 797 00:31:32,720 --> 00:31:33,759 Los que son servicios 798 00:31:33,759 --> 00:31:36,119 son una clase de 799 00:31:36,119 --> 00:31:38,079 bins especiales que ganan 800 00:31:38,079 --> 00:31:39,700 funcionalidad específica. 801 00:31:40,119 --> 00:31:42,039 Pues la anotación service dice, tú eres un 802 00:31:42,039 --> 00:31:43,819 bin de sprint, te va a gestionar sprint, 803 00:31:43,819 --> 00:31:44,819 a la hora de inyectarte 804 00:31:44,819 --> 00:31:46,660 pero además eres un servicio 805 00:31:46,660 --> 00:31:48,359 con lo cual ganas 806 00:31:48,359 --> 00:31:50,740 esa fuerza que tienen los servicios 807 00:31:50,740 --> 00:31:52,960 como tener cosas transaccionales dentro, etc 808 00:31:52,960 --> 00:31:55,180 ¿vale? y ya está 809 00:31:55,180 --> 00:31:56,480 y nuestro service ya está 810 00:31:56,480 --> 00:32:02,059 ¿vale? entonces 811 00:32:02,059 --> 00:32:04,900 este throw si queréis ponerlo ya 812 00:32:04,900 --> 00:32:08,119 esto es que yo he forzado 813 00:32:08,119 --> 00:32:10,480 que salga mal el método 814 00:32:10,480 --> 00:32:12,299 porque ¿cómo lo voy a forzar 815 00:32:12,299 --> 00:32:13,599 si lo único que hago es un nubdate? 816 00:32:13,680 --> 00:32:14,799 no voy a romper la base de datos 817 00:32:14,799 --> 00:32:15,839 es muy complicado 818 00:32:15,839 --> 00:32:18,420 entonces he forzado lanzando una excepción 819 00:32:18,420 --> 00:32:21,940 que una run time 820 00:32:21,940 --> 00:32:24,319 acordaos, porque si no es run time me va a obligar 821 00:32:24,319 --> 00:32:25,819 a hacer un try catch y un throw 822 00:32:25,819 --> 00:32:28,079 entonces, que sea run time 823 00:32:28,079 --> 00:32:30,119 porque si no, no hago nada 824 00:32:30,119 --> 00:32:32,160 he forzado que algo salga mal 825 00:32:32,160 --> 00:32:33,779 entonces 826 00:32:33,779 --> 00:32:35,960 este método, al ser transactional 827 00:32:35,960 --> 00:32:37,140 y como se va a estropear 828 00:32:37,140 --> 00:32:39,460 no me va a cambiar el escaparate 829 00:32:39,460 --> 00:32:41,900 no me lo va a cambiar, sin embargo 830 00:32:41,900 --> 00:32:43,480 si yo quitar a transactional 831 00:32:43,480 --> 00:32:44,940 aunque 832 00:32:44,940 --> 00:32:47,259 me dé aquí un error 833 00:32:47,259 --> 00:32:48,940 me va a cambiar el escaparate 834 00:32:48,940 --> 00:32:51,519 luego la diferencia entre poner transactional y no ponerlo 835 00:32:51,519 --> 00:32:53,240 es enorme, es muy grandota 836 00:32:53,240 --> 00:32:55,359 de cambiar el escaparate 837 00:32:55,359 --> 00:32:57,059 correctamente a no cambiarlo 838 00:32:57,059 --> 00:32:59,259 porque se ha roto el método con lo cual 839 00:32:59,259 --> 00:33:00,980 el transactional me ha hecho un rollback 840 00:33:00,980 --> 00:33:03,339 vale, pues ahora ya vamos a hacernos 841 00:33:03,339 --> 00:33:05,400 bueno, cogeos el 842 00:33:05,400 --> 00:33:07,420 objeto este de conexión 843 00:33:07,420 --> 00:33:08,500 lógicamente para 844 00:33:08,500 --> 00:33:12,740 para generar el JDF template 845 00:33:12,740 --> 00:33:15,319 vale, no lo copié 846 00:33:15,319 --> 00:33:16,240 vamos a hacerlo limpio 847 00:33:16,240 --> 00:33:18,099 ¿Por qué ahora qué? 848 00:33:18,160 --> 00:33:18,720 Un segundito 849 00:33:18,720 --> 00:33:21,700 Porque ahora el JDBC template 850 00:33:21,700 --> 00:33:23,440 Es un objeto 851 00:33:23,440 --> 00:33:25,680 Que necesita ser inyectado 852 00:33:25,680 --> 00:33:26,859 Para el 853 00:33:26,859 --> 00:33:29,980 Para el de la implementación 854 00:33:29,980 --> 00:33:31,380 Con lo cual 855 00:33:31,380 --> 00:33:33,480 Ahora yo no me hago los singleton a mano 856 00:33:33,480 --> 00:33:34,619 Como me los he hecho antes 857 00:33:34,619 --> 00:33:36,279 No me hago mi get JDBC template 858 00:33:36,279 --> 00:33:37,519 No me hago ni get connection 859 00:33:37,519 --> 00:33:39,019 Para eso tengo a Spring 860 00:33:39,019 --> 00:33:43,160 Pero claro, para eso 861 00:33:43,160 --> 00:33:44,859 Tengo que 862 00:33:44,859 --> 00:33:46,000 crearme 863 00:33:46,000 --> 00:33:49,380 esta clase, mi clase conexión a la cambia 864 00:33:49,380 --> 00:33:50,059 vale 865 00:33:50,059 --> 00:33:52,079 entonces 866 00:33:52,079 --> 00:33:55,440 ahora, no, no, no, esta no la vais a copiar 867 00:33:55,440 --> 00:33:56,180 porque es una locura 868 00:33:56,180 --> 00:33:59,400 esta os la voy a subir ahora mismo y la descargáis 869 00:33:59,400 --> 00:34:01,599 y ahora la entendemos porque aquí es donde os dije 870 00:34:01,599 --> 00:34:03,220 no queréis sprint, pues ahora vais a entender 871 00:34:03,220 --> 00:34:04,460 todas y cada una 872 00:34:04,460 --> 00:34:06,920 de las anotaciones que ha sido necesario poner 873 00:34:06,920 --> 00:34:08,920 un segundito 874 00:34:08,920 --> 00:34:16,199 si, se lo voy a subir luego, pero es que 875 00:34:16,199 --> 00:34:17,880 ahora quiero que vosotros lo ejecutéis y lo probéis 876 00:34:17,880 --> 00:34:20,079 antes de irnos. Entonces, lo necesitáis. 877 00:34:22,900 --> 00:34:24,079 El proyecto le voy a subir ahora 878 00:34:24,079 --> 00:34:26,199 todo. No, no hay problema. 879 00:34:31,840 --> 00:34:33,119 Sí, está todo grabando. 880 00:34:35,360 --> 00:34:36,139 Vale, a ver, vamos a 881 00:34:36,139 --> 00:34:38,340 hacer una cosa. Como va a ser mi cuarto enseguida, 882 00:34:39,139 --> 00:34:40,219 vamos a explicarlo 883 00:34:40,219 --> 00:34:42,079 y como luego voy a subir el proyecto, 884 00:34:42,960 --> 00:34:44,019 pues ya tenéis el proyecto 885 00:34:44,019 --> 00:34:46,239 y todo eso. Y ya revisamos el próximo día 886 00:34:46,239 --> 00:34:48,099 todo lo que se haya 887 00:34:48,099 --> 00:34:49,139 quedado ahí. Vale. 888 00:34:50,079 --> 00:34:52,019 Bueno, pues ahora, mi 889 00:34:52,019 --> 00:34:54,000 singleton que me creaba el JDBC template 890 00:34:54,000 --> 00:34:55,960 a mano y todo eso, ese singleton ha 891 00:34:55,960 --> 00:34:58,219 desaparecido. Ahora tenemos esta clase. 892 00:34:59,019 --> 00:34:59,699 Esta clase 893 00:34:59,699 --> 00:35:01,460 sustituye 894 00:35:01,460 --> 00:35:03,820 al antiguo XML que me dice 895 00:35:03,820 --> 00:35:05,760 necesito esto y todo esto y todo esto. 896 00:35:06,300 --> 00:35:08,139 ¿Vale? Que es lo que yo he hecho con mi singleton. 897 00:35:08,719 --> 00:35:09,880 Te doy un get para sacar esto, 898 00:35:09,940 --> 00:35:11,699 te doy un get para sacar esto, te doy un get para sacar esto. 899 00:35:12,019 --> 00:35:13,659 Pues ahora, eso, con sprint 900 00:35:13,659 --> 00:35:15,920 tú le dices a Spring, esto es lo que necesito 901 00:35:15,920 --> 00:35:17,480 antes en un XML 902 00:35:17,480 --> 00:35:19,480 ahora no, ahora 903 00:35:19,480 --> 00:35:22,139 te haces una clase 904 00:35:22,139 --> 00:35:23,880 y puedes anotar los bin 905 00:35:23,880 --> 00:35:24,659 que te hacen falta 906 00:35:24,659 --> 00:35:27,539 un bin 907 00:35:27,539 --> 00:35:29,480 es un objeto, cualquiera 908 00:35:29,480 --> 00:35:32,460 el significado 909 00:35:32,460 --> 00:35:34,019 más básico de bin 910 00:35:34,019 --> 00:35:35,699 es un objeto normal y corriente 911 00:35:35,699 --> 00:35:36,300 que anda por ahí 912 00:35:36,300 --> 00:35:36,960 vale 913 00:35:36,960 --> 00:35:48,519 con el término NetBeans en general 914 00:35:48,519 --> 00:35:50,840 no sé de dónde, NetBeans, no sé de dónde 915 00:35:50,840 --> 00:35:52,519 sacó NetBeans 916 00:35:52,519 --> 00:35:54,159 para llamarlo Beans, no lo sé 917 00:35:54,159 --> 00:35:55,619 no lo he buscado nunca 918 00:35:55,619 --> 00:35:57,800 vale, pues entonces 919 00:35:57,800 --> 00:36:00,320 necesitamos 920 00:36:00,320 --> 00:36:02,460 el objeto DataSource 921 00:36:02,460 --> 00:36:04,039 porque este 922 00:36:04,039 --> 00:36:05,619 el DataSource es el pool 923 00:36:05,619 --> 00:36:08,599 o podría ser la conexión normal que hemos usado en el otro 924 00:36:08,599 --> 00:36:10,599 proyecto, que era el DriverManagerDataSource. 925 00:36:11,219 --> 00:36:12,739 Por si os acordáis, en otro proyecto 926 00:36:12,739 --> 00:36:14,579 hemos usado un DataSource con 927 00:36:14,579 --> 00:36:16,320 conexión única para JDBC 928 00:36:16,320 --> 00:36:18,519 que era DriverManagerDataSource. 929 00:36:19,059 --> 00:36:20,800 Me da igual. Aquí tengo un pool. 930 00:36:20,900 --> 00:36:22,300 Ambos son DataSources igual. 931 00:36:22,980 --> 00:36:24,639 ¿Vale? Que son los que necesita el 932 00:36:24,639 --> 00:36:26,860 JDBC Template. El JDBC 933 00:36:26,860 --> 00:36:28,679 Template es DataSource. Me da igual que sea un pool 934 00:36:28,679 --> 00:36:30,559 como aquí, que 935 00:36:30,559 --> 00:36:32,400 sea un DriverManagerDataSource 936 00:36:32,400 --> 00:36:34,639 como en el proyecto que hemos visto antes. Me da igual. 937 00:36:35,139 --> 00:36:36,019 Bueno, pues entonces 938 00:36:36,019 --> 00:36:37,840 aquí tengo 939 00:36:37,840 --> 00:36:42,800 este método 940 00:36:42,800 --> 00:36:45,579 que me devuelve el datasource 941 00:36:45,579 --> 00:36:47,300 que me lo devuelve 942 00:36:47,300 --> 00:36:48,840 me lo devuelve así 943 00:36:48,840 --> 00:36:50,960 y yo le anoto como bin 944 00:36:50,960 --> 00:36:52,199 con esto le digo a Spring 945 00:36:52,199 --> 00:36:55,239 oye, este tú lo instancias 946 00:36:55,239 --> 00:36:56,199 cuando haga falta 947 00:36:56,199 --> 00:36:58,840 consérvalo como único 948 00:36:58,840 --> 00:37:00,280 no lo multipliques 949 00:37:00,280 --> 00:37:02,139 consérvalo como único 950 00:37:02,139 --> 00:37:04,320 no tengo que hacer el diferente de null 951 00:37:04,320 --> 00:37:06,699 consérvalo como único 952 00:37:06,699 --> 00:37:08,159 y méteselo a quien lo necesite. 953 00:37:08,800 --> 00:37:11,159 Vale, el data source nos hace falta para el JDBC template. 954 00:37:11,780 --> 00:37:13,119 Vale, ¿qué más nos hace falta? 955 00:37:14,280 --> 00:37:17,280 El JDBC template que me irá el data source de arriba. 956 00:37:18,900 --> 00:37:22,280 Pues ya está, el JDBC template me devuelve el JDBC template. 957 00:37:22,579 --> 00:37:23,519 Trátalo como bin. 958 00:37:24,860 --> 00:37:29,719 Aquí no tenemos el problema este que decías tú, Daniel, antes. 959 00:37:30,280 --> 00:37:34,800 Porque aquí yo devuelvo el objeto y con la anotación bin, 960 00:37:34,800 --> 00:37:36,480 al manejarlo Spring como bin 961 00:37:36,480 --> 00:37:38,260 él ya se preocupa de que sea único 962 00:37:38,260 --> 00:37:39,500 de no multiplicarlo de todo 963 00:37:39,500 --> 00:37:42,639 no tengo yo que programarlo específicamente 964 00:37:42,639 --> 00:37:44,980 vale, ¿y qué más objetos 965 00:37:44,980 --> 00:37:47,400 nos hacen falta para esta aplicación? 966 00:37:48,000 --> 00:37:49,239 el gestor de transacciones 967 00:37:49,239 --> 00:37:50,739 porque vamos a usar transactional 968 00:37:50,739 --> 00:37:52,820 con transacción, que es este objeto 969 00:37:52,820 --> 00:37:54,920 que usa el data source 970 00:37:54,920 --> 00:37:55,400 también 971 00:37:55,400 --> 00:37:57,940 también es 3 972 00:37:57,940 --> 00:38:00,760 y aparte está usando la anotación de la anterior 973 00:38:00,760 --> 00:38:02,239 claro, entonces 974 00:38:02,239 --> 00:38:04,480 Spring va a manejar, aparte de lo que yo he 975 00:38:04,480 --> 00:38:06,079 anotado con repositor y service. 976 00:38:06,639 --> 00:38:08,139 El de implementación y el servicio. 977 00:38:08,380 --> 00:38:10,500 Aparte de esos, Spring va a 978 00:38:10,500 --> 00:38:12,420 manejar estos para instanciarlos 979 00:38:12,420 --> 00:38:14,440 cuando haga falta. ¿Por qué? Porque los 980 00:38:14,440 --> 00:38:16,420 necesito. Los necesitan mis clases. 981 00:38:17,340 --> 00:38:18,619 Necesitan el data source 982 00:38:18,619 --> 00:38:20,480 porque el data source del JDF template 983 00:38:20,480 --> 00:38:22,940 y tal esto. Entonces, los necesito. 984 00:38:23,460 --> 00:38:24,519 Pues los tengo que declarar 985 00:38:24,519 --> 00:38:26,539 en algún sitio. ¿En un XML? 986 00:38:27,059 --> 00:38:28,340 Bueno, es una posibilidad. 987 00:38:28,880 --> 00:38:30,420 ¿En una clase aparte anotándolos con 988 00:38:30,420 --> 00:38:32,480 BIM? Vale. Los declaro porque 989 00:38:32,480 --> 00:38:34,539 los necesito. Anoto con bin, 990 00:38:34,719 --> 00:38:36,300 tú los gestionas cuando hagan falta. 991 00:38:36,820 --> 00:38:37,539 ¿Vale? Aquí están. 992 00:38:38,340 --> 00:38:40,079 En esta clase. ¿Vale? 993 00:38:40,400 --> 00:38:42,360 Luego esta clase sustituye 994 00:38:42,360 --> 00:38:43,699 a mi 995 00:38:43,699 --> 00:38:45,659 singleton de antes. 996 00:38:46,659 --> 00:38:48,440 Y ahora, le tengo 997 00:38:48,440 --> 00:38:50,440 que poner anotaciones para que Sprint sepa 998 00:38:50,440 --> 00:38:51,599 de qué va esto. 999 00:38:52,480 --> 00:38:53,960 La anotación configuration 1000 00:38:53,960 --> 00:38:56,320 es para decirle, oye, 1001 00:38:56,500 --> 00:38:58,340 lo que te voy a meter aquí son bins para ti 1002 00:38:58,340 --> 00:39:00,519 para gestionar. Te estoy configurando. 1003 00:39:01,199 --> 00:39:02,139 Te estoy configurando. 1004 00:39:03,099 --> 00:39:05,500 Esta es una clase de configuración. 1005 00:39:05,960 --> 00:39:08,219 Estoy configurando lo que van a ser bins. 1006 00:39:09,159 --> 00:39:10,900 Ahora, siguiente anotación. 1007 00:39:12,760 --> 00:39:16,260 Paquete base a partir del cual vas a usar tú 1008 00:39:16,260 --> 00:39:18,320 para buscar esos bins que yo te doy. 1009 00:39:18,739 --> 00:39:20,559 Me he puesto con NANDOS porque es mi raíz. 1010 00:39:21,199 --> 00:39:25,099 Si yo anotara aquí un bin que no cuelga de aquí, 1011 00:39:25,760 --> 00:39:26,599 no lo va a encontrar. 1012 00:39:27,780 --> 00:39:31,119 Entonces, aquí pongo la base donde él va a hacer su escaneo. 1013 00:39:31,119 --> 00:39:37,059 Y ahora esto es simplemente 1014 00:39:37,059 --> 00:39:39,059 Para que Spring 1015 00:39:39,059 --> 00:39:41,119 Habilite la gestión de transacciones 1016 00:39:41,119 --> 00:39:42,820 Y por tanto pues 1017 00:39:42,820 --> 00:39:45,059 Mire esto, si está 1018 00:39:45,059 --> 00:39:46,820 Lo mire, para que lo tengan en cuenta 1019 00:39:46,820 --> 00:39:49,099 Esto solamente ahora es nuestro proyecto 1020 00:39:49,099 --> 00:39:51,039 Específico porque vamos a usar transacciones 1021 00:39:51,039 --> 00:39:53,059 Esto es por específico nuestro 1022 00:39:53,059 --> 00:39:55,079 De transacciones, pero esto es 1023 00:39:55,079 --> 00:39:55,880 Básico de Spring 1024 00:39:55,880 --> 00:39:58,920 Aquí le dices clase de configuración 1025 00:39:58,920 --> 00:40:00,900 Te digo cuáles son los bins que vas a 1026 00:40:00,900 --> 00:40:02,360 necesitar inyectar automáticamente 1027 00:40:02,360 --> 00:40:04,960 a partir de qué paquete 1028 00:40:04,960 --> 00:40:06,900 base de este, a partir de ahí, bla, bla, bla. 1029 00:40:07,360 --> 00:40:08,880 Y ya está. Y aquí pones 1030 00:40:08,880 --> 00:40:10,840 los bins que hacen falta. Todo 1031 00:40:10,840 --> 00:40:13,000 lo que no esté anotado con 1032 00:40:13,000 --> 00:40:14,900 bin aquí o en 1033 00:40:14,900 --> 00:40:16,480 su sitio correspondiente 1034 00:40:16,480 --> 00:40:19,139 con la anotación 1035 00:40:19,139 --> 00:40:20,800 que sea, component, repository, 1036 00:40:21,340 --> 00:40:22,900 service, Spring 1037 00:40:22,900 --> 00:40:24,780 no lo gestiona. Te tienes que encargar tú de 1038 00:40:24,780 --> 00:40:26,860 instanciarlo e inyectárselo a quien haga falta. 1039 00:40:27,400 --> 00:40:28,980 ¿Vale? Bueno, pues 1040 00:40:28,980 --> 00:40:30,800 ya está. Ahora ya lo único que tenemos es un 1041 00:40:30,800 --> 00:40:32,980 main. Un main y hacer 1042 00:40:32,980 --> 00:40:33,760 nuestra llamada. 1043 00:40:35,079 --> 00:40:35,320 ¿Vale? 1044 00:40:36,860 --> 00:40:38,780 Pues ya está. Ahora 1045 00:40:38,780 --> 00:40:39,619 nuestro main. 1046 00:40:43,619 --> 00:40:44,380 Nuestro main. 1047 00:40:44,719 --> 00:40:46,159 Una aplicación con Spring 1048 00:40:46,159 --> 00:40:48,960 necesita un momento 1049 00:40:48,960 --> 00:40:50,820 que ya está que no, que nos falta el main, 1050 00:40:50,900 --> 00:40:52,099 que nos faltan cuatro minutos. 1051 00:40:53,039 --> 00:40:54,559 Juan, ¿por qué te levantas? 1052 00:40:56,960 --> 00:40:58,460 Pues no puedes enchufar después. 1053 00:40:58,980 --> 00:41:02,320 A ver, el main. 1054 00:41:03,820 --> 00:41:04,900 Sí, sí, sí, sí. 1055 00:41:05,559 --> 00:41:06,099 Que sí. 1056 00:41:08,099 --> 00:41:11,440 Sí, sí, de tener grabación está grabando. 1057 00:41:12,719 --> 00:41:15,039 Porque se han hecho pequeñitos los estos. 1058 00:41:16,699 --> 00:41:20,699 Vale, entonces, la aplicación Spring necesita el jefe, 1059 00:41:20,960 --> 00:41:23,079 el jefe de todos, que es el contexto. 1060 00:41:24,079 --> 00:41:27,619 El jefe saca el BIM principal, el único que vas a usar tú. 1061 00:41:27,619 --> 00:41:29,280 vamos a usar service, ya está 1062 00:41:29,280 --> 00:41:30,639 pues saco el service 1063 00:41:30,639 --> 00:41:33,659 y con este get bin 1064 00:41:33,659 --> 00:41:35,559 sacas el service y ya sprint 1065 00:41:35,559 --> 00:41:37,599 se encarga de hacer service, meterle todo 1066 00:41:37,599 --> 00:41:39,780 instanciar la implementación, instanciar 1067 00:41:39,780 --> 00:41:41,820 todo lo que haga falta, yo tengo mi service 1068 00:41:41,820 --> 00:41:42,880 que es lo único que voy a usar 1069 00:41:42,880 --> 00:41:45,980 y ya sprint saca todo lo que haga falta 1070 00:41:45,980 --> 00:41:47,940 ¿vale? y ahora ya 1071 00:41:47,940 --> 00:41:49,559 llamo al método, cambiar 1072 00:41:49,559 --> 00:41:50,079 escaparate 1073 00:41:50,079 --> 00:41:52,239 ahora 1074 00:41:52,239 --> 00:41:55,639 esto lo podemos ejecutar 1075 00:41:55,639 --> 00:41:57,300 lo vamos a ejecutar por sinergia a la cafetería 1076 00:41:57,300 --> 00:42:00,940 veríamos en la base de datos 1077 00:42:00,940 --> 00:42:02,000 que no me lo va a hacer 1078 00:42:02,000 --> 00:42:04,199 porque hay un error, luego no se va a hacer 1079 00:42:04,199 --> 00:42:06,960 pero si quitamos la anotación transaccional 1080 00:42:06,960 --> 00:42:08,480 ¿vale? 1081 00:42:08,519 --> 00:42:10,300 por ejemplo, venga, voy a hacer rápido 1082 00:42:10,300 --> 00:42:13,099 voy a cambiar el 5 por el 6 1083 00:42:13,099 --> 00:42:14,840 entonces 1084 00:42:14,840 --> 00:42:15,579 esto sería 1085 00:42:15,579 --> 00:42:24,409 bueno, pero esto no tiene 1086 00:42:24,409 --> 00:42:25,429 la restricción esta 1087 00:42:25,429 --> 00:42:31,230 Aquí no lo estás validando 1088 00:42:31,230 --> 00:42:33,329 Vale, pues 1089 00:42:33,329 --> 00:42:35,269 Finish 1090 00:42:35,269 --> 00:42:37,909 Vale, entonces yo ejecuto 1091 00:42:37,909 --> 00:42:38,570 Este main 1092 00:42:38,570 --> 00:42:48,780 Vale, esto todo lo de sprint 1093 00:42:48,780 --> 00:42:50,559 Que te cuenta aquí la hostia en bote 1094 00:42:50,559 --> 00:42:51,800 Vale 1095 00:42:51,800 --> 00:42:52,679 Y 1096 00:42:52,679 --> 00:42:56,300 Lo hace sprint, son los logs de sprint 1097 00:42:56,300 --> 00:42:58,280 Vale, y me ha hecho un rollback 1098 00:42:58,280 --> 00:42:59,400 Porque el método dio error 1099 00:42:59,400 --> 00:43:01,980 Con lo cual no me ha cambiado el escaparate 1100 00:43:01,980 --> 00:43:02,980 No me lo ha cambiado 1101 00:43:02,980 --> 00:43:06,159 sin embargo, si yo aquí quitara 1102 00:43:06,159 --> 00:43:08,139 la transactional 1103 00:43:08,139 --> 00:43:09,719 la quitara aquí del service 1104 00:43:09,719 --> 00:43:13,519 la quitara 1105 00:43:13,519 --> 00:43:18,199 aquí sale el error, pero es que esto ya lo ha hecho 1106 00:43:18,199 --> 00:43:20,239 eso ya lo ha hecho porque no está trabajando 1107 00:43:20,239 --> 00:43:22,420 como transacciones, entonces aquí 1108 00:43:22,420 --> 00:43:24,280 si es que como no sé 1109 00:43:24,280 --> 00:43:26,219 en qué orden cambio uno de otro, pues no sé 1110 00:43:26,219 --> 00:43:30,300 aquí 1111 00:43:30,300 --> 00:43:32,179 vale 1112 00:43:32,179 --> 00:43:35,119 ¿veis? me lo ha cambiado 1113 00:43:35,119 --> 00:43:36,719 no ha funcionado como 1114 00:43:36,719 --> 00:43:42,280 transacción porque la transacción vale bueno pues no queréis sprint pues