Proyecto Spring con JPA

PROYECTO SPRING CON JPA

Al crear el proyecto en Spring Tools Suite agregar las siguientes dependencias

Spring Web: Porque trabajamos con protocolo HTTP
Spring Boot Dev Tools: Permite reiniciar y desplegar cualquier cambio en código
Spring Data JPA: Framework ORM que nos permite mapear las tablas a clases Java.
H2 Database: Base de datos embebida



Creacion de estructura de carpetas necesarias

1) Paquete com.empresa.proyecto.controller con una clase ProductoController

package com.empresa.proyecto.controllers;


import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.empresa.proyecto.entity.Producto;
import com.empresa.proyecto.service.ProductoService;

@RestController
public class ProductoController {

       @Autowired
       private ProductoService productoService;

       @GetMapping("/listar")
       public List<Producto> listar() {
             return productoService.findAll();
       }

       @GetMapping("/ver/{id}")
       public Producto detalle(@PathVariable Long id) {
             return productoService.findById(id);
       }
}

2) Paquete com.empresa.proyecto.dao con una interface ProductoDao

package com.empresa.proyecto.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import com.empresa.proyecto.entity.Producto;

public interface ProductoDao extends JpaRepository<Producto, Long> {

}

3) Paquete com.empresa.proyecto.service con una interface ProductoService y una clase ProductoServiceImpl

package com.empresa.proyecto.service;

import java.util.List;
import com.empresa.proyecto.entity.Producto;

public interface ProductoService {

       public List<Producto> findAll();

       public Producto findById(Long id);

       public Producto save(Producto p);

       public void delete(Producto p);
}


package com.empresa.proyecto.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.empresa.proyecto.dao.ProductoDao;
import com.empresa.proyecto.entity.Producto;
import com.empresa.proyecto.service.ProductoService;

@Service
public class ProductoServiceImpl implements ProductoService {

       @Autowired
       ProductoDao productoDao;

       @Override
       public List<Producto> findAll() {
             return productoDao.findAll();
       }

       @Override
       public Producto findById(Long id) {
             return productoDao.findById(id).get();
       }

       @Override
       public Producto save(Producto p) {
             return productoDao.save(p);
       }

       @Override
       public void delete(Producto p) {
             productoDao.delete(p);
       }
}

4) Paquete com.empresa.proyecto.entity con una clase Persona

package com.empresa.proyecto.entity;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "producto")
public class Producto implements Serializable {

       private static final long serialVersionUID = 1L;

       @Id
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       private Long id;

       @Column(name = "nombre", length = 50)
       private String nombre;

       @Column(name = "precio", precision = 6, scale = 2)
       private Double precio;

       @Column(name = "fec_usuario_crea")
       @Temporal(TemporalType.DATE)
       private Date fecUsuarioCrea;

       public Producto() {
       }

       public Long getId() {
             return id;
       }

       public void setId(Long id) {
             this.id = id;
       }

       public String getNombre() {
             return nombre;
       }

       public void setNombre(String nombre) {
             this.nombre = nombre;
       }

       public Double getPrecio() {
             return precio;
       }

       public void setPrecio(Double precio) {
             this.precio = precio;
       }

       public Date getFecUsuarioCrea() {
             return fecUsuarioCrea;
       }

       public void setFecUsuarioCrea(Date fecUsuarioCrea) {
             this.fecUsuarioCrea = fecUsuarioCrea;
       }
}

5) Crear una conexion a una base de datos deseada, en este caso H2, para lo cual se incluira en la configuración del archivo application.properties lo siguiente:

spring.application.name=servicio-productos
server.port=8001

spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:navin

6) Crear un archivo data.sql en la ruta src/main/resources con el siguiente codigo SQL

insert into producto(nombre, precio, fec_usuario_crea) values('PANASONIC', 800, NOW());
insert into producto(nombre, precio, fec_usuario_crea) values('SONY', 700, NOW());
insert into producto(nombre, precio, fec_usuario_crea) values('APPLE', 1000, NOW());
insert into producto(nombre, precio, fec_usuario_crea) values('SONY NOTEBOOK', 1000, NOW());
insert into producto(nombre, precio, fec_usuario_crea) values('HEWLETT', 500, NOW());
insert into producto(nombre, precio, fec_usuario_crea) values('BIANCHI', 600, NOW());
insert into producto(nombre, precio, fec_usuario_crea) values('NIKE', 100, NOW());
insert into producto(nombre, precio, fec_usuario_crea) values('ADIDAS', 200, NOW());
insert into producto(nombre, precio, fec_usuario_crea) values('REEBOK', 300, NOW());

7) Para verificar que la base de datos H2 esta funcionando ir a la siguiente URL en tu navegador http://localhost:8001/h2-console

Para ingresar no es necesaria ninguna contraseña
Una vez ingresado a la interfaz puedes ver que JPA creo la tabla automáticamente esto gracias a la anotación @Table de la clase Persona




8) Finalmente con se puede probar los API Rest creadas con el programa POSTMAN


Publicar un comentario

0 Comentarios