15 abril, 2020

Crear un CRUD Java Web usando Spring Boot, JPA, Thymeleaf y Bootstrap en Eclipse (Maven) + Extra API REST

En este post aprenderemos a crear un CRUD Java Web usando Spring Boot, Thymeleaf, Bootstrap  y Maven, que es una herramienta de software para la gestión y construcción de proyectos.

¿Qué es Maven?

Normalmente cuando trabajamos con Java/JavaEE el uso de librerías es algo común como en cualquier otro lenguaje de programación. Sin embargo, una librería puede depender de otras librerías para funcionar de forma correcta. Por ende, su gestión se puede volver tedioso a la hora de buscar las librerías y ver que versión exacta debemos de elegir. Así pues necesitamos más información para gestionarlo todo de forma correcta  y para ellos existe MAVEN, que es una herramienta que nos va a permitir tener una gestión correcta de nuestra librerías, proyectos y dependencias. Dentro de un proyecto Maven el archivo pom.xml (Proyect Object Model) es el de mayor importancia ya que contiene toda la información del artefacto que usará nuestro proyecto. Un Artefacto puede verse como una librería con esteroides (aunque agrupa mas conceptos). Contiene las clases propias de la librería pero ademas incluye toda la información necesaria para su correcta gestión (grupo, versión, dependencias etc).

¿Qué es Spring Framework?

Es el framework más popular para Java empresarial, para crear código de alto rendimiento, liviano y reutilizable.

¿Qué es Spring Boot?

Spring Boot es una de las tecnologías dentro del mundo de Spring de las que más se está hablando últimamente. Spring Boot es una herramienta que nace con la finalidad de simplificar aun más el desarrollo de aplicaciones basadas en el ya popular framework Spring Core. Spring Boot busca que el desarrollador solo se centre en el desarrollo de la solución, olvidándose por completo de la compleja configuración que actualmente tiene Spring Core para poder funcionar.

¿Qué es JPA?

Java Persistence API es una especificación de persistencia para la plataforma JAVA que aplica el Mapeo Relacional Objeto  (ORM: Object-Relational Mapping) permitiendo interactuar con bases de datos relacionales sin perder las ventajas de la orientación a objetos. Esto permite construir  aplicaciones  completamente orientadas a objetos. Algunas de las implementaciones mas conocidas de JPA son: Hibernate, TopLink, OpenJPA, EclipseLink.

¿Qué es Thymeleaf?

Thymeleaf es una biblioteca Java que implementa un motor de plantillas. El objetivo principal de Thymeleaf es permitir la creación de plantillas de una manera elegante y un código bien formateado. Sus dialectos Standard y SpringStandard permiten crear potentes plantillas naturales que se pueden visualizar correctamente en los navegadores de Internet, por lo que también funcionan como prototipos estáticos. Thymeleaf también puede extenderse desarrollando tus propios dialectos.

¿Qué es Bootstrap?

Bootstrap es una biblioteca multiplataforma o conjunto de herramientas de código abierto para diseño de sitios y aplicaciones web. Contiene plantillas de diseño con tipografía, formularios, botones, cuadros, menús de navegación y otros elementos de diseño basado en HTML y CSS, así como extensiones de JavaScript adicionales. A diferencia de muchos frameworks web, solo se ocupa del desarrollo front-end.


PASOS

1. Crear un proyecto Spring Boot

Ingresamos a la url https://start.spring.io/ y creamos nuestro proyecto Spring Boot

Cuando hayamos terminado de ingresar los datos, seleccionamos la opción Generate para descargar el proyecto y poder importarlo desde Eclipse.

No debemos de olvidarnos en agregar las dependencias para este proyecto.


2. Importar el proyecto

Abrimos el Eclipse y seleccionamos la opción File/Import/. en la ventana que nos aparece seleccionamos la opción Existing Maven Projects.


Clic en siguiente y buscamos el directorio en donde tenemos descomprimido el proyecto que hemos generado anteriormente y le damos clic en la opción finalizar. Esperamos unos segundos o minutos hasta que el proyecto termine de importarse correctamente.


Tendremos la siguiente estructura:


3. Configurar la base de datos

Configuramos nuestro application.properties que tendrá las propiedades de nuestra base de datos MySQL.


Clic en el archivo application.properties e ingresamos las siguientes propiedades:


Ahora creamos la base de datos:

Ejecutamos la clase principal SpringbootCrudApplication.java que nos creo por defecto al momento de generar el proyecto. Para ello, hacemos clic derecho a la clase y seleccionamos la opción Run As/ Java Application. Esta clase principal se encargará de publicar nuestra aplicación Spring Boot e iniciará Tomcat por nosotros.



4. Crear el modelo


Crear la clase Persona.java dentro del paquete com.aprendec.model.

⧭ ORM es una técnica para convertir datos entre el sistema utilizado en lenguaje de POO y el utilizado en una Base de Datos Relacional. Como resultado de aplicar esta técnica, el programador podrá codificar en Java como si interactuará virtualmente con una Base de Datos Orientada a Objetos, cuya base es una Base de Datos Relacional, permitiendo así aprovechar todas las características de la programación Orientada a Objetos al interactuar con una Base de Datos Relacional.

⧭ Una instancia de una clase Entidad representará una fila de una Tabla relacional.

⧭ En el caso de JPA, tenemos 2 posibilidades de aplicar ORM
  1. Utilizando el archivo de configuración orm.xml 
  2. Utilizando @Anotaciones 
En el post nosotros aplicaremos @Anotaciones.  El uso de las anotaciones requiere que se importe el paquete “javax.persistence.*” dentro de la clase Java que representa a la Entidad.

Aplicando ORM a la Clase “Empleado”.

@Entity: Significa que esta clase entidad representa una tabla de datos relacional
@Table: es la tabla que representa esta clase entidad.
@id: sirve para indicar el atributo que representa la PK de la tabla.
@column: sirve para indicar que el atributo es una columna, en este caso no es necesario ya que los atributos de la clase tienen el mismo nombre que las columnas de la tabla relacional.


5. Crear el DAO

Crear la interfaz PersonaDAO.java dentro del paquete com.aprendec.dao. Esta interfaz debe extender de CrudRepository y debemos de pasarle el objeto Persona y el tipo de Long de la llave primaria.



Con esto ya se nos ha generado los métodos básico del CRUD en un repositorio.


6. Crear el servicio y su implementación

Creamos la interfaz PersonaService.java dentro del paquete com.aprendec.service.

Lo clásico que iria en un servicio seria colocar los métodos para guardar, modificar, eliminar, buscar y listar. Sin embargo, esto podría ser hasta repetitivo considerando la cantidad de tablas u entidades, lo ideal sería reutilizar código usando clases genéricas las cuales puedan ser reutilizadas en cualquier servicio de una aplicación. Para ello, vamos a crear un paquete llamado com.aprendec.commons que contendrá nuestras clases genéricas.

Creamos la interface GenericService.java que contendrá los métodos CRUD.


Creamos la clase GenericServiceImpl.java que implementará la interfaz GenericService.java.


Creamos la clase PersonaServiceImpl.java dentro del paquete com.aprendec.service.impl. que extenderá de la clase GenericServiceImpl.java e implementará la interfaz PersonaService.java.


Ahora debemos hacer que la interfaz PersonaService.java extienda de la interfaz GenericService.java y le pasaremos como parámetros la clase Persona y el tipo de dato Long de la llave primaria.


7. Creamos el controlador

Creamos la clase PersonaController.java dentro del paquete com.aprendec.controller.


Estructura del proyecto hasta este punto.


8. Importar Bootstrap

Descargar la librería de bootstrap ingresando al siguiente enlace: https://getbootstrap.com/.



Luego de descargar y descomprimir el zip que nos descargó, debemos copiar las carpetas css y js a nuestro proyecto. Para ello, copiamos las carpetas dentro del folder static que esta ubicado dentro de src/main/resources/.


9. Crear la vista

Dentro de la carpeta templeates, creamos la vista index.html y save.html,

Debemos importar dentro del html el Thymeleaf, para ello, debemos agregar el siguiente namespace: http://www.thymeleaf.org

. index.html


. save.html
10. Probar funcionalidad

Clic derecho a la clase principal y seleccionamos la opción Run As/ Java Application. Esta clase se encargará de publicar nuestra aplicación Spring Boot e iniciará Tomcat por nosotros. 

En el navegador ingresamos la url: localhost:48080. En mi ejemplo, el puerto que estoy utilizando es el puerto 48080, pero ustedes pueden cambiarlo si tienen alguna aplicación que ya esté usando ese puerto o pueden eliminarlo del archivo application.properties para que esté en el puerto por defecto que es el puerto 8080.


Extra

Si quisiéramos reutilizar la lógica creada anteriormente en un API Rest para que se pueda acceder a la base de datos desde una aplicación de escritorio, móvil o desde otra web. Tendríamos que crear un nuevo controlador y consumir los métodos antes creados.

Para reutilizar la lógica del controlador MVC, creamos la clase PersonaRestController.java dentro del paquete com.aprendec.controller. Esta clase será un controlador REST.



Para probar el servicio usaré Advance Rest Client, pero podemos utilizar cualquier cliente como Postman, SoapUI, etc.



Descargar archivo

3 comentarios:

  1. hola tengo un error al acceder a los datos el error me lo da en List.

    ResponderBorrar
  2. Hola José, estoy haciendo mi primer proyecto y estoy intentando descargarme el proyecto del enlace pero no funciona. Podrías informarme de cómo poder obtener este proyecto de ejemplo para poder trabajar con él?
    Un saludo y gracias.

    ResponderBorrar
  3. hola, intento todo pero no me salen datos en la vista.. alguna sugerenccia? como podria probar hasta donde estan llegando losdatos

    ResponderBorrar