Backend: APIREST con spring boot, JPA y MySql

Requisitos

  1. STS descargado y configurado
  2. MySql instalado
  3. Java 11
  4. Conocimientos minimos de POO 
  5. 20 minutos de vida


Que haremos

Anteriormente publique el articulo "Frontend: Suscripciones y Observables en Angular 8" y como puedes imaginar ahora es el turno de nuestro backend, lo haremos con JAVA utilizando spring boot, utilizando el IDE STS (basado en eclipse). Este articulo no tendrá mucha teoría, sino que pretende ser una guía rápida para quienes están empezando con spring boot.... si bien se ve un poco largo... no te asustes, son las imágenes las que hacen parecer mas extenso esta humilde articulo.....bueno basta de palabras y comencemos....

Creando el proyecto Spring boot

Primero creamos nuestro proyecto, si bien desde nuestro STS se puede crear sin ningún problema, yo prefiero hacerlo desde la web:  https://start.spring.io/.
Completamos el formulario. algo como esto:
Acá agregamos las librerías, ojo que al momento de buscarlas pueden tener otro nombre, por eso es importante leer su descripción  :
  1. Spring MVC
  2. JPA
  3. MySQL drive
  4. Spring boot




Una vez creado el proyecto, lo descargamos y descomprimo el archivo. Para luego importarlo desde nuestro IDE STS.
File->Import->Existing Maven Projects



Ya estamos listos, si todo salio bien tendrás una estructura como esta:





Importante: Acá empezamos a codificar, nuestro código sera organizado en distintos 'package'.... y todos estos deben ser creados dentro del package principal de la aplicación.

Sección entidades

Para empezar con nuestro código, lo primero que haremos es crear nuestro 'package' donde guardaremos nuestras entidades y dentro creamos nuestra class 'película'.
Creamos el 'package' entidades:
Nos  posicionamos en el 'package' principal, hacemos clic derecho y nos vamos a new/package:
ahí creamos el package: springular.cinema.app.cinema.model.entity

**Importante:La parte en negrita del nombre del 'pakcage' debe estar completada y nos indica que el 'package' a a agregar se encontrara en el 'package' principal.**



 Nos posicionamos sobre packete recien creado y agregamos nuestra clase 'Pelicula', para eso hacemos:
  Clic derecho el el 'package' springular.cinema.app.cinema.model.entity/new/class

Puedes observar las secciones:
@Entity= para identificar la clase como entidad, permitiendo  la persistencia de datos
@Table(name="pelicula")= Permite especificar el nombre de la tabla vinculada a esta entidad
@Column(name="anio_estreno")=Permite identificar el nombre de la columna, de no especificarse tendria el nombre 'anioEstreno'
implements Serializable: para transportar información por la red de forma eficiente, estas obligado a  implementar algo como esto :private static final long serialVersionUID = 111111111...;




Sección DAO

Una vez hecha nuestra clase Pelicula.java haremos nuestra interfaz DAO, quien se encarga de hacer las consultas a nuestra DB.
Crearemos un nuevo 'package' para guardar nuestras interfaces DAO, recuerda que primero debes posicionarte sobre el package principal y ahí crear el nuevo 'package', en este caso lo llamaremos : springular.cinema.app.cinema.models.dao



y dentro creamos nuestra interfaz DAO:
Clic derecho sobre package/new/Interface y copiamos el siguiente código:




Sección Service

Interfaz de servicio:

Ahora haremos nuestra interfaz servicio, acá definiremos los métodos que utilizaremos, por ejemplo
"findByIDPelicula(id)","getAllPelicula()"...etc en este ejemplo solo crearemos "getAllPelicula()" que nos devolverá  todas las películas que tengamos en nuestra DB
Primero crearemos un package para nuestros servicios:
  Clic derecho en nuestro package principal/new/package


Ya creado nuestro package Service, crearemos nuestra interfaz servicio:
  clic derecho sobre el package service/new/interfaz  y agregamos el siguiente código:


Implementar interfaz en clase servicio:

En el mismo package service crearemos nuestra clase 'PeliculaServiceImpl' que implementara nuestra interfaz IPeliculaService, para crear nuestra clase hacemos:
clic derecho sobre el package service/new/class y creamos la nueva clase con el nombre 'PeliculaServiceImpl'



y en la clase agregamos el siguiente código:


Acá puedes notar que le agregamos la anotación @service, muy importante para construir nuestro bean
También agregamos la etiqueta "@Transactional(readOnly=true)", esto permite que la lectura de los datos sea valida en un ambiente con concurrencia, en otras palabras el método  leerá la información y si otro método quiere leer la misma información tendrá que esperar hasta que termine el primer método....también puedes usar "@Transactional" que implementa la transacción para lectura y escritura.  
Podemos ver lo genial de "CrudRepository", ya que desde  aca podemos obtener las funciones básicas para nuestro CRUD y mucho mas...


Sección Controller

Ya solo basta crear la sección donde llamaremos nuestros datos desde http, para esto crearemos el package controller y dentro de el crearemos la clase PeliculaRestController

Creamos nuestro package controller con: 
clic derecho sobre el package principal/new/package

creamos nuestra clase PeliculaRestController dentro del package controller(recién creado ) y agregamos el siguiente código:

Acá agregamos la anotación @Autowired, esto para realizar la inyección de dependencias y hacer referencia a nuestro servicio película (bean).


Listo ya tenemos casi todo listo,  aun nos falta algo....algo muy importante, nuestra base de datos, para este ejemplo usaremos MySQL:
abrimos una consola y tecleamos:
mysql  -u root -p
<< luego ingresamos la password de nuestro usuario root>>

una vez dentro de mysql , procedemos a crear nuestra base de datos:
create database db_cine_springboot;
listo!! ya tenemos nuestra base de datos creada, ahora solo falta informarlo a nuestro proyecto spring boot, para eso nos dirigimos a nuestro "application.properties" que es este archivo:

y una vez abierto el archivo escribimos lo siguiente:


también agregamos contenido a nuestra tabla película, lo hacemos de la siguiente forma:
Dentro de nuestra carpeta 'resources' creamos el archivo "import.sql"

y dentro del archivo "import.sql" agregamos las siguientes lineas:



y ahora por fin terminamos!! ahora solo basta ejecutar nuestra aplicación. Para eso nos posicionamos sobre la carpeta principal de nuestro proyecto->clic derecho-> Run as-> Spring Boot App

con esto la aplicación compilara, creando tablas, agregando los registros del archivo import....y todo lo necesario para levantar la aplicación... si revisamos el output podemos ver el detalle de lo realizado:

Ahora para revisar el resultado nos dirigimos a nuestro navegador favorito, en mi caso usare firefox, ya que muestra nuestros JSON formateado. Si realizaste todos los pasos de forma correcta podras ver algo similar a esto:




Espero que este articulo sea de ayuda para quienes estén espesando a desarrollar su backend en JAVA con spring boot.  Este articulo se complementa con  "Frontend: Suscripciones y Observables en Angular 8"..... de esta forma tenemos nuestro backend en java y el frontend con angular.

Tener presente que al momento de conectar backend con frontend debemos configurar CORS para permitir el intercambio de datos de forma segura.

Si te gusto házmelo saber en los comentarios....si tienes alguna opinión guardatela para ti...No, bienvenida sera también xD



Comentarios

Entradas populares de este blog

¿Como llamar una función del componente padre desde un componente hijo, en angular 8?

Frontend: Suscripciones y Observables con Angular 8

Enrutado con lazy loading en angular 8