- Aprovechar la interface
CommandLineRunner
para ejecutar algunas tareas antes de que la aplicación comience a recibir peticiones. - Inicializar valores de catálogos en base de datos.
- Tener instalado el IDE IntelliJ Idea Community Edition con el plugin de Lombok activado.
- Tener instalada la última versión del JDK 11 o 17.
- Tener instalada la base de datos MySQL y los datos del usuario para conectarse
-
Entra al sitio de Spring Initializr. Ahí verás una sola página dividida en dos secciones. Comienza llenando la información de la sección del lado izquierdo. Selecciona:
-
En la ventana que se abre selecciona las siguientes opciones:
- Grupo, artefacto y nombre del proyecto.
- Tipo de proyecto: Maven Project.
- Lenguaje: Java.
- Forma de empaquetar la aplicación: jar.
- Versión de Java: 11 o 17.
-
En la sección de la derecha (las dependencias) presiona el botón
Add dependencies
y en la ventana que se abre busca las dependenciasSpring Web
,Lombok
,Spring Data JPA
yMySQL Driver
. -
Dale un nombre y una ubicación al proyecto y presiona el botón Generate.
-
En el proyecto que se acaba de crear debes tener el siguiente paquete
org.bedu.java.backend.sesion6.ejemplo2
. Dentro crea los subpaquetes:runners
,model
ypersistence
. -
Dentro del paquete
model
crea una clase llamadaEtapa
con los siguientes atributos:private Long etapaId; private String nombre; private Integer orden;
-
Decora la clase con la anotación
@Data
de Lombok:@Data public class Etapa { }
-
Decora también la clase con las siguientes anotaciones de JPA:
@Entity @Table(name = "ETAPAS") public class Etapa { }
-
Decora los atributos con las siguientes de JPA:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long etapaId; @Column(nullable = false, length = 100) private String nombre; @Column(nullable = false, unique = true) private Integer orden;
-
En el paquete
persistence
crea una interface llamadaEtapaRepository
que extienda deJpaRepository
. Esta interface permanecerá sin métodos:public interface EtapaRepository extends JpaRepository<Etapa, Long> { }
-
En el paquete
runners
crea una nueva clase llamadaEtapasVentaRunner
que implemente la interfaceCommandLineRunner
. Decora esta clase con la anotación@Component
de Spring.@Component public class EtapasVentaRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { } }
-
Declara un atributo final de tipo
EtapaRepository
y decora la clase con@RequiredArgsConstructor
:@RequiredArgsConstructor @Component public class EtapasVentaRunner implements CommandLineRunner { private final EtapaRepository etapaRepository; @Override public void run(String... args) throws Exception { } }
-
Dentro del método
run
crea un grupo de objetos de tipoEtapa
y guárdalos en la base de datos usando la instancia deetapaRepository
. Usaremos un método auxiliar para crear las instancias deEtapa
debido a una limitación con Lombok que deberás resolver en el reto para poder usar un Builder.@RequiredArgsConstructor @Component public class EtapasVentaRunner implements CommandLineRunner { private final EtapaRepository etapaRepository; @Override public void run(String... args) throws Exception { Etapa etapa1 = creaEtapa("En espera", 0); Etapa etapa2 = creaEtapa("Reunión de exploración", 1); Etapa etapa3 = creaEtapa("Metas establecidas", 2); Etapa etapa4 = creaEtapa("Plan de acción presentado.", 3); Etapa etapa5 = creaEtapa("Contrato firmado", 4); Etapa etapa6 = creaEtapa("Venta ganada", 5); Etapa etapa7 = creaEtapa("Venta perdida", 6); List<Etapa> etapas = Arrays.asList(etapa1, etapa2, etapa3, etapa4, etapa5, etapa6, etapa7); etapaRepository.saveAll(etapas); } private Etapa creaEtapa(String nombre, Integer orden) { Etapa etapa = new Etapa(); etapa.setNombre("En espera"); etapa.setOrden(orden); return etapa; } }
-
Ejecuta la aplicación. No debería haber ningún error en la consola y la aplicación debe iniciar de forma correcta.
-
La base de datos debe estar inicializada con las Etapas: