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, Optional y la API de streams
  • Trabajar con fechas y horas con java.time
  • Escribir programas concurrentes con hilos, executors, CompletableFuture e 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:

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