20260217 MongoDB_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:
Bueno pues ahora ya lo tenemos creado
00:00:02
Con las dos dependencias
00:00:04
MongoDB y SpringWeb
00:00:06
Que eso no se ha grabado pero no pasa nada
00:00:08
Se ha grabado en vuestros cerebros
00:00:09
Y
00:00:11
Y fijaos
00:00:12
Solo con esas dos
00:00:16
La leche
00:00:18
Todo esto
00:00:20
Trae muchas cosas verdad
00:00:23
Y eso que no le hemos puesto
00:00:26
Ni validación ni nada
00:00:29
Vale
00:00:31
Vale
00:00:32
Nos crea el main
00:00:34
Para arrancar la aplicación
00:00:37
Y no nos crea nada más
00:00:39
Entonces
00:00:41
Nos ofrece un primer
00:00:42
Fichero de configuración
00:00:45
Que es este, donde podemos meter ya
00:00:47
Los datos que necesita
00:00:49
Spring, que es la base de datos
00:00:51
Aquí lo podríamos
00:00:53
Hacer en un properties, Spring, MongoDB
00:00:55
No se que
00:00:57
Pero como también hay otros formatos
00:00:58
De archivos de configuración
00:01:01
Que son los ya ml
00:01:02
Y con extensión yml
00:01:04
Pues vamos a hacer uno de esos
00:01:06
¿Vale? Entonces
00:01:08
A este le vamos a quitar directamente
00:01:10
Delete
00:01:13
Y vamos a hacernos
00:01:14
Un fichero de configuración con el otro formato
00:01:16
Pues por variar, porque estamos ya aburridos
00:01:18
De lo mismo todo el rato
00:01:21
Y porque se usa bastante
00:01:22
Sobre todo
00:01:24
Nuevo file
00:01:25
Aplication.yml
00:01:29
YML
00:01:36
A ver
00:01:40
Uy, ¿de dónde vienen las siglas?
00:01:43
Eso no me acuerdo
00:01:46
¿De dónde vienen las siglas?
00:01:47
YML
00:01:52
YML
00:01:53
O YML
00:01:56
YAM no es un lenguaje de marcado
00:01:57
Vale
00:02:09
De ahí viene
00:02:10
Alguna vez lo supe
00:02:11
Pero se me había olvidado completamente
00:02:13
Porque ya no tenemos edad de retener
00:02:14
Vale
00:02:16
Vale
00:02:17
Bueno, pues entonces, ¿por qué quería buscar yo esto?
00:02:19
Sí, pero esto es así
00:02:25
Vale, las extensiones normalmente
00:02:26
Se asume como estándar que sean tres caracteres
00:02:28
Vale, entonces
00:02:31
¿Por qué buscaba yo esto?
00:02:32
Lo buscaba precisamente
00:02:35
Para
00:02:37
Ponerte manifiesto
00:02:38
Que esto no es un lenguaje de marcado
00:02:40
Con lo cual aquí no hay marcas
00:02:42
Aquí lo que hay es tabulaciones
00:02:44
Y las tabulaciones
00:02:47
O las respetas
00:02:50
O las cagados
00:02:51
Como el puñetero Python
00:02:53
Que no sé quién ahí se inventó ese lenguaje absurdo
00:02:55
Es muy feo
00:02:58
No es para desarrolladores
00:03:03
Lo que pasa es que
00:03:12
Ay, pero para aprender está muy bien porque es muy facilito
00:03:13
Sí, vale, es muy facilito
00:03:15
Porque es todo como muy intuitivo
00:03:18
Pero el aprendizaje
00:03:19
Está ya muy viciado
00:03:21
Aprender con Python ya aprendes con muchos vicios
00:03:23
Entonces
00:03:26
Claro, entonces, bueno
00:03:27
Pues esto es igual
00:03:29
O respetas los tabuladores o las cagaos
00:03:31
Entonces, vamos a configurar lo básico
00:03:33
Lo básico
00:03:36
Entonces tengo yo aquí mi chuleta
00:03:37
Uy
00:03:39
Vale
00:03:40
Lo básico sería, venga, de sprint, su tabulación de MongoDB, ¿qué propiedad quiero? URI, vale, pues esto sería lo básico, con esto ya no necesitamos más, con esto de aquí, vale, aquí la URL de MongoDB y ya está, con esto ya nos va a tirar, no necesitamos más, vale.
00:03:43
Claro, una tabulación cada vez que te metes en algo dentro
00:04:11
Yo creo que es la que te hace
00:04:16
No, yo creo que es la que te hace
00:04:24
Bueno, a mí no me hace ninguna
00:04:28
Pero
00:04:33
Bueno, pues
00:04:34
Son dos
00:04:37
Bueno, pues esto es lo feo
00:04:40
De los lenguajes que no son de marcado
00:04:50
Que no sabes ya muy bien
00:04:51
Si estás tabulando correctamente
00:04:55
En nuestro caso
00:04:56
Ponemos alumnos
00:04:59
Ah, bueno, sí
00:05:00
La base de datos con la que tú quieras hacer las pruebas
00:05:03
A ver, vamos a intentar hacerlo
00:05:07
Todo homogéneo
00:05:09
Ya que he dicho tareas, pones tareas
00:05:10
Y ahora creáis la base de datos tareas
00:05:12
Que luego cuando vamos a insertar los documentos
00:05:15
No os valdrá que metáis nada
00:05:16
Es decir, haced una colección
00:05:17
Que se llame tareas, limpia y ya está
00:05:21
Esto no es como crear una base de datos
00:05:23
Que uno tiene que hacerla hasta hablar los campos
00:05:25
Colección tareas, limpia y ya está
00:05:27
Ya le iremos insertando documentos
00:05:29
Y así vamos todos iguales
00:05:31
Por si nos perdemos
00:05:33
Bueno, pues en principio
00:05:34
Ya estaría todo
00:05:37
Porque esto lo vamos a poner después cuando nos lo pide el cuerpo
00:05:38
Que todavía no nos lo pide
00:05:41
¿Vale? Para que nos queden bonitas las cosas
00:05:42
¡Hala!
00:05:44
Ahora, una vez que ya tenemos
00:05:47
La base de datos
00:05:48
Bueno, yo es que en la mía
00:05:49
Como el proyecto no me habéis cambiado
00:05:53
Y he llamado tareas
00:05:55
Pues, ¿vale?
00:05:56
Poned la que queráis, pero
00:05:59
¿Queréis alumnos? Pues venga, alumnos
00:06:00
Pero entonces, me tenéis que decir que modelo
00:06:02
Alumnos, o sea, que es que yo no quiero
00:06:04
Usar mi colección alumnos, porque esa colección
00:06:06
Ya está llena de mierdas
00:06:08
Pero es que al proyecto le he llamado tareas
00:06:09
Pues no me liéis, poned la que queráis
00:06:12
Tareas
00:06:14
Todo el mundo, hala, ya está
00:06:16
Que si no, quiero cambiar de nombre al proyecto
00:06:17
Venga, lo único es que
00:06:20
Cuando luego ya lo ejecutemos
00:06:23
Aseguraos de que tenéis
00:06:24
Una base de datos que se llama tareas
00:06:26
Ya está, una base de datos que se llama tareas
00:06:28
Con una colección
00:06:29
No, hombre, creáis una nueva
00:06:31
Si es que es darle al más y poner tareas
00:06:35
Ya está, no tenéis que hacer nada más
00:06:37
Darle al más y ponerlo
00:06:38
Que yo tengo aquí una
00:06:40
Esta
00:06:41
Tareas
00:06:42
Por ejemplo
00:06:45
Vale, pues entonces
00:06:48
¿Qué es lo siguiente que hacemos?
00:06:50
Después de
00:06:52
Fijar la configuración
00:06:53
Muy bien
00:06:55
Nuestro modelo de clases
00:06:57
Vale, pues venga
00:07:00
Nos hacemos nuestro paquetillo
00:07:01
Cuidado con
00:07:05
Respetar la raíz del empaquetado
00:07:15
Porque ya sabéis que es print boot
00:07:17
Si no se va a volver loco
00:07:19
Para buscar nuestros bins
00:07:21
Vale
00:07:22
Pues venga
00:07:25
Nuestra aplicación va a tener tareas
00:07:26
Eso va a tener nuestra aplicación
00:07:36
Tareas
00:07:38
Vale
00:07:40
Luego esto sería
00:07:40
Lo que en JPA
00:07:43
Pondríamos ahí, que anotación pondríamos en JPA
00:07:45
Entity
00:07:48
Aquí no ponemos entity
00:07:49
Sino que ponemos
00:07:51
Document
00:07:53
¿Vale?
00:07:55
No es tan obvio
00:07:57
¿Vale?
00:08:03
Luego, cada objeto tarea
00:08:06
Se va a mapear a un documento
00:08:10
¿Vale?
00:08:13
Entonces
00:08:16
La colección
00:08:16
Podría llamarse de otra manera
00:08:19
Por ejemplo, aquí en mi caso
00:08:20
Se llama tareas
00:08:23
Perdón, la colección
00:08:25
La colección
00:08:27
En mi caso se llama tareas con S
00:08:29
En plural
00:08:32
Tareas con S
00:08:33
Entonces, aquí debería
00:08:35
Cambiarle el nombre
00:08:38
¿Vale? Debería cambiarle el nombre
00:08:40
Y, ¿vale?
00:08:42
Ahora, los campos
00:08:53
El campo clave
00:08:55
Existe
00:08:57
Es obligatorio
00:08:57
Que es este, ¿vale?
00:09:00
El campo id
00:09:02
Y aquí, ¿qué va a ser?
00:09:03
Pues va a ser un object id
00:09:06
El campo id, ¿verdad?
00:09:08
Recordáis que el campo id
00:09:10
Es un tipo especial
00:09:12
Que
00:09:14
Que es este de aquí
00:09:15
Un campo especial
00:09:18
Pues sería este
00:09:19
Un object id
00:09:21
No hace falta que se llame id aquí
00:09:23
Aquí lo podéis llamar como queráis
00:09:38
Pero la anotación sí que tiene que ser id
00:09:40
Lógicamente, este campo no lo manejaremos
00:09:41
Desde Java
00:09:44
Y ahora aquí el resto de campos
00:09:45
Pues venga, ¿qué campos queremos que tenga la tarea?
00:09:47
Pues la tarea va a tener un nombre
00:09:50
Y va a tener una descripción
00:09:52
Y va a tener
00:09:58
Vamos a ponerle dos arrays, uno simple y otro complejo
00:10:00
Entonces
00:10:07
Va a tener un array de los miembros de la tarea
00:10:08
Participantes
00:10:13
Y va a tener un array de los ítems de la tarea
00:10:15
Getter y setter, nos falta hacer ítem
00:10:23
Podemos ir incorporando
00:10:44
Constructores según vayamos necesitando
00:10:46
Equals
00:10:49
Hascode según vayamos necesitando
00:10:50
Tu stream según vayamos necesitando
00:10:52
Ahora mismo, nada
00:10:54
Hay lógicamente más anotaciones
00:10:55
Estas anotaciones
00:10:59
Vienen de Spring Data MongoDB
00:11:01
¿Vale? Estamos trabajando
00:11:04
Ya directamente con la capa de Spring Data
00:11:06
Que está por encima
00:11:07
Luego estas son anotaciones de Spring Data
00:11:08
Que son las que va a usar el driver
00:11:11
Luego para hacer el mapeo
00:11:14
Hacer los fines, etc
00:11:15
Es decir, lo estamos enmascarando de a todo desde el principio
00:11:16
Que hay más anotaciones
00:11:20
En Spring Data MongoDB hay más
00:11:23
La estándar
00:11:25
Una que sí que tenemos que conocer
00:11:27
Si algún campo cambiara de nombre
00:11:30
Pues serían
00:11:32
Fill
00:11:33
Lo que en Spring Data JPA era column
00:11:34
Pues aquí sería fill
00:11:37
Sí, que el campo column
00:11:39
En Spring Data JPA
00:11:43
Que sería para cambiar el nombre de un campo
00:11:44
Pues ese campo aquí pasa
00:11:46
¿Vale?
00:11:49
Entonces document es el entity
00:11:50
Id es id
00:11:53
Field es column
00:11:54
¿Y qué es lo que aquí no hay?
00:11:56
One to one
00:12:00
One to many, many to one
00:12:01
Eso es lo que aquí no existe
00:12:02
Porque aquí ya está la información metida dentro
00:12:04
Aquí no hay one to many, many to one
00:12:06
no hay nada
00:12:09
porque
00:12:09
la base de datos
00:12:12
la tiene dentro exactamente igual que esta
00:12:14
igual, no hay ninguna clave
00:12:16
ajena que te lleve de una a otra
00:12:19
entonces es mucho más fácil
00:12:20
a ver si son más redundantes
00:12:22
en el sentido de que si varios tienen el mismo
00:12:29
trabajo, ese subdocumento
00:12:31
está en todas partes
00:12:33
pero claro, pesa
00:12:34
tampoco almacenar eso
00:12:37
que casi te compensa
00:12:38
los bits son estos, pues no pesan nada en realidad
00:12:40
una tabla de una base de datos
00:12:42
pues tiene un montón de metadatos en realidad
00:12:44
aquí metadatos no hay tantos
00:12:46
vale, pues aquí si
00:12:48
quisiéramos cambiar el nombre
00:12:52
pues sería esto
00:12:54
por ejemplo, vale
00:12:55
ahora vamos a
00:12:57
hacernos el ítem
00:13:00
vale, pues nada, esta
00:13:01
no es un document
00:13:18
ni tiene id, ni tiene nada
00:13:20
porque esto va dentro del otro
00:13:22
Luego aquí no hay que poner ninguna anotación
00:13:23
Aquí no hay que poner ninguna
00:13:26
Hay que poner anotaciones solo en el documento
00:13:27
Que forma parte
00:13:30
Este es el sub-documento
00:13:31
Los sub-documentos no tienen anotaciones, no tienen nada
00:13:33
Pues nada, el ítem
00:13:35
Pues es que este no necesita ni clave
00:13:40
Porque es que ya está dentro
00:13:42
Los sub-documentos no necesitan clave
00:13:43
Los que necesitan clave son los otros
00:13:45
Pues el ítem, pues nada
00:13:46
Tiene su nombre
00:13:49
Y
00:13:53
A ver
00:14:00
Pues yo que sé, si está completado o no está completado
00:14:02
Por ejemplo
00:14:09
Completado
00:14:10
¿Listo?
00:14:15
¿Listo?
00:14:26
Podría, sí
00:14:31
Vale, es un buen hábito
00:14:32
Por ejemplo
00:14:35
No, he puesto, pero pongo el que quieras
00:14:43
He puesto ArrayList
00:15:17
Por variar
00:15:18
Normalmente pondría ArrayList en la colección que tenga menos
00:15:20
Bueno, pues un modelo sencillo
00:15:26
Podría ser este
00:15:30
Y ya está
00:15:31
Y ahora, lo siguiente que hacemos
00:15:33
Cuando trabajamos con Spring Data
00:15:38
Sea JPA, sea Spring Data
00:15:39
MongoDB, sea lo que sea
00:15:42
Lo siguiente ya que hacemos, una vez que tenemos el modelo
00:15:43
Es
00:15:45
El
00:15:46
El repositorio
00:15:48
¿Vale?
00:15:52
Si no trabajáramos con Sprint, lo siguiente que haríamos sería el DAO.
00:15:53
Pero al trabajar con Sprint, hacemos el repositorio que ya envuelve al DAO por dentro.
00:15:58
Pues, ala, nos hacemos nuestra interfaz, tareas, repositorio.
00:16:03
Vale, y para que este sea un repositori
00:16:32
Tiene que heredar
00:16:38
De Mongo Repositori
00:16:39
Mongo Repositori
00:16:41
Sin más, yo creo que sí
00:16:44
A ver, porque
00:16:46
Tengo aquí un repo por ahí
00:16:47
Sí, es Mongo Repositori sin más
00:16:49
Vale
00:16:52
Repositori
00:16:53
Repositori
00:16:57
De la entidad
00:17:01
¿Vale?
00:17:05
Y de...
00:17:07
¿Eh?
00:17:09
Sí.
00:17:15
Sí, sería...
00:17:23
Espérate, a ver, aquí como lo tengo puesto.
00:17:24
Ah, vale, vale, vale.
00:17:31
Nada, no. Es que no es necesario
00:17:32
ponerle object id. Porque lo puedes
00:17:34
poner object id, pero
00:17:36
él lo mapea, lo mapea, hace la transformación
00:17:38
a string directamente.
00:17:40
¿Vale? Entonces,
00:17:42
tú puedes poner aquí string tranquilamente
00:17:43
no pasa nada y hace la transformación
00:17:46
hace la transformación
00:17:49
y ya está
00:17:50
es que si
00:17:51
es mejor no trabajar con un object id
00:17:54
en java, en realidad, porque no es un campo
00:17:56
que puedes trabajar con él, pero no es un campo
00:17:58
que vas a usar, un string siempre
00:18:00
estamos más acostumbrados, es más manejable
00:18:02
entonces
00:18:04
mejor que un object id que es meter
00:18:05
demasiada
00:18:08
basurilla de mongo aquí dentro
00:18:09
Pues el string que es el mapeo
00:18:12
De eso de ahí directamente
00:18:15
¿Vale?
00:18:16
Vale, entonces
00:18:21
Y los getter y setter los tengo que cambiar
00:18:23
Aquí
00:18:27
Vale
00:18:29
Los getter y setter
00:18:30
Aquí
00:18:33
Vale
00:18:34
Stream
00:18:38
Aquí puedes poner lo que sea
00:18:40
¿No?
00:18:44
Internet, stream
00:18:46
¿Dónde?
00:18:48
como id
00:18:49
y ya él lo transforma a object id
00:18:49
no, otro tipo de
00:18:53
dato que no sea string, no estoy tan segura
00:18:55
que lo transforme, porque es que es un string
00:18:57
realmente, es decir
00:18:58
el object id es
00:19:00
es esto
00:19:02
entonces si tú lo pones como string, te mapea
00:19:03
esto tal cual, si es que quieres verlo
00:19:07
como otro tipo de dato
00:19:09
no podría hacer un casting sencillo
00:19:10
claro, entonces
00:19:13
si lo mapeas a object id, luego lo tienes
00:19:15
que sacar a través del método que tenga
00:19:17
Objet y de dentro
00:19:19
O a que a las dos te funcionaría
00:19:20
Vale
00:19:22
Venga
00:19:22
Pues ya tenemos el repositorio
00:19:26
Que ya no sé cuál es el
00:19:29
Mío y cuál es el
00:19:31
El otro
00:19:32
Pues este repositorio ya te genera
00:19:33
Un montón de métodos
00:19:38
Sin más
00:19:40
Pero podemos poner nosotros los nuestros propios
00:19:40
Que en función
00:19:44
Del nombre que pongamos que tiene un montón
00:19:46
De opciones
00:19:48
voy a tejear las búsquedas
00:19:49
solas o si no
00:19:50
si aún así hay alguna consulta que no
00:19:52
encontramos un nombre
00:19:54
que se adapte, podemos poner una
00:19:55
pero vamos a hacer primero el servicio
00:19:58
y el controller para ver si nos funciona
00:20:00
todo y luego ya sí que podemos
00:20:02
jugar a poner aquí
00:20:04
métodos propios del repositorio
00:20:06
¿también usa jpql?
00:20:08
esto no es sql, a ver esto tiene
00:20:11
su criterio, ya lo hemos visto
00:20:13
entonces jpql no puede consultar
00:20:15
aquí, pues venga
00:20:18
servicio, que eso sería
00:20:19
lo siguiente, ¿qué haríamos?
00:20:28
que no lo he preguntado, pero ya lo
00:20:30
me lo habríais contestado
00:20:32
¿yo qué hago?
00:20:35
ah, es que estoy en otro proyecto
00:20:41
que no es, ¿verdad que sí?
00:20:43
¿dónde estoy? aquí
00:20:45
vale, a ver, ¿qué hora
00:20:46
es? 16
00:21:09
bueno, en fin, como hay 10
00:21:12
paramos, ¿vale?
00:21:13
Vale
00:21:14
Y ahora
00:21:18
Pues este necesita el repositorio
00:21:19
A ver
00:21:23
Cuidado, vamos a anotar
00:21:23
Para que Spring lo
00:21:26
Para que Spring lo encuentre
00:21:28
El repositorio no hace falta anotarlo
00:21:30
Ya sabéis
00:21:32
Pero este sí
00:21:33
Entonces, este va a necesitar el repositorio
00:21:34
Tareas
00:21:38
Repositori
00:21:41
el repo
00:21:44
que lo
00:21:46
inyecta por el constructor
00:21:47
ah, no
00:21:50
vacío no hace falta
00:22:00
lo que quiero es que use
00:22:02
el constructor que va a usar sprint
00:22:04
es este, este de aquí
00:22:06
entonces
00:22:09
y ahora
00:22:10
disp
00:22:12
este
00:22:13
ala
00:22:17
Pues eso lo estuvimos preguntando
00:22:19
A ver
00:22:26
¿Por qué Sprint recomendaba
00:22:26
Inyectar por constructor
00:22:30
Y no por cableado
00:22:31
Autocableado, o sea por
00:22:34
Y no nos supo decir
00:22:36
Ninguna conclusión, nada más que era la recomendación
00:22:40
Pero
00:22:43
Yo
00:22:45
Creo recordar
00:22:48
Es que creo recordar una cosa
00:22:51
Que dijimos en ese momento
00:22:54
Que tenía bastante sentido
00:22:55
Pero
00:22:57
Sí, que está relacionado con que te da más flexibilidad
00:22:58
O sea, más
00:23:08
El Autowire usa el constructor
00:23:08
Suyo
00:23:11
Tú aquí puedes de alguna manera marcar
00:23:12
Puedes especificar
00:23:16
Qué hacer en el constructor, puedes hacer más cosas
00:23:17
Tienes más libertad
00:23:19
Supongo que va por ahí
00:23:20
En cualquier caso se desrecomienda
00:23:24
Si puedes inyectar por constructor
00:23:27
Usar el otro, pues nada, hagámoslo
00:23:28
Vale, entonces aquí
00:23:30
El public
00:23:32
Este, pues este
00:23:36
Método de servicio, vamos a
00:23:38
Recuperar
00:23:40
Por ejemplo, todas las tareas que tenemos
00:23:41
Una lista de tareas
00:23:44
Venga, eso es lo primero que vamos a hacer
00:23:46
Esto por el nombre no hace nada
00:23:50
Depende de cómo pongas el nombre
00:23:52
Claro, esa es la idea
00:23:54
Y mucho más, incluso
00:23:58
GetTareas
00:23:59
Sí, pero es que llega un momento
00:24:02
Ya esto es como la IA
00:24:05
Que ya no saben lo que hacen
00:24:07
Entonces
00:24:08
Pues nuestro repositorio
00:24:11
Efectivamente, solo por el hecho de ser un MongoDB
00:24:13
Repositorio, mira todo lo que tiene
00:24:16
Pues lo mismo que el Spring Data JPA
00:24:18
Y no solo eso
00:24:20
Sino la posibilidad de hacer tus propios métodos
00:24:22
Que ya haremos, pues en este caso será el find
00:24:24
vale, ala
00:24:26
ya está
00:24:31
ya tenemos todo
00:24:32
todas las tareas
00:24:37
en el servicio
00:24:39
y ahora tendríamos que hacer el controller
00:24:40
que se hace el método get
00:24:43
que llama a este, lo muestra
00:24:44
etcétera, pero eso no nos va a dar
00:24:47
tiempo a hacerlo ahora, vamos solamente
00:24:49
a ejecutarlo
00:24:50
no vamos a ver nada, pero a ver si nos
00:24:51
da algún error, porque si nos da
00:24:55
algún error es porque Spring Boot ha detectado
00:24:57
algún error en nuestro fichero de configuración
00:24:58
entonces a lo mejor ese ya
00:25:00
ML, pues podríamos tenerlo mal
00:25:02
vamos a asegurarnos de que lo que hemos hecho
00:25:04
hasta ahora, a Spring no le
00:25:06
da mal rollo
00:25:08
vale, magnífico
00:25:09
las anotaciones están
00:25:20
bien, el archivo de configuración
00:25:23
está bien, Spring Boot
00:25:25
ha sido capaz de escanear
00:25:27
todo sin problema, pero claro
00:25:28
nos falta el controller para pedirle ahora ya
00:25:30
a través del
00:25:33
navegador o de Postman
00:25:34
lo que queramos.
00:25:36
¿Has anotado esto?
00:25:44
No, me dice en tareas repositorio.
00:25:47
¿En tareas repositorio lo has puesto bien todo?
00:25:50
Sí.
00:25:54
¿Pero te da error o qué es?
00:25:54
Me dice, ¿aplicar un plan de testar?
00:25:59
¿Para hacer un...
00:26:02
Service.
00:26:03
si con el paquete del repositorio
00:26:27
no está colgando de app, no lo va a encontrar
00:26:54
claro, pues cuidado con eso porque
00:26:55
uno a lo mejor escribe el nombre del paquete
00:26:59
escribe app con tres p's pero no se ha dado cuenta
00:27:02
y se puede estar tres horas diciendo
00:27:04
porque no lo encuentra, porque no lo encuentra
00:27:06
porque no está en la jerarquía de paquetes.
00:27:07
- 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:
- 17 de febrero de 2026 - 18:20
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 27′ 23″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 113.05 MBytes