20251204 UD2-BDR_2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
música para animales
00:00:00
pues
00:00:03
para ver cómo ejecutar
00:00:04
sentencias, cómo acceder a una base
00:00:07
de datos relacional
00:00:09
con la capa básica
00:00:10
o sea, lo más a pelo posible
00:00:13
que se puede hacer
00:00:14
que te da el mayor control
00:00:16
mediante
00:00:18
JDBC, pues nos habíamos
00:00:21
hecho una aplicación chorra mínima
00:00:23
con un modelo que solo tenía una clase
00:00:25
con coches
00:00:27
y con ventas de coches
00:00:29
y ya está, entonces esta era
00:00:32
la entidad patatera que teníamos
00:00:34
solamente esta entidad
00:00:36
entonces el diseño
00:00:37
más habitual para
00:00:40
desacoplar lo más posible
00:00:41
la parte de acceso a datos con el resto
00:00:43
de la aplicación, el diseño más habitual
00:00:46
es el patrón DAO, en el cual
00:00:47
para cada entidad
00:00:50
persistente o que queremos que lo sea
00:00:51
nos hacemos una clase DAO
00:00:54
que aglutina
00:00:56
los métodos
00:00:57
de acceso a la base de datos
00:00:59
y luego
00:01:00
esa clase DAO a su vez le hacemos el split
00:01:02
interfaz
00:01:05
implementación
00:01:07
y así en la implementación
00:01:08
se esconde
00:01:11
todos los detalles técnicos
00:01:13
del acceso a la base de datos
00:01:15
y en la interfaz se da la referencia
00:01:17
y desde cualquier punto de la aplicación
00:01:19
tú tiras de la referencia y luego ya sabéis
00:01:21
que en tiempo de ejecución
00:01:23
se coge la implementación
00:01:24
claro, tiempo de ejecución, lo que sea
00:01:27
pues bueno, patrón habitual, pues ya está
00:01:28
pues bueno, hacemos ese patroncillo
00:01:31
adaptado a esto
00:01:33
y teníamos nuestra clase DAO
00:01:34
que habíamos decidido
00:01:36
estos cuatro métodos, por ejemplo
00:01:37
pero bueno, podrían ser más
00:01:40
estos cuatro métodos para hacer
00:01:42
con las ventas
00:01:44
y ahora teníamos que implementarla
00:01:45
y aquí nos habíamos quedado
00:01:48
entonces, ahora ya sí que vienen los detalles técnicos
00:01:50
entonces, nuestros detalles técnicos
00:01:53
Son acceso a la base de datos con JDBC
00:01:55
Eso está claro, porque es que es así
00:01:57
Sí o sí
00:01:59
Es así o sí lo que hay en la base
00:01:59
¿Cómo funciona?
00:02:01
Pues se crea
00:02:05
Conexión, se ejecuta
00:02:07
Sentencias y se cierra conexión
00:02:08
Es que eso es lo que se puede hacer con JDBC
00:02:10
Abrir conexión con la base de datos
00:02:12
Ejecutar sentencias, cerrar conexiones
00:02:15
Eso es lo que se puede hacer, sentencias de todo tipo
00:02:17
De creación de esquemas
00:02:19
Incluso no solo de consultas, etc
00:02:21
Sentencias de todo tipo
00:02:22
Vale, entonces eso se organiza llamando a métodos que como ya dijimos también se han diseñado conforme de nuevo al patrón API
00:02:23
Pues JDK te ofrece la API JDBC donde hay unos métodos que son a los que todos llamamos para hacer esto que acabo de decir
00:02:34
crear conexión, ejecutar sentencias y cerrar conexión, te ofrece unos métodos con un nombre unificado para hacer esto que acabo de decir
00:02:46
pero claro, cada base de datos tendrá que implementar eso de una forma o de otra
00:02:53
pues eso ya es responsabilidad nuestra
00:02:58
y darle la implementación a esa API que me da el JDK
00:03:01
y esa implementación como la damos a través del driver de la base de datos
00:03:05
entonces ese driver como siempre es un conjunto de clases
00:03:09
de las que dependemos y por tanto tenemos que inyectarlas
00:03:12
como dependencia, pues lo habíamos hecho aquí
00:03:17
Y ese driver era esto de aquí
00:03:20
Vale
00:03:24
Y ahora ya
00:03:27
Que ya tenemos todas las clases
00:03:29
Que necesitamos
00:03:31
Podemos empezar a hacer el detalle técnico
00:03:32
Bueno, primera cosa que hemos dicho
00:03:34
Hacer la conexión
00:03:36
Vale
00:03:38
Hacer la conexión ya
00:03:39
A nivel de código es nada, lógicamente
00:03:42
Una línea
00:03:44
Pero a nivel luego de
00:03:45
Ejecución
00:03:48
es de lo más pesado que hay
00:03:50
porque a crear una conexión te tienes
00:03:52
que entender con ese recurso
00:03:54
que está en esa IP, ese sistema gestor de bases
00:03:56
de datos y además todo lo que
00:03:58
son intercambios
00:04:00
orientados a conexión, pues son
00:04:02
muy costosos establecerlos, tienes que estar
00:04:04
ahí dándote la mano con el otro patatín
00:04:06
bueno, lo que viene a ser, vosotros como expertos
00:04:08
en redes
00:04:10
y en todo, pues de CPIP
00:04:12
el proceso hasta que estableces la conexión
00:04:14
hay un agreement por el otro, por el no
00:04:16
Pues en general, cualquier procedimiento que usa intercambios orientados a conexión son muy pesados. Vale, pues entonces, ¿cómo gestionamos eso de hacer la conexión? Pues la aplicación va a necesitar acceder a la base de datos muchas veces, muchas veces.
00:04:18
entonces, para empezar tenemos
00:04:40
dos
00:04:43
orientan dos posibilidades
00:04:44
que la aplicación sea multi hilo
00:04:47
o que no lo sea
00:04:48
si la aplicación no es multi hilo
00:04:49
y solo hay un hilo de ejecución
00:04:52
pues me puedo permitir
00:04:54
me creo una conexión
00:04:56
y dejo esa conexión ahí abierta todo el rato
00:04:57
¿vale? y ya está
00:05:00
¿por qué? porque si cada vez que yo voy a hacer
00:05:01
un acceso en cada uno de estos métodos
00:05:04
me conecto
00:05:06
hago lo que sea y cierro
00:05:08
bueno, vale, lo puedo hacer, pero
00:05:09
es más pesado para la aplicación
00:05:12
es más pesado, entonces en una aplicación
00:05:14
multihilo, pues esa podría ser
00:05:16
nuestra solución, creo la conexión
00:05:18
y ahí la dejo, claro, pues tendríamos
00:05:20
que ver luego en el contexto en el que trabajamos
00:05:22
si eso es
00:05:24
peligroso, no lo es, etcétera, pero sería
00:05:26
computacionalmente lo mejor
00:05:28
¿vale? si la aplicación
00:05:29
es multihilo
00:05:32
pues hombre, ahí se complica la vida
00:05:33
porque cada hilo
00:05:35
Necesita su propia conexión
00:05:37
No vamos a compartir ese recurso
00:05:40
Que se bloquea
00:05:41
Entonces, ¿qué solución nos...?
00:05:43
Esa sería una
00:05:46
Abrir y cerrar, pero leches
00:05:49
Lo que carga es la aplicación
00:05:51
Claro, hacer un
00:05:54
Pool de conexiones
00:05:58
¿Vale? Un pool de conexiones
00:05:59
Entonces, tú tienes un recurso
00:06:02
Que cada vez que te quieres conectar
00:06:04
Con él, tienes que hacer una conexión
00:06:06
así, pam, pam, pam
00:06:07
¿no?
00:06:09
¿puedes establecer varias conexiones al mismo tiempo?
00:06:12
claro, entonces
00:06:15
tú tienes
00:06:16
un recurso cualquiera
00:06:19
en nuestro caso
00:06:21
nuestra base de datos que está por ahí
00:06:23
y cada
00:06:25
hilo que necesita
00:06:27
conectarse, pues
00:06:29
ahí tiene que establecer una conexión
00:06:31
ahora aquí este otro hilo en paralelo
00:06:33
¿qué he hecho?
00:06:34
ah, que he movido con el codo
00:06:35
las pizarritas, vale
00:06:41
bueno, pues entonces
00:06:42
se puede
00:06:45
implementar, afortunadamente
00:06:47
no lo tenemos que implementar nosotros en Java
00:06:49
ya está hecho, como todo
00:06:51
todo está hecho en clases que yo importo
00:06:53
pues se puede implementar una clase
00:06:55
ojalá hubiera una clase Java
00:06:57
que me crea
00:06:59
un conjunto
00:07:02
de conexiones
00:07:04
que las mantiene ahí
00:07:05
y las va sirviendo
00:07:06
al proceso que se lo pide
00:07:08
¿vale? entonces esto pues bueno
00:07:10
te configura cuántas conexiones
00:07:13
más y más quieres cada vez, porque hombre
00:07:14
¿cuántas te dejas
00:07:16
en reserva siempre libres
00:07:19
por si...
00:07:21
no lo sé, eso sería otro tema
00:07:21
de estudio en el que podríamos entrar
00:07:26
pero vamos, tampoco vamos a entrar, es solamente
00:07:29
la idea de lo que es un pool de conexiones y ya está
00:07:30
entonces, esa clase
00:07:33
afortunadamente ya está hecha
00:07:35
nosotros la usamos y decimos
00:07:36
dame un pool, yo ya tengo ahí mi pool
00:07:38
y cada vez que quiera
00:07:41
una conexión, se la pido
00:07:43
al pool, entonces este
00:07:45
ya gestiona pues todo el tema de la carga
00:07:47
porque ya las tiene hechas, ya va cerrando
00:07:49
cuando proceda, gestiona
00:07:51
ya todo ese rollo, suponemos que bien
00:07:53
suponemos que lo gestiona bien
00:07:55
y nuestros silos le dicen
00:07:56
dame una, y ya está, y todo el tema de
00:07:58
sincronización, todo eso ya lo tiene gestionado
00:08:01
Entonces eso sería lo natural
00:08:03
En una aplicación multi
00:08:05
¿Vale?
00:08:07
Hacer un pool de conexiones y ya está
00:08:08
Está en la hora virtual
00:08:10
De todas maneras
00:08:17
La interfaz de venta dao
00:08:17
Tiene esos
00:08:21
Tiene estos cuatro métodos y ya está, vacíos
00:08:22
O sea, tenía estos métodos
00:08:25
Claro, tenía estos
00:08:26
Vale, pues entonces
00:08:28
Vamos a hacer las dos
00:08:31
Posibilidades
00:08:35
Entonces, ¿cómo podríamos diseñar esto?
00:08:36
¡Venga, copia! ¡Corre, corre, corre!
00:08:44
¡Se nos pasa la hora!
00:08:47
Sí, lo tengo en el aula
00:08:52
Vale, pues entonces
00:08:55
Ahora estos métodos ya sí que necesitan
00:08:59
O bien la conexión que yo voy a crear
00:09:02
Una única
00:09:06
¿Vale? Porque, repito, la opción de crearla aquí dentro
00:09:07
hacer lo que sea y cerrarla
00:09:11
sería una posibilidad, pero muy pesada
00:09:13
que cada método la cree, haga lo que sea y la cierre
00:09:15
creo, haga lo que sea y la cierro
00:09:18
como eso es muy pesado
00:09:20
pues hombre, mejor diseño
00:09:21
me creo aquí una conexión
00:09:24
que esta clase
00:09:26
implementación
00:09:28
pues tenga su objeto conexión
00:09:29
¿vale? que lo tenga
00:09:31
este objeto conexión
00:09:38
pues de donde viene
00:09:41
de
00:09:43
javasql
00:09:44
Que es la API
00:09:46
De JDBC
00:09:49
¿Cómo?
00:09:50
Hay más
00:09:53
Hay más importes
00:09:54
Supongo, pero el que nos importa es
00:09:56
Java SQL, con este nos quedamos
00:09:58
Que es la API JDBC
00:10:01
Mayoritariamente está metida ahí dentro
00:10:03
¿Vale?
00:10:05
Pues entonces esta conexión es ya la que van a usar
00:10:06
Estos métodos
00:10:09
Entonces esta conexión
00:10:10
Pues se la
00:10:13
Podemos pasar, se la podríamos pasar
00:10:15
Por parámetro
00:10:18
Aventada o implementación
00:10:19
Esto ya son
00:10:21
Elecciones de diseño
00:10:22
En el constructor
00:10:25
Por ejemplo
00:10:26
Public
00:10:29
Y aquí pues ya está
00:10:40
Conexión
00:10:48
Por ejemplo sería una posibilidad
00:10:49
¿Vale?
00:10:52
Cuando instanciamos este objeto
00:10:54
Le vamos a pasar la conexión que vamos a usar
00:10:55
y ahora aquí ya con esa conexión
00:10:59
cada método tira, hace las sentencias
00:11:01
lo que sea, porque es una única, porque no es
00:11:03
multi hilo, vale
00:11:05
entonces, ¿cómo creamos
00:11:07
esta conexión? pues en este diseño
00:11:09
que he hecho yo aquí, en este diseño
00:11:11
al pasársela por parámetro
00:11:13
la crearíamos en el punto en el que
00:11:15
la llamamos
00:11:17
¿y en qué punto? bueno pues
00:11:18
ahora es cuando ya nos viene a la cabeza
00:11:21
vamos a ejecutar estas cosas en algún sitio
00:11:22
claro, ¿dónde las ejecuta? me viene a la cabeza un main
00:11:25
Lógicamente de un main
00:11:27
Que es donde yo llamaré a venta de implementación
00:11:28
Pero bueno, si intentamos de nuevo
00:11:30
Organizar la aplicación como un poquito más
00:11:32
De elegancia
00:11:35
Pues cuando nos viene
00:11:36
La clase que ya hace las cosas
00:11:39
O sea que me ofrece
00:11:41
Los comportamientos que yo necesito
00:11:42
Pues nos viene la palabra
00:11:45
Servicio
00:11:46
Las clases de servicio
00:11:47
Son las clases que tienen
00:11:51
Los requisitos funcionales
00:11:53
la aplicación, lo que la aplicación va a hacer
00:11:56
dicho así resumido
00:11:59
y las clases
00:12:01
de servicio, parte de lo que tienen
00:12:03
que hacer, van a necesitar
00:12:05
hacer acceso a datos, por las clases de servicio
00:12:06
tendrán que implementar
00:12:09
este objeto
00:12:11
para llamar a los métodos
00:12:13
bueno, pues en lugar por tanto de hacer
00:12:14
esto desde un main, pues vamos a hacerlo desde
00:12:17
una clase servicio
00:12:18
yo que sé, la metemos
00:12:20
en cualquier paquetillo
00:12:24
pues por ejemplo
00:12:26
ventas
00:12:41
service, aquí van
00:12:44
a estar las funcionalidades
00:12:48
que realmente le interesan
00:12:50
a la aplicación, y ahora ya estas
00:12:52
funcionalidades las llamará quien sea
00:12:54
las puede llamar una
00:12:56
aplicación de sprint
00:12:57
una aplicación web, las puede llamar
00:13:00
un setlet, las puede llamar un main
00:13:02
las puede llamar una interfaz gráfica, quien sea
00:13:04
puede llamar ahora ya este servicio, que es un servicio
00:13:06
sin más
00:13:08
pues por ejemplo
00:13:09
¿Qué queremos hacer aquí?
00:13:11
Vamos a hacer algo que tengamos ya implementado aquí
00:13:14
Porque si no, pues vamos a crear una venta
00:13:16
Al servicio le interesa
00:13:19
El tío que me ha pedido la aplicación
00:13:21
Me dice, oye
00:13:23
Necesito crear una venta
00:13:24
Pues venga
00:13:27
Necesita la conexión
00:13:27
El tema es
00:13:41
Cómo acceder a ella
00:13:42
Vale, pues
00:13:44
La puedo poner
00:13:45
No necesita la
00:13:47
lo que necesita este para operar
00:13:48
es la implementación del DAO
00:13:52
claro
00:13:54
entonces
00:13:56
aquí podríamos poner
00:13:57
el servicio va a necesitar
00:13:59
como es el servicio de venta
00:14:04
va a necesitar el venta DAO
00:14:05
implementación
00:14:07
lo va a necesitar
00:14:10
y este pues le podemos poner
00:14:11
su constructor
00:14:26
vale entonces
00:14:27
ahora el problema de crear
00:14:51
la venta da implementación, está delegado
00:14:55
al que llame el servicio, ¿vale?
00:14:57
En nuestro caso ya sí que va a ser un main
00:14:59
¿Vale?
00:15:00
Esto, porque yo he hecho este diseño, podríamos
00:15:03
en este mismo servicio
00:15:05
darle valor a esta venta da implementación
00:15:07
y meter aquí la conexión, son posibilidades
00:15:09
¿Vale?
00:15:11
Ya, claro, pero es que realmente
00:15:13
suele ser así, ¿vale?
00:15:15
Por eso, para hacer un
00:15:17
getConnection de mierda, para hacer eso
00:15:19
estoy haciendo mil clases y mil
00:15:21
capas, pero es que suele ser así la estructura
00:15:23
de las aplicaciones, entonces pues para que
00:15:25
no, para que os sea familiar
00:15:27
tanto los términos como la estructura
00:15:29
tú en una aplicación normal es que
00:15:31
vas a ver estos paquetes, vas a ver el modelo
00:15:33
vas a ver los servicios, vas a ver los daos
00:15:35
estos paquetes los vas a ver
00:15:37
y cuanto antes especifiques
00:15:39
cuanto antes identifiques cada cosa que será
00:15:41
pues mejor, porque entonces si quieres ver
00:15:43
algo te vas ahí
00:15:45
claro, o sea una aplicación
00:15:46
que hace una chorrada
00:15:49
tiene un montón de paquetes, cada uno
00:15:50
para una capa distinta
00:15:53
pero claro, luego esa aplicación
00:15:54
si va engordando
00:15:57
pues van engordando cada cosita por separado
00:15:58
y cada una ocupándose de lo suyo
00:16:00
entonces luego es más fácil
00:16:02
entonces no engordas tampoco por separado
00:16:05
engordas el dado y tienes que engordar el dado
00:16:06
bueno ya, pero luego cambias
00:16:08
el modelo, sí, pero me refiero
00:16:11
que conceptualmente
00:16:13
se va engordando por separado
00:16:15
sí, claro, cada uno va a tirar del otro
00:16:17
si engorda el modelo y tú quieres
00:16:19
que todo sea en precisión, pues tendrás que
00:16:21
pero claro, que siempre se va a mantener esa separación
00:16:22
qué rebelde sois
00:16:26
ya, y también te gustan más los
00:16:31
que los streams
00:16:35
en fin
00:16:37
qué le vamos a hacer, así es como
00:16:40
yo sí que veo
00:16:43
yo sí que veo cierto sentido
00:16:45
hacer las cosas con esta estructura
00:16:49
orientada de cara a la reutilización
00:16:51
si tú tienes el servicio
00:16:54
aparte, pues bueno, te va a ser
00:16:56
más fácil ahí
00:16:58
conectar con la vista
00:16:59
entonces, ¿eh?
00:17:02
esto es un servicio, como que no hemos visto servicios
00:17:06
esto es un servicio, ¿ya has visto servicios?
00:17:08
ah, vale
00:17:11
claro, es que
00:17:12
no, no, no, pero me refiero
00:17:14
que las cosas
00:17:16
en realidad, en desarrollo son
00:17:18
nombres
00:17:20
Este año, en realidad, sobre todo
00:17:21
Entre otras cosas, estamos aprendiendo
00:17:24
Nombres, pero de conceptos que ya sabemos
00:17:26
¿Vale?
00:17:28
Venga, pues entonces
00:17:30
¿Dónde estamos?
00:17:32
Porque con tanta clase ya no sé dónde estamos
00:17:36
Sí, sí, yo no lo defiendo, pero yo tengo que hacer
00:17:37
Mi papel, esto es como
00:17:40
Como el presidente del gobierno, porque tiene que vender
00:17:41
Que él va a hacer algo bueno
00:17:44
Y tú eliges si te lo crees o no
00:17:45
Pues aquí, guay, yo te vendo esto
00:17:48
Porque es mi trabajo
00:17:49
Vale, ahora en crear venta
00:17:53
Pues esto sería
00:17:57
Dao.insert
00:17:58
¿Verdad?
00:18:00
Insert, venta
00:18:02
Perdón
00:18:04
Es que
00:18:05
Qué feo estoy haciendo esto
00:18:06
Claro, es que tal y como lo había hecho
00:18:10
Qué feo
00:18:17
Vale, fijaos
00:18:18
Que bonito, ahora está mucho más bonito
00:18:20
¿Vale? Ahora ya es que
00:18:23
Este servicio
00:18:25
Ni hace referencia a la implementación
00:18:26
Ni la hace, ni se entera, ni nada
00:18:29
¿Vale?
00:18:31
Que antes estaba muy feo
00:18:32
Bueno, pues
00:18:33
Esta sería la estructura
00:18:37
Pero ahora ya alguien tendrá que llamar al servicio
00:18:38
Alguien tendrá que crear
00:18:41
Ese servicio para llamarlo
00:18:43
Y tal y como lo hemos hecho nosotros
00:18:44
En el momento de crearlo
00:18:46
Es cuando hay que darle ese DAO
00:18:48
Y en el momento de crear ese DAB es cuando hay que hacer la conexión
00:18:50
Tal y como lo hemos hecho nosotros
00:18:52
¿Vale? Que yo que sé, a lo mejor le pides
00:18:54
Una aplicación así a HGPT
00:18:56
Te va a traer más estructura, casi seguro
00:18:58
Pero igual te crea la conexión
00:19:01
Aquí mismo, pues yo que sé, depende también
00:19:03
Un poco del contexto en el que trabajes
00:19:04
Ahora, vale
00:19:06
Vámonos ahora ya a nuestra
00:19:08
¿Qué le pasa a esto? Vale
00:19:10
Vámonos a nuestra aplicación
00:19:14
Sin más
00:19:16
Perdón, que hace un poco de daño
00:19:17
Sí, es amarillo ahí
00:19:21
Duele, vale
00:19:23
Pues venga, nos hacemos
00:19:25
Un paquetillo con la app en sí
00:19:27
Y en este caso nuestra app
00:19:29
Es un main
00:19:37
Pero podría ser pues la llamada
00:19:38
Spring Boot para que genere
00:19:41
Todos los bins, podría ser otras cosas
00:19:43
Ahora mismo olvidaros de eso
00:19:45
De nada, ahora mismo es un main
00:19:46
Ya está
00:19:49
Entonces, en el que por fin
00:19:50
Ya vamos a crear la conexión
00:19:52
La famosa línea para la cual hemos dado
00:19:54
Cientas mil vueltas
00:19:56
Pero
00:19:57
En el fondo os ha gustado
00:19:59
Lo que pasa es que os hacéis los duros
00:20:01
Pero
00:20:03
Reconoced que un poco
00:20:03
Os gusta abrir la mente
00:20:17
Y mover el cerebro
00:20:19
Y plantearos cosas
00:20:20
Porque es lo poquito
00:20:22
Si algo podemos daros nosotros
00:20:24
Es un contexto
00:20:27
En el cual os sentáis incómodos
00:20:29
Y tengáis que mover un poco el cerebro
00:20:31
Porque los contenidos
00:20:33
Van y vienen
00:20:34
Completamente, hay una base
00:20:36
Yo en seis años estudié unos contenidos
00:20:37
Que jamás nunca he aplicado
00:20:41
Pero no son seis años tirados a la basura
00:20:43
Mis años de carrera, para nada
00:20:45
No, y me lo creo
00:20:47
Me lo creo realmente
00:20:50
nos fueron tirados a la basura
00:20:52
aunque no he aplicado
00:20:53
jamás
00:20:55
ninguno de los fondos
00:20:55
tú te crees que yo
00:20:56
10 horas a la semana
00:20:57
de comunicaciones ópticas
00:20:58
¿alguna vez he usado
00:20:59
comunicaciones ópticas?
00:21:01
en la vida
00:21:02
no, por ejemplo
00:21:02
pero
00:21:03
todo eso
00:21:04
pues de alguna manera
00:21:05
me...
00:21:06
pues la asignatura
00:21:07
de comunicaciones
00:21:10
por decirte la primera asignatura
00:21:10
se me ha venido a la cabeza
00:21:11
que no he aplicado
00:21:12
jamás en la vida
00:21:13
bueno pues
00:21:14
toda la física
00:21:17
de la fibra óptica
00:21:18
de principio a fin
00:21:19
toda la matemática
00:21:20
de los modos, de los multimodos, todo de principio
00:21:22
a fin, todos los detalles
00:21:24
más mínimos, ¿tú crees que yo eso alguna vez
00:21:26
lo he usado? jamás
00:21:28
bueno, sí, claro
00:21:29
todo eso se supone que también la bioseguridad
00:21:32
física, entonces
00:21:34
pues aquí lo mismo
00:21:35
aunque os sintáis
00:21:37
incómodos y luego los
00:21:40
contenidos en concreto, a lo mejor no los apliquéis
00:21:42
es realmente
00:21:44
la mayor enseñanza que podéis sacar de un ciclo
00:21:45
el haber desarrollado
00:21:48
de alguna manera esa
00:21:50
capacidad de pensar en situaciones incómodas
00:21:51
en entender
00:21:54
en unir
00:21:56
además se te quedan unos conocimientos
00:21:57
básicos que seguramente al final acabes usando
00:21:59
pero sobre todo
00:22:02
la capacidad lógica, la memoria
00:22:05
y vencer la pereza
00:22:08
son las tres cosas que hay que aprender
00:22:09
estos dos años
00:22:11
desarrollar capacidad de pensamiento lógico
00:22:12
aplicado a esto que estamos viendo
00:22:16
aunque en el futuro igual lo apliquéis a otra cosa
00:22:18
tú en las prácticas seguramente hiciste algo
00:22:19
por lo que me contaste
00:22:22
no tiene nada que ver con nada lo que habías estudiado aquí
00:22:23
¿no?
00:22:25
se tenía que ver, vaya por Dios
00:22:27
ah, vale, creía que
00:22:28
vale, vale, no sé por qué me sonaba
00:22:33
pero bueno
00:22:35
hay gente que de repente tiene que rehacer una aplicación
00:22:37
completa que está en C++ o mil cosas
00:22:39
pero bueno, ya has desarrollado un pensamiento lógico
00:22:41
y pum, lo aplicas, entonces eso es lo más importante
00:22:43
entrenarlo con esto
00:22:45
entrenarlo con esto, la memoria
00:22:47
Entrenar la memoria
00:22:49
Y vencer la pereza
00:22:50
Que te va a ti muy bien
00:22:53
Lo de tengo que hacer una aplicación
00:22:55
Sé hacerla, me suena
00:22:57
Y además incluso puede
00:22:59
Que es que ni siquiera vaya a utilizar esto en la vida
00:23:01
Pero aún así vence la pereza y la haces
00:23:03
Porque eso es lo que te va
00:23:05
A preparar para el futuro
00:23:06
Bueno, después de este rollo
00:23:09
Que se ha quedado grabado
00:23:13
Una charla motivacional
00:23:14
Que se ha quedado grabado
00:23:16
ahora ya vamos a hacer la
00:23:19
vamos a insertar una venta
00:23:21
vamos a insertar una venta
00:23:24
pues para insertar una venta necesito
00:23:25
el objeto ventaservice, es que no hay tutía
00:23:27
que le tengo que pasar
00:23:30
lógicamente la conexión, le voy a poner ahora esto
00:23:45
perdón
00:23:47
perdón
00:23:49
a ver, le he puesto
00:23:51
ahora mismo null solamente para quitar el error
00:23:53
de compilación, ahora lógicamente
00:23:55
le damos la conexión
00:23:57
y ahora ya esta aplicación
00:23:58
Pues que yo quiero insertar una venta
00:24:01
Pues aquí, pues lo que sea
00:24:03
Dame datos
00:24:05
Dame datos
00:24:07
Se creará la venta
00:24:10
Y ahora ya
00:24:13
Service.createventa
00:24:19
Esta será nuestra aplicación
00:24:22
Y aquí ni vemos DAO
00:24:31
Ni vemos nada
00:24:33
Vemos el servicio, ya está
00:24:34
Pero ya está, no vemos DAO
00:24:37
Y DAO no ve DAO implementación
00:24:38
Me refiero al código ahí dentro
00:24:40
Entonces, pues bueno, de alguna manera sí que estamos desacoplando y facilitando la posible recompilación, aunque no te lo creas, pero tampoco te creas que yo me lo creo mucho, pero esto es como los, yo qué sé, como el cura, te suelta su película y tú crees que creen Dios, pues no, pues ya está, pues esto es igual.
00:24:42
Ahora ya sé que vamos a pasarle la conexión
00:25:01
Vale
00:25:07
Perdón, tenemos que pasarle el objeto
00:25:09
Implementación
00:25:12
Ventadao
00:25:14
Y a este ventadao
00:25:18
Implementación es al que
00:25:29
Tendremos que pasarle
00:25:31
Ahora ya sí
00:25:33
La conexión, vale
00:25:35
Entonces
00:25:46
Espera, estoy poniendo todo nul para quitar los errores
00:25:48
De compilación y ver la estructura
00:25:51
Ahora ya lo rellenamos
00:25:53
¿Dónde?
00:25:55
Uy, uy, uy
00:26:00
Venta
00:26:02
A ver
00:26:04
¿Qué he hecho mal?
00:26:06
Ahí, justo
00:26:07
Cándele el nombre por trabajo
00:26:08
Ah, vale
00:26:10
Vale, vale
00:26:14
Vale, vale
00:26:15
Es que es mucho más bonito que se llame así
00:26:18
Vale
00:26:23
Entrada de implementación
00:26:24
Aquí lo que pasa es que ya
00:26:34
Con la cosa rara que he hecho se me ha debido crear
00:26:37
Algo que no quería, este
00:26:39
Ah, se me ha quedado este que no le quiero
00:26:40
Sí, es que se me ha creado el uno
00:26:42
Que se adaptaba a ese
00:26:47
En fin, que ha hecho una tontería
00:26:48
Vale, ahora ya sí
00:26:50
Puedo
00:26:52
Vale, al final
00:26:55
No me he resistido
00:26:59
Y he cogido tu truco del
00:27:01
que es que ese truco se me ha dado siempre
00:27:03
muy mal rollo, lo de que él haga los import
00:27:05
y... pero bueno
00:27:07
confío en él
00:27:09
claro, por eso siempre me da un poco de angustia
00:27:11
pero bueno, como aquí lo tenemos arriba
00:27:16
rápidamente y si algo
00:27:17
vale, pues esta sería la estructura
00:27:19
entonces, aquí
00:27:21
aquí, sí que es cierto
00:27:22
perdón, aquí arriba
00:27:25
que ya
00:27:26
hemos perdido un poco el desacoplamiento
00:27:28
porque aquí estamos mirando directamente
00:27:31
el barro, estamos mirando
00:27:33
lo sucio, que es
00:27:35
la conexión y el
00:27:37
ventadao, estamos mirando aquí un poco ya lo
00:27:39
guarrete, lo del barro
00:27:41
lo ideal sería que yo hiciera el servicio y ya está
00:27:42
vale, lo que pasa es que
00:27:45
bueno, que es que no hay tutía, estoy que meterlo en algún sitio
00:27:47
lo ideal sería, o no
00:27:49
de nuevo va en opiniones y gustos
00:27:53
que yo tuviera alguna capita
00:27:55
por encima, que me limpiara
00:27:57
esto, y se dedicara
00:27:59
a qué, a ir
00:28:01
inyectando él los
00:28:03
objetos según los va necesitando
00:28:05
yo me hago mi venta service
00:28:07
y venta service se da cuenta de que
00:28:08
necesita una implementación
00:28:11
alguien mágico que está por ahí
00:28:12
va y lo genera, el de implementación
00:28:15
se da cuenta, ahí está una conexión, alguien
00:28:17
mágico que está por ahí va y se lo genera
00:28:19
y se lo mete y no sé qué, ojalá hubiera
00:28:21
alguien mágico por ahí que creara
00:28:22
lo que hace falta, lo va metiendo y yo no
00:28:24
tengo que hacer esta mierda
00:28:26
pero si hay alguien mágico que lo haga, que es
00:28:27
sprint, ¿vale?
00:28:30
entonces con esa capita de sprint
00:28:32
pues la parte de inyección de dependencias
00:28:33
que significa
00:28:36
si yo voy a crear un objeto y necesita algo
00:28:37
crealo tú y mételo tú
00:28:40
yo me voy a andar yo aquí creándolo
00:28:42
para meterlo
00:28:44
sprint, entre otras cosas
00:28:45
originalmente se creó
00:28:48
como un motor de inyección de dependencias
00:28:50
que se llama, ¿qué es inyección de dependencias?
00:28:52
se eligió una frase muy bonita para
00:28:54
poder venderlo, porque si no lo compra nadie
00:28:56
¿Qué significa? ¿Quieres un objeto?
00:28:58
Yo te lo creo
00:29:01
Y ya está, y para eso se hacían unos
00:29:01
XML de configuración donde
00:29:04
El que hacía la aplicación, pues había
00:29:06
Hecho algo con un caruto, porque
00:29:08
Se ahorraba hacer esto, pero luego se tenía que
00:29:10
Hacer un pedazo de XML en el que tenía
00:29:12
Que identificar, voy a usar este bin, y voy a usar
00:29:14
Este, y voy a usar este, cuando te haga
00:29:16
Falta lo creas solo, y voy a usar este bin
00:29:18
También, pero cuidado, este no va a ser
00:29:20
Duplicado el otro, entonces tenías que hacer un pedazo
00:29:22
De XML enorme
00:29:24
Bueno, se configuraba con XML
00:29:26
Bueno, y se sigue configurando
00:29:30
Depende de la parte de Spring en la que estés
00:29:32
Entonces, bueno, ahí tenías que configurar
00:29:35
Oye, que vas a necesitar esto, créalo cuando haga falta
00:29:37
Y ya Spring te hacía todos sus
00:29:39
Todos sus constructores
00:29:42
Para meterlo
00:29:44
Esa es la inyección de dependencias
00:29:44
Hacer news para crear objetos
00:29:46
Y meterlo donde haga falta
00:29:49
Es decir, lo que hemos hecho nosotros
00:29:50
Aquí hemos inyectado una conexión a este
00:29:52
Y aquí hemos inyectado
00:29:55
Un DAO a este
00:29:58
¿Vale? Queda más bonito decirlo inyectado
00:29:59
Pero lo que hemos hecho ha sido crearlo y meterlo
00:30:03
¿Por qué le pones aventada a la ventana de null en vez de con?
00:30:04
Porque, sí, porque estaba poniendo
00:30:06
Ahora los null sin más para quitar el error de conexión
00:30:08
Para quitar el error de compilación
00:30:11
No le regañes tampoco
00:30:13
A ver, que he puesto null
00:30:14
En todos los parámetros
00:30:17
Para quitar el error de compilación
00:30:18
Ahora ya
00:30:20
Sí, sí, sí, aquí yo puedo poner con
00:30:20
Y ahora ya aquí
00:30:24
Pondré DAO
00:30:26
Ya estos dos NULL los quito
00:30:28
Y ahora ya por fin todo esto
00:30:30
No tiene nada que ver con JDBC
00:30:33
Ahora ya sí que nos vamos a JDBC
00:30:34
Que es crear la conexión
00:30:36
No creo que haya dos corrientes sobre eso
00:30:37
No creo que haya dos corrientes
00:30:52
No lo sé
00:30:55
Yo sé pocas cosas
00:30:56
Como el abuelo de Kirikou
00:30:58
Pero
00:30:59
Yo creo que sí, lo que pasa es que
00:31:00
claro, depende del contexto, si es una
00:31:07
aplicación donde el rendimiento es crítico
00:31:09
pues en esa aplicación
00:31:11
cuantas menos
00:31:13
capas pongas mejor porque menos vas a perder
00:31:15
el control, pero eso es una aplicación
00:31:17
donde el rendimiento es crítico
00:31:18
no lo vas a hacer con Java, porque Java
00:31:21
ya sobre la máquina virtual te mete ahí
00:31:22
entonces Java es para
00:31:24
aplicaciones comerciales y esencialmente
00:31:26
Ahí el rendimiento no es tan importante
00:31:29
Es más importante que la aplicación sea escalable
00:31:31
Mantenible
00:31:33
Y para eso
00:31:35
Dime, hoy vas a decir algo, ¿no?
00:31:35
Sí
00:31:38
¿Qué es?
00:31:38
Grand
00:31:43
Ah, Graal
00:31:44
Que te quita los tiempos de arranque
00:31:45
Que te quita un montón de cosas
00:31:47
Y además te va a poner nuevo Spring Boot con el 4.0
00:31:48
Y a la 10 independencia
00:31:51
Se puede hacer de una forma programáticamente
00:31:53
Quitándote los componentes y las configuraciones
00:31:55
¿Lo habéis entendido?
00:31:57
No
00:32:01
Claro, pues
00:32:01
Conclusión que podemos sacar de lo que ha dicho
00:32:06
Que aunque pongas
00:32:09
No, ¿eh?
00:32:11
No, no, no, no
00:32:12
Sí, ¿qué sabéis?
00:32:14
A ver, justo
00:32:16
Claro
00:32:18
Efectivamente
00:32:20
Que hay trabajo hecho en relación a
00:32:22
Optimizar el tiempo
00:32:25
pero no quitar las capas
00:32:26
porque eso sí que, vale
00:32:28
entonces todo eso que dice la anotación de no sé qué
00:32:30
son anotaciones que se ponen para sustituir
00:32:32
ese XML, he dicho yo
00:32:34
entonces ahora ya si ni siquiera pones
00:32:36
¿Perdón?
00:32:37
Claro, que la aplicación
00:32:50
que ya tiene es una cebolla enorme
00:32:52
pues que bueno
00:32:54
Que sea una cebolla que funcione
00:32:55
Que no te pierdas
00:32:57
Pero bueno, son
00:32:58
Conversaciones
00:33:01
De alguna manera en las que yo tampoco
00:33:03
Tengo
00:33:05
Tengo mucha
00:33:06
Información realmente, porque yo estoy aquí
00:33:11
No estoy fuera, no estoy trabajando en Google
00:33:13
Entonces, no sé
00:33:15
Bueno
00:33:16
Pues ahora ya sí
00:33:19
Hemos completado toda la primera hora
00:33:21
Para llegar a la conexión
00:33:24
A esa unidad de conexión que vamos a hacer
00:33:25
Vale, pues
00:33:27
¿Cómo se hace una conexión?
00:33:29
Pues este objeto de aquí
00:33:37
Es un objeto de la API JDBC
00:33:39
Que os sonará del trabajillo del año pasado
00:33:43
Y este objeto pues tiene
00:33:45
Un getConnection
00:33:47
Donde tú, aunque está sobrecargado
00:33:49
Pues bueno, lo que vamos a usar nosotros
00:33:52
El método más usado
00:33:55
Tiene tres parámetros
00:33:59
Donde el primero sería
00:34:00
La URL donde está la base de datos
00:34:02
El segundo el usuario
00:34:05
Y el otro la password
00:34:06
¿Vale?
00:34:08
Entonces
00:34:15
Vale
00:34:16
Vamos a meterlo aquí en un
00:34:21
Try catch
00:34:24
Ahora, ¿qué hacemos?
00:34:26
Cableamos, hardcodeamos
00:34:31
Como lo queráis llamar
00:34:33
A mí me gusta más cablear porque soy
00:34:34
Antigua
00:34:36
aquí los datos
00:34:38
que feo, esto sí que sí
00:34:39
efectivamente
00:34:42
que feo, vamos a ponerlo como mínimo
00:34:46
en un properties, que es que es donde
00:34:49
se pone, ahí no
00:34:50
vamos a poner estos tres datos que necesitamos
00:34:52
en un properties, pues venga
00:34:54
vamos a hacernos un properties
00:34:56
aquí en recursos, por ejemplo
00:34:57
un fichero
00:35:01
properties
00:35:05
Y aquí, ¿qué tres datos nos interesan?
00:35:06
La URL de la base de datos
00:35:18
El usuario
00:35:20
Y la contraseña
00:35:23
Pues aquí los vamos a poner
00:35:26
El usuario y contraseña
00:35:29
Qué feo esto, deberíamos haber hecho en nuestro esquema
00:35:30
Cuando hicimos el esquema, la base de datos, ventas o coches
00:35:36
O como se llamara
00:35:40
teníamos que haber hecho un usuario para ella y poner aquí
00:35:40
ese usuario, ¿vale? pues muy bien
00:35:43
hecho, y es el usuario que habría
00:35:45
que poner aquí
00:35:47
¿vale? bueno
00:35:47
como no está hecho voy a poner esto
00:35:50
y aquí la url que necesita el
00:35:52
driver manager, pues la
00:35:55
API JDBC necesita que siga un
00:35:57
estándar, primero se pone
00:35:59
JDBC
00:36:01
luego se pone
00:36:04
la tecnología de la base de datos en la que
00:36:06
estás
00:36:08
y ahora ya sí que pones la url
00:36:09
En nuestro caso la base de datos está en localhost
00:36:12
Entonces
00:36:15
Aquí
00:36:16
Esto con las barritas siempre
00:36:18
Me hago un lío
00:36:21
Entonces
00:36:22
Yo creo que
00:36:24
Vamos a lanzarnos sin mirar la chuleta
00:36:27
Y si nos da un error de no encuentro
00:36:31
La conexión, pues ya la cambiamos
00:36:33
URL
00:36:34
La IP que fuera, claro, en mi caso
00:36:36
Está la base de datos aquí
00:36:39
puerto en el que escucha
00:36:40
lo hemos dejado en el puerto por defecto
00:36:41
de MySQL que es 3306
00:36:44
en el que lo dejamos
00:36:46
si dejamos el 3306
00:36:47
ya está, no tendríamos que hacer nada más
00:36:50
si le cambiamos, si hemos cambiado de puerto
00:36:52
al gestor de base de datos
00:36:54
pues pondríamos aquí el puerto nuevo
00:36:56
el que fuera
00:36:57
si está en el 3306 me da igual dejarlo así que no ponerlo
00:36:58
y aquí pues vamos a poner la base
00:37:02
de datos que creo que se llamaba
00:37:06
Coches
00:37:07
Entonces a la conexión se le pueden poner
00:37:08
Además parámetros
00:37:13
Pues la
00:37:14
Zona horaria, etc
00:37:16
Pero el resto de parámetros que le puedes poner
00:37:18
A la conexión
00:37:21
Puede que hagan falta, puede que no hagan falta
00:37:22
Depende del driver que estés usando
00:37:25
Depende de la versión de Java que estés usando
00:37:27
Depende de un montón de cosas random
00:37:28
Entonces vamos a no ponerle
00:37:31
Es que no sé en qué sentido
00:37:33
Es que puede que haya puesto la barra al revés
00:37:48
Porque si no
00:37:50
Efectivamente sería el carácter de escape barra C
00:37:52
A ver, venga
00:37:54
Vamos a mirar la chuleta
00:37:56
Pero la memoria la tenéis que desarrollar vosotros
00:37:58
Que a mí ya no me hace falta
00:38:00
Vamos a ver
00:38:01
Donde tenemos
00:38:06
Era al otro lado de como la he puesto
00:38:08
Efectivamente
00:38:11
Vale
00:38:12
Si es que puesta así
00:38:14
Como tu bien dices se convertiría en una
00:38:16
Claro
00:38:19
Vale
00:38:20
He puesto la interrogación
00:38:22
Porque he dicho que la cadena de conexión
00:38:26
Puede admitir parámetros
00:38:29
Pues no sé qué
00:38:31
Time, UTC, no sé cuántos
00:38:34
Que puede que hagan falta o no
00:38:35
También depende del driver en el que estés trabajando
00:38:37
En qué esquema estés
00:38:39
Entonces, por ahora yo no los pongo
00:38:41
Solo un error de ejecución nos lo pide
00:38:42
Pues pum, ahí tratamos de ensuciar el problema
00:38:44
Pues ya tenemos nuestro properties
00:38:46
Y ahora ya sí
00:38:51
Nuestra aplicación tendrá que sacar
00:38:53
Aquí del properties
00:38:56
Properties
00:38:57
Vale
00:39:04
De este objeto properties
00:39:04
Que creábamos así
00:39:08
Que la dejaba útil
00:39:12
Vale, pues esto era
00:39:15
Get input o algo así, ¿no?
00:39:24
Get
00:39:29
Del properties
00:39:29
No, lo add, ¿verdad?
00:39:32
Con este cargábamos un input string
00:39:34
Y el input string
00:39:36
Como esto está en recursos
00:39:38
no podemos hacer un FileInputString
00:39:39
tal cual, bueno podemos hacer un FileInputString
00:39:42
pero tenemos que poner toda la ruta
00:39:44
del proyecto, entonces
00:39:45
hombre, es feo porque entonces
00:39:47
le estamos dando una ubicación
00:39:49
del sistema de archivos
00:39:51
entonces esto podíamos sacar
00:39:53
cuando el recurso estaba en
00:39:55
resources, pues podemos
00:39:57
sacar, como resources
00:39:59
está en el path de la aplicación
00:40:01
cualquier cosa que está en el path de la
00:40:03
aplicación, podíamos convertir
00:40:05
la InputString con
00:40:07
poniendo, perdón, el nombre de la clase
00:40:09
si no lo miramos rápido en su momento cuando lo hicimos
00:40:18
el nombre de la clase en la que estoy
00:40:21
getResourcesStream
00:40:24
y aquí base de datos punto properties
00:40:26
vale, entonces
00:40:31
si yo aquí le doy un recurso a este método
00:40:44
cógeme recurso como flujo
00:40:48
conviérteme recurso a flujo
00:40:51
si yo a este método
00:40:52
le doy
00:40:55
algo que esté en el path
00:40:57
tiene que estar en el path
00:40:59
y esto está porque cuando el proyecto se pasa a hard
00:41:00
la carpeta resurfe se va al path automáticamente
00:41:03
si yo le doy algo que está en el path
00:41:05
de ahí me saca
00:41:08
un input string, que es justo lo que
00:41:09
necesita prod
00:41:11
a través de load para ahora ya sacar las propiedades
00:41:13
claro
00:41:15
y este método lo llamas
00:41:17
para la clase en la que
00:41:19
lo estás haciendo, o sea, la que sea
00:41:21
como estoy en esta, en esta
00:41:23
vale, y ahora ya
00:41:24
podemos poner aquí las tres cosas
00:41:27
prop.getproperty
00:41:29
url
00:41:34
aquí lo mismo
00:41:38
y aquí
00:41:47
lo mismo
00:41:58
pero no igual
00:42:00
user
00:42:02
y password
00:42:05
la verdad es que
00:42:11
Me está
00:42:12
Doliendo en el alma
00:42:14
Aquí, bueno, para que el compilador
00:42:17
Se calle
00:42:20
Con este de aquí
00:42:20
Y ya está, ya tengo la conexión
00:42:22
Que se la paso a este y se acabó
00:42:27
A ver, lo que me está doliendo aquí en el alma
00:42:29
Eh, 10 y 20
00:42:32
Joder
00:42:34
Vale
00:42:36
Lo que me está doliendo
00:42:37
Ah, no, que hoy
00:42:39
Ay, perdón, es que no es martes hoy, hoy es jueves
00:42:41
vale, vale, nos queda otra hora
00:42:44
y la de después, hemos consumido
00:42:46
una solo, vale, vale, vale
00:42:48
ya decía yo
00:42:49
Andrea, ¿por qué me miras así?
00:42:50
primero no me llamó Andrea
00:42:54
perdón, Ana
00:42:55
no sé, es que me mirabas como con desconfianza
00:42:57
vale, vale
00:43:00
no, es que has dicho
00:43:02
como que solo hemos terminado la hora
00:43:06
como que solo te quedas en mucho contenido
00:43:07
bueno, claro, queda
00:43:09
es que de repente he dicho, uy, han pasado ya dos horas
00:43:11
porque creía que estábamos a martes
00:43:14
pero no estamos a lunes
00:43:15
Llevo tres noches
00:43:16
prácticamente sin dormir, así que
00:43:21
tenéis que disculparlo todo
00:43:23
Vale, entonces
00:43:24
lo que decía es que me está doliendo aquí en el alma
00:43:26
y en el corazón
00:43:29
el haber hecho este chorizongo
00:43:29
aquí dentro del main, esto de verdad
00:43:33
que feo, tendríamos que haber
00:43:35
hecho una clase, que me permita
00:43:37
aquí con el red conectio sacar la conexión
00:43:39
una clase singleton
00:43:40
¿Qué menos?
00:43:42
es que esto, no tardamos nada en hacerlo
00:43:44
pero por favor, que menos, es que esto
00:43:46
me duele en el alma subir este proyecto a la
00:43:48
virtual así, pues eso
00:43:50
vamos a hacer, hombre, di que sí
00:43:54
oye, pues así le va a ir
00:43:55
bien
00:44:00
no sé yo, eh, venga, ¿a dónde vamos
00:44:00
la utilidad del no sé qué, del
00:44:08
conexión, de implementación
00:44:10
del service
00:44:12
Vamos a hacer otro paquete
00:44:13
Si será por paquetes
00:44:17
A ver, porque hemos puesto
00:44:20
Una base de datos coches de caca
00:44:24
Que solo tiene una tabla
00:44:25
Si tuviera muchas, cada paquete
00:44:27
Tendría un montón de clases
00:44:30
Un DAO por cada clase y tabla
00:44:31
No, no, no, por cada fila
00:44:34
No, por cada clase, por cada tabla
00:44:35
No, no, no, no
00:44:37
No, los paquetes serían los mismos,
00:44:42
pero cada paquete tendría más clases.
00:44:44
Eso, el DAO tendría un montón de clases.
00:44:46
El service tendría uno por tabla también.
00:44:50
Pues venga.
00:44:54
Sí, claro.
00:44:59
Sí, sí, sí.
00:45:00
Entonces, me he hecho un paquete con él.
00:45:01
No me gusta el nombre, muy feo.
00:45:03
Pero bueno.
00:45:05
Y ahora aquí nos vamos a hacer nuestra clase singleton.
00:45:06
Justo.
00:45:11
Pero veis, veis como la memoria se os va desarrollando
00:45:12
Claro, es que no es fácil
00:45:14
Acordarse de
00:45:16
Ya, pero es que útil es tan genérico
00:45:17
Ahí, es que no sé
00:45:23
No acabo de encontrar yo los nombres bonitos
00:45:28
Pero bueno
00:45:31
Pase usted
00:45:32
Sí
00:45:35
Clase Singleton para obtener la conexión
00:45:36
Sí, a un momento, un momento, pero lo copiamos bien
00:45:42
Clase singleton para obtener la conexión
00:45:46
Joder, no es que no atino ni con el este
00:45:51
Este
00:45:54
Vale, entonces la clase singleton
00:45:55
Su propiedad va a ser la conexión
00:45:58
¿Vale? Va a ser esta
00:46:02
Que inicialmente es null
00:46:03
Vale, y ahora esta clase singleton
00:46:06
Tendrá su getConnection
00:46:15
Su método
00:46:17
Su método
00:46:18
Get
00:46:25
Connection
00:46:26
Y ahora, este método es el que ya se asegura
00:46:28
Si es la primera vez
00:46:32
Que me llamas
00:46:33
Es decir
00:46:34
Si connection es igual a null
00:46:36
Entonces
00:46:39
Ahora ya sí que sí
00:46:41
Hay que hacer todo el mondongo ese del otro lado
00:46:42
Ese
00:46:45
Solo que hay que pasarle
00:46:47
Otro string
00:46:48
Sí, sí, sí
00:46:49
Pero ahora lo hacemos, a ver, ¿dónde estamos?
00:46:52
¿El main? ¿Dónde está el main?
00:46:54
He cerrado el main, ¿verdad?
00:46:57
He cerrado el main
00:46:58
Ah, no, es que era
00:47:02
Ah, es que se llama ventas app
00:47:03
Vale, vale, vale
00:47:04
Vale, pues entonces, todo este rollo patatero
00:47:06
Todo esto
00:47:09
Lo vamos a quitar de aquí
00:47:11
Ahora este ya está un poco más bonito
00:47:14
Porque es que era horroroso
00:47:16
No sé cómo no habéis dicho nada
00:47:17
Vale
00:47:19
Es que lo hemos pensado
00:47:21
Sois la generación de la de
00:47:22
Que me lo den todo, de hecho
00:47:24
A mí me vale todo
00:47:26
Claro
00:47:28
Entonces ahora
00:47:29
Aquí
00:47:31
Con igual a null
00:47:34
GetConnections
00:47:36
Y con es igual a null
00:47:39
La creo con todo este rollo que he hecho aquí
00:47:40
vale, a ver un momentito
00:47:51
que lo repase, hace la conexión
00:47:53
y ahora
00:47:55
ya, y ahora yo tengo mi else
00:47:56
de leave, entonces si es
00:47:59
null, la crea
00:48:01
vale
00:48:02
y si no
00:48:03
y si no nada
00:48:05
es decir, me falta aquí un return
00:48:08
con, y se acabó
00:48:11
vale, ya está este método, entonces
00:48:12
si es null, la crea, y si no es null
00:48:16
no hace nada, y en ambos casos
00:48:18
la devuelvo a orden de parámetro, vale
00:48:20
Luego este es un singleton para asegurarse de que la aplicación solo usa una conexión, un objeto conexión, no instancia cada dos por tres.
00:48:22
Y ahora ya sí que sí, a este le llamamos con, no me acuerdo cómo se llamaba la clase.
00:48:30
Bien, muy bien, muy bien, qué rápidos estáis, de verdad, muy bien.
00:48:47
Que quite el que
00:48:50
Ah, vale, vale, vale
00:48:56
Sí, sí, sí, vale, vale
00:49:01
Muy bien
00:49:02
Creo que ahora ya está bonito, ¿verdad?
00:49:05
Vale
00:49:11
Para que no se vea
00:49:11
¡Hala!
00:49:16
Hombre, por Dios, por Dios
00:49:19
Cómo ha mejorado la cosa
00:49:21
Qué bonito
00:49:22
De verdad, qué bonito
00:49:23
Vale
00:49:25
Aún así
00:49:27
Esto
00:49:30
Este
00:49:32
No, este troncho está bien
00:49:34
Vale, iba a poner un try con recursos
00:49:41
Pero no, porque es que no queremos cerrar la conexión
00:49:44
Vale, está bien
00:49:46
Bueno, a ver, está feo, perdón
00:49:48
Porque esto debería ser un log
00:49:51
Info, log de bug
00:49:54
Pero bueno, eso ya lo dejamos para otro momento
00:49:56
Claro, debería
00:49:58
Que menos que mandar a un log, pero bueno
00:50:01
Y ya está
00:50:04
Entonces, vamos a ver
00:50:06
Si por lo menos hace la conexión
00:50:08
Y podemos crear una venta
00:50:10
Vamos a crear una venta
00:50:12
Eh, venta
00:50:15
Vamos a crear una venta
00:50:16
New venta
00:50:19
Y ahora
00:50:21
Uy, que mal
00:50:25
Venta.set
00:50:29
Coche
00:50:32
Pues que coche queremos
00:50:33
Un Renault
00:50:35
Venta.set
00:50:37
Color
00:50:41
Pues queremos un
00:50:43
White
00:50:45
Blanco
00:50:47
No nos gusta ese color
00:50:50
Entrar en conexión
00:50:52
Aquí, hemos entrado en conexión
00:50:58
Un poco más arriba
00:50:59
Pues no, en set ID
00:51:02
Nos metemos en otro berenjenal
00:51:10
Aquí es un berenjenal tras otro
00:51:11
Pero este es fácil de resolver
00:51:13
Vale, está
00:51:16
Ahora, set ID
00:51:18
¿Dónde estamos? Aquí
00:51:20
Vaya patata de aplicación
00:51:23
sería esta, o no
00:51:26
depende del contexto, si yo fijo
00:51:30
el ID por programa, por código
00:51:32
porque voy a meter la pata sí o sí
00:51:34
y voy a tener
00:51:36
porque seguro que repito IDs, porque yo
00:51:37
no puedo verificar contra la base de datos
00:51:40
continuamente que el ID es único
00:51:42
claro, entonces, ¿qué pasa?
00:51:43
que es que ese ID
00:51:47
debería ser autoincrement, que es lo que
00:51:49
hacemos normalmente, mi tabla
00:51:52
tendrá todos los campos que sean, pero yo
00:51:54
le añade un id autoincrement para en el
00:51:56
peor de los casos tener siempre una clave primaria
00:51:58
con la garantía de que es única
00:52:00
entonces vamos a
00:52:01
voy a parar esto porque si no el vídeo
00:52:03
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Segundo Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 1
- Fecha:
- 6 de diciembre de 2025 - 11:14
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 52′ 06″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 209.56 MBytes