Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 13

Guía 1 Escuela de Soluciones de Inteligencia de Negocios

Tecnología

Desarrollo de
Servicios Web 2

Tema Nº3:
TEMA 01
APPLICATION Teoría
API REST - II de los

TEMA de
Indicador Nº3:
logro Nº3:
Desarrolla la arquitectura MVC a través del Dao, Service, Controller mediante
operaciones básicas para los servicios web Rest.
1
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

APPLICATION API REST - II


Subtema 3.1:
ORM
MARCO TEÓRICO

El desarrollo de una aplicación de negocio JAVA es orientado a objetos, sin embargo, las bases de datos relacionales
almacenan la información en forma de tabla con sus respectivas filas y columnas. Para realizar una correlación entre
ambos se necesita de una interfaz que permita guardar la información que se maneja dentro de la aplicación JAVA en el
modelo relacional de base de datos.

JPA es una abstracción de JDBC que permite comunicar ambos modelos de manera sencilla, realizando la conversión
entre objetos y tablas. Esta conversión se llama ORM (Mapeo Relacional de Objetos) y puede configurarse mediante un
xml o anotaciones.

Toda esta relación es transparente el desarrollador y para ello se deben crear los objetos de una manera singular, a éstos
se les llama entidades. JPA es una interfaz común y generalmente ésta es implementada por Frameworks de
persistencia, para los proyectos se ha elegido Hibernate. De esta manera será Hibernate el que realice el trabajo, pero
siempre funcionando bajo la API de JPA.

Anotaciones principales

Cuando se habla de una entidad, se hace referencia en cualquier caso a un objeto POJO (Plain Old Java Object), es decir
un objeto sencillo que no extiende de otro ni implementa funcionalidad fuera del mismo. Una entidad se caracteriza por
ser una clase de primer nivel, no ser final, proporcionar un constructor e implementar la interfaz java.io.Serializable.

Cualquier entidad JPA presenta numerosas etiquetas que la caracterizan, las necesarias para formar una entidad sencilla
serían:

 @Entity: informa al proveedor de persistencia que cada instancia de esta clase es una entidad.

 @Table: permite configurar el nombre de la tabla que se está mapeando con dicha entidad. Para ello
se hace uso del atributo name.

 @Colum: acompañará a cada uno de los atributos de la entidad y permitirá configurar el nombre de la
columna a la que dicho atributo hace referencia dentro del sistema relacional. Esta etiqueta posee
numerosos atributos, donde se puede indicar al framework propiedades que debe tener en cuenta para
la columna.

 @Id: acompañará aquel atributo que permita diferenciar las distintas entidades de manera que cada
una sea única, normalmente acompaña al que se asocie a la clave primaria de la tabla que se esté
mapeando.

 @JoinColumn: permite configurar aquel atributo que contiene una clave foránea a otra tabla.

 @OneToOne: se caracterizan porque solo puede existir una y solo una relación con la Entidad de
destino, de esta forma, la entidad marcada como @OnoToOne deberá tener una referencia a la
Entidad destino y por ningún motivo podrá ser una colección. De la misma forma, la Entidad destino
no podrá pertenecer a otra Instancia de la Entidad origen.

 @OneToMany: se caracterizan por Entidad donde tenemos un objeto principal y colección de objetos
de otra Entidad relacionados directamente. Estas relaciones se definen mediante colecciones, pues
tendremos una serie de objetos pertenecientes al objeto principal, se pueden diferenciar dos tipos:

2
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

o EAGER: se puede definir como un tipo de lectura temprana, es decir, en la consulta del
objeto se obtienen todos los valores de las entidades que están relacionadas con la
entidad. Esto es desaconsejable en el caso de asociaciones en las que se puedan ver
involucrados muchos objetos, ya que puede suponer un problema de rendimiento para
la aplicación.

o LAZY: se define como lectura demorada, permite obtener un objeto de base de datos
sin los valores de la relación a la que hace referencia el atributo. Es muy útil de cara al
rendimiento de la aplicación ya que evita obtener ciertas propiedades que puedan no ser
necesarias en la creación del objeto.

 @ManyToMany: se caracterizan por Entidades que están relacionadas con a muchos elementos de un
tipo determinado, pero al mismo tiempo, estos últimos registros no son exclusivos de un registro en
particular, si no que pueden ser parte de varios, por lo tanto, tenemos una Entidad A, la cual puede
estar relacionada como muchos registros de la Entidad B, pero al mismo tiempo, la Entidad B puede
pertenecer a varias instancias de la Entidad A.

HIBERNATE

Hibernate es un framework de persistencia de software libre que implementa la gestión de la API de persistencia de
Java. Este framework actúa de manera transparente al usuario y le aporta escalabilidad, eficiencia y facilidades a la hora
de hacer consultas en la base de datos. En lo referente a la flexibilidad y escalabilidad, hibernate está diseñado para
adaptarse a cualquier esquema y modelo de datos, además ofrece la relación inversa, pudiendo así obtener un modelo de
tablas relacional a partir de la definición de entidades en Java.
Esquema del Servicio Web con Hibernate

1. MATERIALES

Para la experiencia a realizar se requiere lo siguiente:

a) EQUIPO
Se requiere tener un equipo de cómputo (PC o laptop).

3
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

b) HERRAMIENTAS
 Java Developer Kit (JDK) version 8.x:
 Spring Tool Suite
 Apache Maven
 MySQL
 MySQL Workbench
 Postman

2. PROCEDIMIENTO

Se va a crear un proyecto Spring Boot, donde se aplicará Hibernate ORM Mapping para definir los métodos GET,
POST, PUT, DELETE con conexión a Base de datos MySQL y también se conocerán los códigos de respuesta HTTP.
Se toma como continuación del proyecto de la semana anterior, donde se ha aplicado Hibernate ORM, a continuación,
se observa los paquetes, interfaces y clases definidas:

Se tiene el Modelo Conceptual, en base a este modelo se procederá a aplicar Hibernate ORM:

4
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

ONE-TO-ONE ASSOCIATIONS

Instructor - Conyuge

package pe.company.model;

import java.io.Serializable;
import java.util.*;
import javax.persistence.*;

@Entity
@Table(name="instructores")
public class Instructor implements Serializable
{
private static final long serialVersionUID=1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer instructorId;

// ...

@OneToOne(mappedBy="instructor")
private Conyuge conyuge;

public Instructor() {
}

// ...

package pe.company.model;

import java.io.Serializable;
import javax.persistence.*;

@Entity
@Table(name="conyuges")
public class Conyuge implements Serializable
{
private static final long serialVersionUID=1L;
5

@Id
private Long conyugeDni;
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

ONE-TO-MANY ASSOCIATIONS

Instructor - Taller

package pe.company.model;

import java.io.Serializable;
import java.util.*;
import javax.persistence.*;

@Entity
@Table(name="instructores")
public class Instructor implements Serializable
{
private static final long serialVersionUID=1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer instructorId;

// ...

@OneToMany(mappedBy="instructor")
private Collection<Taller> itemsTaller=new ArrayList<>();

public Instructor() {
}

// ...

package pe.company.model;

import java.io.Serializable;
import javax.persistence.*;

@Entity
@Table(name="talleres")
public class Taller implements Serializable
{
private static final long serialVersionUID=1L;
6

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer tallerId;
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

MANY-TO-MANY ASSOCIATIONS

Instructor - Tecnologia

package pe.company.model;

import java.io.Serializable;
import java.util.*;
import javax.persistence.*;

@Entity
@Table(name="instructores")
public class Instructor implements Serializable
{
private static final long serialVersionUID=1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer instructorId;

// ...

@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinTable(name="instructores_tecnologias",
joinColumns=@JoinColumn(name="instructor_id",nullable=false,
foreignKey=@ForeignKey(foreignKeyDefinition="foreign key(instructor_id) references
instructores(instructor_id)")),
inverseJoinColumns=@JoinColumn(name="tecnologia_id",nullable=false,
foreignKey=@ForeignKey(foreignKeyDefinition="foreign key(tecnologia_id) references
tecnologias(tecnologia_id)")))
private Set<Tecnologia> itemsTecnologia=new HashSet<>();

public Instructor() {
}

// ...
package pe.company.model;

import java.io.Serializable;
import java.util.*;
import javax.persistence.*;

@Entity
@Table(name="tecnologias")
public class Tecnologia implements Serializable
7 {
private static final long serialVersionUID=1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer tecnologiaId;
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

Luego del desarrollado se pasa a la ejecución del proyecto Spring Boot:

En la BD MySQL se observa el Modelo Relacional obtenido con Hibernate ORM Mapping

Una vez obtenido el Modelo Relacional se pasa a desarrollar los DAOs, SERVICEs de cada modelo de dato, a nuestros
estudiantes este paso es similar al de Instructor por lo que queda como manera de práctica desarrollarlo.

A continuación, se tiene los controladores de Conyuge, Taller, Tecnologia e InstructorTecnologia:

package pe.company.controller;

import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import pe.company.model.Conyuge;
import pe.company.service.ConyugeService;

@RestController
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

package pe.company.controller;

import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import pe.company.model.Taller;
import pe.company.service.TallerService;

@RestController
@RequestMapping("/taller")
public class TallerRestController
{
@Autowired
private TallerService tallerService;

@GetMapping("/listar")
public ResponseEntity<?> listar() {
Collection<Taller> itemsTaller=tallerService.findAll();
return new ResponseEntity<>(itemsTaller,HttpStatus.OK);
}

@PostMapping("/agregar")
public ResponseEntity<?> agregar(@RequestBody Taller taller) {
tallerService.insert(taller);
return new ResponseEntity<Void>(HttpStatus.CREATED);
}
}

package pe.company.controller;

import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import pe.company.model.Taller;
import pe.company.service.TallerService;

@RestController
@RequestMapping("/taller")
9
public class TallerRestController
{
@Autowired
private TallerService tallerService;
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

package pe.company.controller;

import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import pe.company.model.Tecnologia;
import pe.company.service.TecnologiaService;

@RestController
@RequestMapping("/tecnologia")
public class TecnologiaRestController
{
@Autowired
private TecnologiaService tecnologiaService;

@GetMapping("/listar")
public ResponseEntity<?> listar() {
Collection<Tecnologia> itemsTecnologia=tecnologiaService.findAll();
return new ResponseEntity<>(itemsTecnologia,HttpStatus.OK);
}

@PostMapping("/agregar")
public ResponseEntity<?> agregar(@RequestBody Tecnologia tecnologia) {
tecnologiaService.insert(tecnologia);
return new ResponseEntity<Void>(HttpStatus.CREATED);
}
}
package pe.company.model;

public class InstructorTecnologia


{
private Instructor instructor;
private Tecnologia tecnologia;

//Methods constructor
//Getters and Setters
}

package pe.company.controller;

import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import pe.company.model.*;
import pe.company.service.*;

@RestController
10@RequestMapping("/instructor_tecnologia")
public class InstructorTecnologiaRestController
{
@Autowired
private InstructorService instructorService;
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

En la BD MySQL se observa la base de datos y las tablas autogenerado:

Prueba de testeo con POSTMAN:

11
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

12
Guía 1 Escuela de Soluciones de Inteligencia de Negocios
Tecnología

ACTIVIDAD VIRTUAL:

a) CUESTIONARIO TÉCNICO

Revisa y analiza el tema desarrollado en la presente sesión, luego responde las siguientes preguntas propuestas:

 ¿Qué es ORM y qué ventajas tiene?


 ¿En qué se diferencia EAGER de LAZY?
 ¿Qué anotación permite configurar una clave foránea a otra tabla?
 ¿Qué operaciones en cascada se puede realizar en entidades relacionadas? De una breve definición de cada
uno.
 Realice una App similar aplicando todo lo aprendido de esta guía, además debe mostrar los estados de
respuesta HTTP con Postman.

b) CONCLUSIONES DE LA EXPERIENCIA
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
____________________________________________________________________________________________
__________________________________________________________________________

13

También podría gustarte