Backend: APIREST con spring boot, JPA y MySql
Requisitos
- STS descargado y configurado
- MySql instalado
- Java 11
- Conocimientos minimos de POO
- 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 :
- Spring MVC
- JPA
- MySQL drive
- 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:
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...;
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:
"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
y una vez abierto el archivo escribimos lo siguiente:
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
@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:
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
Publicar un comentario