20251202 UD2-BDR_1 - 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:
Ahora sí, empezar a grabar.
00:00:00
Pues venga, nos hacemos un proyecto de Maven.
00:00:02
¿Cómo es una aplicación de escritorio?
00:00:06
El 76% dura mucho.
00:00:14
¿Cómo?
00:00:16
Sí, sí, pasa.
00:00:18
Venga, primer ejemplo.
00:00:25
Te veo de dos.
00:00:27
Gracias. Menos mal que tengo un secretario aquí delante.
00:00:29
Vale.
00:00:32
Vale
00:00:32
JDBC
00:00:33
Ejemplo 1
00:00:36
Por ejemplo, porque habrá unos cuantos más
00:00:39
De este tema, suponemos
00:00:42
Vale, este es el que vamos a subir a hola virtual
00:00:43
Entonces vamos a intentar que quede claro y limpio
00:00:51
Ay, que base de datos tan fea
00:00:54
Hemos cogido
00:00:58
Estoy pensando
00:00:58
Pero bueno
00:01:01
Vale, pues a ver
00:01:02
Tenemos aquí nuestro proyecto
00:01:05
aquí abajo del todo, muy bien
00:01:10
bueno
00:01:12
pues, primera cosa que nos
00:01:14
quitamos de encima
00:01:16
vamos a subir la máquina virtual
00:01:17
por si acaso
00:01:20
máquina virtual
00:01:22
y nivel de compilación en
00:01:29
consonancia
00:01:31
ala, he subido
00:01:32
Luis siempre vas a remolque
00:01:39
he subido la máquina virtual
00:01:42
de Mave como hacemos siempre
00:01:44
del 8 al 21
00:01:46
ya está
00:01:47
es bueno, he hecho un proyecto previamente
00:01:48
claro
00:01:51
yo que sé, habría que preguntárselo
00:01:51
a los del plugin de Maven
00:01:57
de Eclipse, no lo sé
00:01:59
pero crear un proyecto
00:02:00
es algo raro
00:02:05
bueno, venga, proyecto limpito
00:02:05
vale
00:02:09
primera cosa
00:02:11
ya podemos avanzar
00:02:13
que este proyecto
00:02:15
una dependencia va a tener
00:02:16
que es el driver, el conector
00:02:18
¿vale? porque ese es el que va a rellenar
00:02:21
la API, la API no es dependencia externa
00:02:23
porque va en el JDK, pero el conector
00:02:25
sí, pues no pasa nada
00:02:27
nos vamos al
00:02:29
repositorio
00:02:30
y le decimos pues algo con lo que
00:02:31
se entiende, pues JDBC
00:02:39
MySQL
00:02:40
que feo con mayúsculas
00:02:42
me ha quedado, pero bueno
00:02:44
vale, me sale la palabra clave
00:02:45
conector, hemos dicho que conector es como se suele
00:02:49
llamar, pues debe ser que esto es
00:02:50
entramos por
00:02:53
aquí, pues otra cosa, pero me da igual
00:02:54
te llevará
00:02:57
al mismo sitio, efectivamente
00:02:59
no te lleva
00:03:00
a que lo lleva aquí, efectivamente
00:03:01
bueno, pues va a ser esto
00:03:04
debe ser que va a ser esto
00:03:06
entonces, aquí uno
00:03:07
se debería coger la
00:03:10
versión en consonancia
00:03:12
con el MySQL que se
00:03:14
instaló, entonces
00:03:16
donde
00:03:18
la versión que os habéis instalado
00:03:20
la recordáis, si no siempre podéis
00:03:23
mirarla, a ver
00:03:26
si vais a administración
00:03:27
y pincháis en server status
00:03:29
hay dos opciones, que os salga esto
00:03:32
o que os dé un error
00:03:34
vale, pues este error
00:03:34
conseguí averiguar como se quitaba y lo apunté
00:03:37
en una chuleta que tengo que tener ahí, ahora lo miramos
00:03:40
entonces, ahí ver
00:03:42
ahora miro la chuleta
00:03:43
a ver, porque había que cambiar una cosa de Windows
00:03:46
Era un tema de la fecha de Windows
00:03:48
Había que cambiar, no, de la ubicación
00:03:50
Para que esto salga, curiosamente
00:03:52
Hay que irse a Windows y cambiar no sé qué de la ubicación
00:03:54
Pero bueno, ahora lo miro, porque lo tengo apuntado en la chuleta
00:03:56
Pero si os acordáis
00:03:58
Uy, mi ordenador se ha marcado
00:04:00
Vale
00:04:02
Si os acordáis de la versión que habéis instalado
00:04:03
No hace falta que entremos aquí
00:04:06
En mi caso, como yo tengo la 8035
00:04:07
Voy a coger un driver consonante con ese
00:04:10
No va a haber cambios con
00:04:12
Lo que hagáis vosotros
00:04:14
Bueno
00:04:15
Me llama la atención el hombre
00:04:20
Sí, sí, sí
00:04:22
Sí, a todos
00:04:26
Pero si lo de meternos aquí era solamente
00:04:28
Para que vierais la versión que tenéis
00:04:31
Pero esa versión en la propia carpeta
00:04:33
Yo creo que la tenéis puesta
00:04:35
O la podéis averiguar
00:04:36
Es la 9 ya, en el instalador
00:04:38
8.0.44
00:04:40
Vale, pues os cogeis un driver
00:04:43
En consonancia con ese y ya está
00:04:45
Para que no salga este error
00:04:47
Ya en algún momento mire la chuleta y lo quitamos
00:04:49
Es una tontería, no merece la pena
00:04:51
Pararnos ahora
00:04:52
Bueno, pues entonces, estábamos aquí en el repositorio este
00:04:54
La 8
00:04:58
Que salen estas
00:05:00
Bueno, yo me voy a coger la 8033
00:05:03
Por ejemplo
00:05:05
Uy, que mal rollo
00:05:06
Ah, no, no
00:05:11
Hay una nueva versión, 9.5
00:05:11
A la copiamos
00:05:14
Y
00:05:15
No me acuerdo
00:05:16
La acabo de mirar, creo que era 35
00:05:20
Pero da igual, si es que es todo lo mismo
00:05:22
Puedes poner otro driver que te va a funcionar igual
00:05:23
Vale, pues esta ya la tenemos
00:05:26
Y ya se os habrán abierto
00:05:56
Unas dependencias de maven
00:05:59
Donde está el conector
00:06:00
Y un protobuf este
00:06:01
Que no sabemos lo que es y nos importa
00:06:03
Pero debe ser algo de lo que tira el conector
00:06:06
Ya está
00:06:08
Ahora ya sí que sí, vamos a empezar una aplicación
00:06:09
Para hacer cosas con esta base de datos
00:06:12
Como insertar coches, el CRUD de toda la vida
00:06:13
Insertarlos, cambiar
00:06:16
En esta base de datos es tan sencilla
00:06:18
No tiene diferentes tablas
00:06:19
Con lo cual pocas cosas podemos hacer
00:06:21
Pero un CRUD básico de insertar, consultar, eliminar
00:06:23
¿Perdón?
00:06:26
Sí, sí, sí, el primero que te ha salido
00:06:33
En el repositorio de Maven
00:06:35
Y luego ya te vas a la versión 8.0
00:06:36
La que sea, que es la... y ya está
00:06:39
Vale
00:06:40
bueno, ahora ya sí que vamos a hacer
00:06:42
un CRUD básico de esta aplicación
00:06:45
pero bueno, vamos, aunque sea una base
00:06:47
de datos tan pequeñita
00:06:49
vamos a hacer un intento
00:06:50
de diseño un poco más
00:06:53
profesional, entonces un
00:06:55
intento de diseño un poquito más profesional
00:06:57
implica que hagamos
00:06:59
un modelo en consonancia con la base de datos
00:07:01
me estás mirando con cara
00:07:03
de que me vas a
00:07:05
sacar la puntilla de algo
00:07:07
vale, pues entonces
00:07:08
Vaya modelo más tonto
00:07:12
Una clase
00:07:14
Ventas, ya está
00:07:15
Pues venga, vamos a hacer nuestra clase
00:07:18
Ventas
00:07:21
Venga, nuestra clase
00:07:21
Ventas, por ejemplo
00:07:43
Y ventas que tiene
00:07:45
Pues ventas tiene
00:07:47
A ver, los nombres de clases
00:07:49
Siempre deberían empezar con mayúscula
00:08:05
No, no, no, perdón
00:08:08
Es que yo aquí lo he puesto muy alegremente
00:08:12
Aquí el nombre bonito
00:08:13
Es Venta
00:08:15
Lo va a entender quién
00:08:17
Es que aquí no hay nadie entendiendo
00:08:20
Ya, pero es que
00:08:21
Ese mapeo lo haces tú
00:08:24
Claro, otra cosa es que pusiéramos una capa
00:08:25
Adicional, entonces ahí tendríamos que decirle
00:08:28
Oye, que la clase ventas se corresponde con la tabla
00:08:30
Ventas, eso tienes que decir
00:08:32
Claro, no lo va a coger directamente por el nombre
00:08:34
A menos que tú lo configures
00:08:36
De manera que te digas que se llama igual
00:08:38
Vale, pero ahora mismo
00:08:40
Lo hacemos todos nosotros
00:08:42
Entonces vamos a
00:08:44
A ver, ¿qué te has perdido ahora?
00:08:45
No, no, no, perdones
00:08:47
la 8033
00:08:48
he cogido yo
00:08:52
la 80 cualquiera
00:08:53
si
00:08:55
vale, entonces es verdad, ventas es un nombre
00:08:57
mucho mejor que ventas
00:09:00
para un modelo
00:09:01
string y aquí teníamos
00:09:02
el nif del
00:09:05
vende del comprador
00:09:07
aquí en la base de datos
00:09:09
hemos puesto
00:09:11
nif comprador
00:09:13
con barra baja
00:09:16
porque para MySQL
00:09:16
los identificadores, las mayúsculas
00:09:18
y las minúsculas, pues no existen
00:09:21
entonces
00:09:23
NIF comprador con la C mayúscula
00:09:24
no significaría nada, no pega
00:09:27
entonces siempre se suele poner con
00:09:29
barras bajas, pero sin embargo en Java
00:09:30
en Java lo de la barra baja
00:09:32
queda muy feo, aquí
00:09:35
¿os gusta la barra baja?
00:09:36
A mí me da igual, pero es que no entiendo porque hay que estar cambiando
00:09:38
de estándar en cada segundo
00:09:40
de aplicación distinta, y luego usas Python
00:09:42
y lo mismo, que hay que decir barra baja
00:09:44
A ver, son como
00:09:46
convenios
00:09:49
que vamos interiorizando
00:09:51
porque lo llevas viendo y haciendo siempre
00:09:52
y ya lo interiorizas y te mueven de ahí
00:09:54
y ya te da ansiedad
00:09:56
Así es más bonito
00:09:57
Que yo no es que esté diciendo
00:10:11
que usar en Java la barra baja jamás
00:10:14
No, a mí particularmente
00:10:16
me parece feo
00:10:19
y no suelo verlo.
00:10:20
No suelo ver identificadores de propiedades
00:10:22
con barra baja. Serían siempre
00:10:24
más así. ¿Vale?
00:10:26
Sí, con las
00:10:31
constantes sí, como convenio. La barra baja
00:10:32
al principio. Sí, pero bueno,
00:10:34
claro, pues tú ves la barra baja al principio y rápidamente
00:10:36
te das cuenta de que eso es una constante.
00:10:39
Vale, pero en identificadores de propiedades
00:10:40
genéricas y variables,
00:10:42
se puede usar, pero no sé, como que no hay hábito.
00:10:44
Vale, pues NIF comprador y teníamos
00:10:48
además el coche, ¿verdad?
00:10:50
Y el color.
00:10:53
Sí.
00:10:55
Y
00:10:56
si esto fuera un récord,
00:10:56
podríamos dejarlo así,
00:11:02
pero como no sabemos si vamos a modificar
00:11:04
que seguramente tendremos que modificar,
00:11:06
pues getter y setter y a tirar.
00:11:09
A menos que pusiéramos longbox,
00:11:10
que nos da pereza poner la dependencia de longbox.
00:11:12
La que te genera
00:11:17
una dependencia que pones y que
00:11:18
la anotas y te genera los getter y los setter
00:11:20
luego en tiempo de
00:11:22
Tú no los ves, pero están ahí.
00:11:23
¡Hala!
00:11:27
Sin
00:11:31
constructor y sin nada, por pura
00:11:31
vaguería. Si luego lo necesitamos,
00:11:34
pues lo
00:11:37
ponemos.
00:11:38
Vale, ya tenemos nuestra clase de modelo, que menos.
00:11:41
Si trabajamos con ventas, que menos.
00:11:44
Vale, pero es que ahora además
00:11:46
de trabajar con ventas, vamos a hacer
00:11:47
un CRUD.
00:11:50
Es decir, un acceso a datos.
00:11:52
Pues, hombre, vamos a también hacer un intento al menos de diseño elegante. Pues, como hacemos capa de acceso a datos, qué menos que hacer un DAO, ¿verdad? ¿Qué es el DAO? El DAO es una clase que te recoge los métodos relacionados con la persistencia de una entidad en concreto.
00:11:53
tenemos una entidad venta
00:12:17
esta entidad venta quiero
00:12:19
que sea persistente
00:12:21
¿qué significa quiero que sea persistente?
00:12:24
quiero que mi aplicación trabaje
00:12:26
con ella pero que
00:12:28
lo que le pase
00:12:30
se refleje en la base de datos
00:12:31
¿vale? y que quiero que cuando arranque
00:12:33
la aplicación pues
00:12:36
ventas
00:12:37
arranque con lo que haya en la base de datos
00:12:39
quiero eso, significa que quiero que sea persistente
00:12:41
esta entidad, eso significa
00:12:44
que va a haber que hacer operaciones
00:12:46
de acceso a la base de datos
00:12:47
pues hombre, un diseño elegante
00:12:49
sería, voy a recoger
00:12:52
todas esas funcionalidades
00:12:54
de acceso a la base de datos
00:12:56
en una única clase
00:12:58
y como esa clase va a ser
00:12:59
funcionalidades de acceso a la base de datos
00:13:01
para esta entidad
00:13:03
pues que se llame VentaData
00:13:04
VentaDataAccessObject
00:13:07
¿que lo podemos diseñar de otra manera?
00:13:09
pues si, lo podemos diseñar de otra manera
00:13:11
pero es más o menos la idea de diseño general
00:13:13
cuando se hace una aplicación
00:13:16
pues que tiene persistencia
00:13:19
pues venga, vamos a meter
00:13:20
el paquete donde van a ir
00:13:22
estas clases
00:13:28
de nuevo
00:13:29
vamos a
00:13:32
perdón
00:13:33
vamos a desacoplar todo lo que podamos
00:13:35
¿qué es
00:13:40
desacoplar en general? la idea de desacoplar
00:13:41
es todo lo que
00:13:44
podamos, separar
00:13:46
interfaz de implementación
00:13:47
mejor
00:13:50
en general, tampoco hace falta
00:13:51
pasarse, pero desacoplar
00:13:54
significa, voy a separar
00:13:56
la API que ofrezco
00:13:58
y que un tío me llama
00:14:00
y que un tío va a usar para llamarme
00:14:01
voy a separarla de la implementación
00:14:03
es decir, desacoplo
00:14:06
si la aplicación está desacoplada
00:14:07
va a ser mucho más fácil hacer los cambios
00:14:09
bueno, pues entonces, este DAO
00:14:12
aquí vamos a meter una interfaz solo
00:14:13
con lo que yo voy a querer hacer
00:14:16
con ventas
00:14:18
en la base de datos, una interfaz
00:14:19
y luego ya haré su implementación
00:14:21
¿vale?
00:14:24
pues venga, aquí vamos a meter
00:14:25
una nueva interfaz
00:14:27
que sea
00:14:30
ventadao
00:14:32
ala
00:14:35
y aquí ya
00:14:41
decido que me va a interesar
00:14:42
a mí hacer con estas
00:14:45
ventas, relacionado
00:14:46
con la base de datos
00:14:48
tú
00:14:49
o un desarrollador más
00:14:50
otra clase
00:14:53
en otra clase que se llame
00:14:54
venta da o implementación, para que quede claro
00:14:57
que esa es la implementación de venta da
00:14:59
a ver, te ha quedado claro que
00:15:00
entre muchas de las cosas que vamos a hacer con los objetos
00:15:07
venta, va a ser llevarlos
00:15:10
y recogerlos de la base de datos
00:15:12
luego parte de las funcionalidades de la aplicación va a ser
00:15:14
acceder a la base de datos, pues vamos a meter
00:15:16
esas funcionalidades juntitas en algún sitio
00:15:18
vale, pues en lugar de meterlas
00:15:20
en un sitio y ya
00:15:22
vamos a separarlas en una interfaz
00:15:24
y una implementación
00:15:27
vale
00:15:27
pues entonces, ¿qué queremos hacer
00:15:29
con las ventas? pues por ejemplo
00:15:32
queremos insertar
00:15:35
una venta
00:15:37
y por ejemplo
00:15:39
queremos recuperar una venta
00:15:53
podríamos poner aquí muchos métodos
00:15:55
por su clave
00:15:57
o por ejemplo podemos querer
00:15:59
recuperar todas las ventas
00:16:10
porque estamos arrancando la aplicación
00:16:12
pues por ejemplo a lo mejor queremos
00:16:14
hacer esto
00:16:18
find all, esta no tendría
00:16:19
o ya bueno que nos venimos arriba
00:16:24
pues vamos a
00:16:26
por ejemplo borrar
00:16:27
bueno pues típica
00:16:30
clase dao
00:16:44
a ver que era esta cosa tan bonita que hacíais
00:16:46
Vale, una típica clase DAO
00:16:48
¿Cómo se implementa?
00:16:53
Pues ya veremos
00:16:55
Nosotros, ¿cómo la vamos a implementar?
00:16:56
Directamente con JDBC
00:16:59
Pero eso es competencia de la implementación de DAO
00:17:01
Vale, pues entonces aquí haríamos
00:17:03
Y...
00:17:06
Sí, se puede
00:17:09
Punto DAO
00:17:14
Implementación
00:17:21
Y aquí ya haríamos una clase
00:17:23
Venta DAO
00:17:27
implementación
00:17:34
y esta clase
00:17:36
ahora ya si que va a ser
00:17:38
la implementación
00:17:40
de venta dao
00:17:42
entonces
00:17:44
al implementar venta dao
00:17:50
pues ahora ya si que
00:17:55
vamos a tener que darle cuerpo a esto
00:17:57
y ahora ya para darle cuerpo
00:17:59
a esto tendremos que ver
00:18:01
como gestionamos las conexiones
00:18:02
donde la ponemos la conexión
00:18:05
donde la ponemos y como la gestionamos
00:18:07
y luego ya
00:18:10
como usamos esa conexión
00:18:11
son dos problemas, uno es la gestión de la conexión
00:18:13
a la base de datos, que no es trivial
00:18:15
y otro es
00:18:17
una vez que tengo esa conexión
00:18:19
que ya veré de donde la saco
00:18:21
hacer las operaciones
00:18:22
que esto ya es muy sencillo
00:18:25
¿vale?
00:18:27
y ya está, y este sería el JDBC
00:18:29
a pelo, y es que no tendría
00:18:31
más que esto que lo completaremos el próximo día
00:18:33
que se completa rápido
00:18:35
luego ya a partir de ahí es irle poniendo algunas capitas
00:18:37
para que todo este código que nos queda aquí
00:18:39
que para cualquier tontería
00:18:41
sea un insert, sea un find
00:18:43
al final acaban siendo un montón de tries
00:18:44
y un montón de cosas
00:18:47
pues para que ese código se quede un poquito más reducido
00:18:48
le vamos poniendo capas
00:18:51
dime
00:18:52
es un poco corto la pregunta
00:18:53
bueno, creo
00:18:55
¿por qué usamos inter en vez de int?
00:18:56
a ver
00:19:02
bueno
00:19:03
el envolvente al ser un objeto
00:19:05
pues facilita
00:19:08
su uso en colecciones, en streams
00:19:10
en un montón de clases
00:19:12
de Java
00:19:14
que no permiten uso de primitivos
00:19:15
entonces usar el envolvente
00:19:18
es que si no
00:19:20
Java muchas veces ese propio int
00:19:21
ya lo va a promocionar él al envolvente
00:19:24
entonces hombre
00:19:26
pues integer ¿por qué
00:19:28
lo uso?
00:19:30
es más bonito, más completo
00:19:32
pues de nuevo depende del contexto
00:19:34
pero yo lo veo más
00:19:41
te lo vas a encontrar más en una aplicación
00:19:43
grande y gorda como normalmente ese
00:19:44
al final acabe
00:19:46
metiéndose a lo mejor en alguna colección
00:19:48
en algún otro sitio, en algún stream
00:19:51
pues es que va a promocionar a integer
00:19:53
igualmente
00:19:55
y vas a poder hacer cosas con él que no podías hacer
00:19:55
con un primitivo, porque integer tiene métodos
00:19:58
claro, porque es un objeto
00:20:00
entonces pues hombre es más completo
00:20:01
y tampoco es que vayas a perder memoria
00:20:03
por un tubo por poner integer en vez de int
00:20:06
bueno, no sé
00:20:08
queda mejor
00:20:12
más completito
00:20:14
y a la vista
00:20:15
queda mucho más claro
00:20:18
un integer es que lo ves muy grande y muy gordo
00:20:20
integer, int es como más pequeño
00:20:22
y más corto, no son otras letras
00:20:24
entonces parece una chorrada
00:20:26
pero no lo es, que cuando tú abres
00:20:28
una aplicación, porque vosotros no vais
00:20:30
a hacer aplicaciones desde cero
00:20:32
vais a abrir aplicaciones que van a ser
00:20:33
un galimatías, cuando te abres una aplicación
00:20:36
y más o menos te puedes hacer
00:20:38
una idea general de por dónde van los tiros
00:20:40
ostras, esa aplicación
00:20:42
está muy bien hecha y tú tienes mucho ganado
00:20:43
entonces, usar envolventes
00:20:46
en lugar de tipos primitivos, es la tontería
00:20:48
pero facilita eso, facilita
00:20:50
la elegibilidad del código también
00:20:51
son pequeños factores
00:20:53
que al
00:20:55
que, pero de nuevo
00:20:56
es el efecto
00:20:59
lo he interiorizado, siempre lo hago así, lo veo
00:21:01
hacer así y ya, pues bueno
00:21:03
al final se te olvida un poco porque lo haces
00:21:05
pero para mí tiene sentido
00:21:07
eso, que hay un montón de estructuras de Java
00:21:09
que te van a promocionar el envolvente igualmente
00:21:11
y que es mucho más flexible
00:21:14
no sé si te he convencido, pero bueno
00:21:15
eh...
00:21:19
- 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:
- 4
- Fecha:
- 3 de diciembre de 2025 - 12:11
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 21′ 24″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 92.36 MBytes