Curso de Java Avanzado
Bienvenido al Curso de Java Avanzado. Es la continuación del Curso de Java: Fundamentos de Programación y cubre todo lo que necesitas para desarrollar aplicaciones Java profesionales: programación funcional, streams, concurrencia, acceso a bases de datos con JDBC e Hibernate, y desarrollo de aplicaciones y APIs con Spring y Spring Boot.
Es adecuado para el segundo curso de los ciclos formativos de DAM y DAW (módulos de Acceso a Datos, Programación de Servicios y Procesos y Desarrollo Web en Entorno Servidor) y para asignaturas universitarias de programación avanzada e ingeniería del software.
💡 Consejo: Necesitas dominar Java básico y la programación orientada a objetos. Si no es así, empieza por el Curso de Java: Fundamentos de Programación. Para la parte de bases de datos te será útil el Curso de Bases de Datos.
¿Qué vas a aprender?
Al finalizar este curso serás capaz de:
- Construir y gestionar proyectos con Maven y Gradle
- Dominar los genéricos y las colecciones avanzadas
- Programar en estilo funcional con lambdas, referencias a métodos,
Optionaly la API de streams - Trabajar con fechas y horas con
java.time - Escribir programas concurrentes con hilos, executors,
CompletableFuturee hilos virtuales - Leer y escribir ficheros con NIO.2 y procesar JSON
- Comunicar aplicaciones por red con sockets y el cliente HTTP de Java
- Aplicar los patrones de diseño más importantes
- Probar tu código con JUnit, Mockito, AssertJ y Testcontainers
- Acceder a bases de datos relacionales con JDBC, transacciones, pools de conexiones y el patrón DAO
- Persistir objetos con JPA e Hibernate: entidades, relaciones, herencia, consultas JPQL y rendimiento
- Entender el núcleo de Spring: inversión de control e inyección de dependencias
- Desarrollar aplicaciones con Spring Boot: Spring Data JPA, APIs REST, aplicaciones web con Thymeleaf y seguridad con Spring Security
- Probar y desplegar aplicaciones Spring Boot con Docker
Versión del curso
El curso utiliza Java 25 LTS, Spring Boot 4.1 (sobre Spring Framework 7), Hibernate 7.4 (Jakarta Persistence) y MySQL 8.4 LTS como base de datos principal, además de H2 para pruebas. La base de datos de ejemplo es la misma EMPRESA del Curso de Bases de Datos, adaptada a MySQL.
Recursos para descargar:
- Scripts de la base de datos EMPRESA para MySQL: empresa_mysql_crear.sql, empresa_mysql_datos.sql y empresa_mysql_borrar.sql.
- Proyecto completo empresa-app del bloque de Spring (estado final del proyecto del módulo 24): empresa-app.zip. Copia
.env.examplecomo.envantes de usar Docker Compose.
Estructura del curso
El curso se divide en 25 módulos agrupados en cinco bloques:
Bloque 1: Java moderno (Módulos 00-05)
| Módulo | Tema | Descripción |
|---|---|---|
| 00 | Introducción | Ecosistema Java, versiones y ciclo de soporte, repaso y novedades de Java 9 a 25 |
| 01 | Maven y Gradle | Herramientas de construcción, ciclo de vida, dependencias, repositorios y estructura de proyectos |
| 02 | Genéricos y colecciones avanzadas | Comodines, PECS, borrado de tipos, colecciones inmutables y secuenciadas, Comparator avanzado |
| 03 | Programación funcional | Lambdas, interfaces funcionales, referencias a métodos, composición y Optional |
| 04 | La API de Streams | Operaciones intermedias y terminales, colectores, agrupaciones, streams paralelos y gatherers |
| 05 | Fechas y horas con java.time | LocalDate, LocalDateTime, ZonedDateTime, Instant, Duration, Period y formateo |
Bloque 2: Concurrencia, E/S y diseño (Módulos 06-11)
| Módulo | Tema | Descripción |
|---|---|---|
| 06 | Concurrencia: fundamentos | Procesos e hilos, Thread, Runnable, sincronización, condiciones de carrera e interbloqueos |
| 07 | Concurrencia moderna | ExecutorService, CompletableFuture, colecciones concurrentes, hilos virtuales y concurrencia estructurada |
| 08 | E/S avanzada y JSON | NIO.2, recorrido de directorios, watch service, serialización y JSON con Jackson |
| 09 | Programación en red | TCP/IP, sockets cliente y servidor, servidor multihilo, HttpClient y consumo de APIs REST |
| 10 | Patrones de diseño | Principios SOLID, patrones creacionales, estructurales y de comportamiento |
| 11 | Testing avanzado | JUnit avanzado, pruebas parametrizadas, Mockito, AssertJ, cobertura y Testcontainers |
Bloque 3: Acceso a datos (Módulos 12-16)
| Módulo | Tema | Descripción |
|---|---|---|
| 12 | JDBC: fundamentos | Arquitectura JDBC, drivers, conexión, Statement, PreparedStatement, ResultSet y metadatos |
| 13 | JDBC: transacciones y patrón DAO | Transacciones, lotes, pools de conexiones con HikariCP, patrón DAO y capa de servicio |
| 14 | JPA e Hibernate | Mapeo objeto-relacional, configuración, entidades, EntityManager y ciclo de vida |
| 15 | Relaciones y herencia | @OneToOne, @OneToMany, @ManyToOne, @ManyToMany, cascadas, carga perezosa y herencia |
| 16 | Consultas y rendimiento | JPQL, consultas con nombre, Criteria API, SQL nativo, problema N+1, caché y fetch joins |
Bloque 4: Spring y Spring Boot (Módulos 17-23)
| Módulo | Tema | Descripción |
|---|---|---|
| 17 | Spring Framework: núcleo | Inversión de control, inyección de dependencias, beans, ámbitos, configuración y AOP |
| 18 | Spring Boot | Spring Initializr, starters, autoconfiguración, application.properties/YAML, perfiles y Actuator |
| 19 | Spring Data JPA | Repositorios, consultas derivadas, @Query, paginación, proyecciones y transacciones |
| 20 | APIs REST con Spring | Controladores REST, DTO, validación, gestión de errores, OpenAPI/Swagger y clientes REST |
| 21 | Aplicaciones web con Spring MVC | Patrón MVC, controladores, plantillas Thymeleaf, formularios y validación |
| 22 | Spring Security | Autenticación, autorización, usuarios en base de datos, formularios de login y JWT |
| 23 | Testing y despliegue | Pruebas con @SpringBootTest y slices, MockMvc, Testcontainers, empaquetado y Docker |
Bloque 5: Proyecto (Módulo 24)
| Módulo | Tema | Descripción |
|---|---|---|
| 24 | Proyecto final | Aplicación completa con Spring Boot: API REST, web con Thymeleaf, seguridad, pruebas y Docker |
Requisitos
- Java básico y programación orientada a objetos (el curso de Fundamentos)
- Nociones de SQL
- JDK 25, un IDE (IntelliJ IDEA recomendado) y Docker (se explica cuándo hace falta cada herramienta)
Convenciones utilizadas
A lo largo del curso encontrarás estos indicadores:
📘 Concepto: Explicación teórica de un concepto importante.
💻 Ejemplo: Código de ejemplo que puedes copiar y ejecutar.
✏️ Ejercicio: Práctica para que resuelvas por tu cuenta.
⚠️ Importante: Información crucial que debes recordar.
💡 Consejo: Trucos y buenas prácticas profesionales.
Table of contents
- 00 - Introducción
- 01 - Maven y Gradle
- 02 - Genéricos y colecciones avanzadas
- 03 - Programación funcional
- 04 - La API de Streams
- 05 - Fechas y horas con java.time
- 06 - Concurrencia: fundamentos
- 07 - Concurrencia moderna
- 08 - E/S avanzada y JSON
- 09 - Programación en red
- 10 - Patrones de diseño
- 11 - Testing avanzado
- 12 - JDBC: fundamentos
- 13 - JDBC: transacciones y patrón DAO
- 14 - JPA e Hibernate
- 15 - Relaciones y herencia
- 16 - Consultas y rendimiento
- 17 - Spring Framework: núcleo
- 18 - Spring Boot
- 19 - Spring Data JPA
- 20 - APIs REST con Spring
- 21 - Aplicaciones web con Spring MVC
- 22 - Spring Security
- 23 - Testing y despliegue
- 24 - Proyecto final