Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Postwork Sesión 6

OBJETIVO

  • Declarar entidades y almacenarlas en una base de datos relacional.
  • Crear un repositorio de Spring Data y para guardar y recuperar entidades.
  • Usar la consola de H2 para visualizar la información de la base de datos.

DESARROLLO

El postwork se realizará en equipo, los cuales serán formados previamente a la sesión uno.

El propósito de este Postwork es retomar el proyecto del módulo anterior y realizar las modificaciones descritas a continuación.

  1. Agrega el driver de MySQL como dependencia del proyecto.

  2. Agrega las propiedades para realizar la conexión a la base de datos en el archivo application.properties del proyecto.

  3. Añade un nuevo paquete llamado entities, dentro del paquete persistence.

  4. Crea una copia de los objetos contenidos en el paquete model pero coloca las anotaciones de JPA en lugar de las validaciones.

  5. Crea un repositorio para cada una de las entidades (recuerda que debe ser una interface que extienda de JpaRepository).

  6. Agrega la dependencia de H2 a la aplicación y asegúrate de que puedes conectarte a esta.

    imagen

  7. Agrega una clase que implemente la interface CommandLineRunner de Spring para inicializar los catálogos de la aplicación.

    imagen

    imagen


Solución
  1. Agrega el driver de MySQL como dependencia del proyecto.

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
  2. Agrega las propiedades para realizar la conexión a la base de datos en el archivo application.properties del proyecto.

    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.hibernate.generate_statistics=true
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/bedu?serverTimezone=UTC
    spring.datasource.username=demos
    spring.datasource.password=
  3. Añade un nuevo paquete llamado entities, dentro del paquete persistence.

  4. Crea una copia de los objetos contenidos en el paquete model pero coloca las anotaciones de JPA en lugar de las validaciones.

    @Data
    @Table(name = "CLIENTES")
    @Entity
    @NoArgsConstructor
    public class Cliente {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        private String nombre;
    
        @Column(name = "correo_contacto", nullable = false)
        private String correoContacto;
    
        @Column(name = "numero_empleados")
        private String numeroEmpleados;
    
        private String direccion;
    }
    @Data
    @Table(name = "ETAPAS")
    @Entity
    @NoArgsConstructor
    public class Etapa {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long etapaId;
    
        private String nombre;
    
        @Column(unique = true, nullable = false)
        private Integer orden;
    }
    @Data
    @Table(name = "PRODUCTOS")
    @Entity
    @NoArgsConstructor
    public class Producto {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        private String nombre;
    
        private String categoria;
    
        private float precio;
    
        @Column(name = "numero_registro", length = 20)
        private String numeroRegistro;
    
        @Column(name = "fecha_creacion")
        private LocalDate fechaCreacion;
    }
    @Data
    @Table(name = "VENTAS")
    @Entity
    @NoArgsConstructor
    public class Venta {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long ventaId;
    
        private float monto;
    
        @OneToMany
        private List<Producto> productos;
    
        @ManyToOne
        private Cliente cliente;
    
        @Column(nullable = false)
        private LocalDateTime fechaCreacion;
    }
    @Data
    @Table(name = "VISITAS")
    @Entity
    @NoArgsConstructor
    public class Visita {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long id;
    
        @ManyToOne
        private Cliente cliente;
    
        @Column(nullable = false)
        private LocalDateTime fechaProgramada;
    
        @Column(nullable = false)
        private String direccion;
    
        @Column(nullable = false)
        private String proposito;
    
        @Column(nullable = false)
        private String vendedor;
    }
  5. Crea un repositorio para cada una de las entidades (recuerda que debe ser una interface que extienda de JpaRepository).

    public interface ClienteRepository extends JpaRepository<Cliente, Long> {
    }
    public interface EtapaRepository extends JpaRepository<Etapa, Long> {
    }
    public interface ProductoRepository extends JpaRepository<Producto, Long> {
    }
    public interface VentaRepository extends JpaRepository<Venta, Long> {
    }
    public interface VisitaRepository extends JpaRepository<Visita, Long> {
    }
  6. Completa los mappers:

    @Mapper(componentModel = "spring")
    public interface ClienteMapper {
        Cliente clienteModelToClienteEntity(org.bedu.java.backend.crm.model.Cliente clienteModel);
    
        org.bedu.java.backend.crm.model.Cliente clienteEntityToClienteModel(Cliente cliente);
    }
    @Mapper(componentModel = "spring")
    public interface EtapaMapper {
        Etapa etapaModelToEtapaEntity(org.bedu.java.backend.crm.model.Etapa etapaModel);
    
        org.bedu.java.backend.crm.model.Etapa etapaEntityToEtapaModel(Etapa etapa);
    }
    @Mapper(componentModel = "spring")
    public interface ProductoMapper {
        Producto productoModelToProductoEntity(org.bedu.java.backend.crm.model.Producto productoModel);
    
        org.bedu.java.backend.crm.model.Producto productoEntityToProductoModel(Producto producto);
    }
    @Mapper(componentModel = "spring")
    public interface VentaMapper {
        Venta ventaModelToVentaEntity(org.bedu.java.backend.crm.model.Venta ventaModel);
    
        org.bedu.java.backend.crm.model.Venta ventaEntityToVentaModel(Venta venta);
    }
    @Mapper(componentModel = "spring")
    public interface VisitaMapper {
        Visita visitaModelToVisitaEntity(org.bedu.java.backend.crm.model.Visita visitaModel);
    
        org.bedu.java.backend.crm.model.Visita visitaEntityToVisitaModel(Visita visita);
    }
  7. Agrega la dependencia de H2 a la aplicación y asegúrate de que puedes conectarte a esta.

    imagen

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
  8. Agrega una clase que implemente la interface CommandLineRunner de Spring para inicializar los catálogos de la aplicación.

    imagen

    imagen


Siguiente -> sesión 7

Regresar