Spring Boot Aplicacion Web Parte 2.

Entidades o Entities

Como lo hicimos en el tutorial de Spring Boot Security utilizaremos solamente dos entidades, User y Role. Y Aprovecharemos una conifiguracion de Spring Boot para crear las tablas automaticamente, y recordemos que con la anotacion @ManyToMany se creara una tabla transaccional.


Paso a Paso

Crea un paquete para todas las entidades dentro de tu proyecto.

Utilizando @GenericGenerator(name=”native”,strategy=”native”) indicamos a hibernate que queremos utilizar la opcion propia de autoincremento de MySQL. Sino ponemos esta anotacion hibernate creara una tabla de secuencias para manterner el autoincremento del id.

1.Crear Role

package com.cristianruizblog.springbootApp.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.GenericGenerator;

@Entity
public class Role implements Serializable {

	private static final long serialVersionUID = -2969524610059270447L;

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO, generator="native")
	@GenericGenerator(name="native",strategy="native")
	private Long id;
	
	@Column
	private String name;
	
	@Column
	private String description;
	<br>      <br> //Getters, Setters, HashCode, Equals & ToString Functions
}

2.Crear User

La anotación @Transient no sea explicado anteriormente, esta es necesaria cuando queremos tener campos en nuestra entidad pero no queremos que tenga ninguna relación con la tabla de la base de datos.

package com.cristianruizblog.springbootApp.entity;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Transient;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.JoinColumn;

@Entity
public class User implements Serializable{

	private static final long serialVersionUID = -6833167247955613395L;

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO, generator="native")
	@GenericGenerator(name="native",strategy="native")
	private Long id;
	
	@Column 
	private String firstName;
	@Column 
	private String lastName;
	@Column(unique = true) 
	private String email;
	@Column(unique = true) 
	private String username;
	@Column
	private String password;
	
	@Transient 
	private String confirmPassword;
	
	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name="user_roles"
		,joinColumns=@JoinColumn(name="user_id")
		,inverseJoinColumns=@JoinColumn(name="role_id"))
	private Set roles;
	
	public User() {	}
	
	public User(Long id) {
		this.id = id;
	}<br>       <br>//Getters, Setters, HashCode, Equals & ToString Functions
}

3.Hibernate Auto DDL

Para que nuestras tablas se creen automáticamente basadas en nuestras entidades es necesario tener la siguiente linea en nuestro application.properties. (Si completaste el post anterior es necesario solamente quitar el comentario de la ultima linea)

spring.jpa.hibernate.ddl-auto=create

Asegúrate de eliminar o convertir la linea como comentario, sino lo haces cada vez que inicies la aplicación eliminara y crear las tablas de nuevo.

Si hiciste todo bien deberías de ver las siguientes lineas en la consola y tambien las siguientes tablas en tu base de datos.

Hibernate DDL Console Output
Hibernate DDL Console Output
Database Tables
Database Tables

4.Insertar Datos

Necesitaremos crear un usuario base para nuestra aplicacion y en este caso sera Admin, ademas tendremos 3 roles (Admin, Manager, User)

<span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token punctuation">`</span><span class="token keyword">user</span><span class="token punctuation">`</span> <span class="token punctuation">(</span><span class="token punctuation">`</span>email<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span>first_name<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span>last_name<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span>password<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span>username<span class="token punctuation">`</span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token string">'admin@admin.com'</span><span class="token punctuation">,</span> <span class="token string">'admin'</span><span class="token punctuation">,</span> <span class="token string">'admin'</span><span class="token punctuation">,</span> <span class="token string">'$2a$04$n6WIRDQlIByVFi.5rtQwEOTAzpzLPzIIG/O6quaxRKY2LlIHG8uty'</span><span class="token punctuation">,</span> <span class="token string">'admin'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


<span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token punctuation">`</span>role<span class="token punctuation">`</span> <span class="token punctuation">(</span><span class="token punctuation">`</span>description<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span>name<span class="token punctuation">`</span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token string">'ROLE_ADMIN'</span><span class="token punctuation">,</span> <span class="token string">'ADMIN'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token punctuation">`</span>role<span class="token punctuation">`</span> <span class="token punctuation">(</span><span class="token punctuation">`</span>description<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span>name<span class="token punctuation">`</span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token string">'ROLE_USER'</span><span class="token punctuation">,</span> <span class="token string">'USER'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token punctuation">`</span>role<span class="token punctuation">`</span> <span class="token punctuation">(</span><span class="token punctuation">`</span>description<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span>name<span class="token punctuation">`</span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token string">'ROLE_SUPERVISOR'</span><span class="token punctuation">,</span> <span class="token string">'SUPERVISOR'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token punctuation">`</span>user_roles<span class="token punctuation">`</span> <span class="token punctuation">(</span><span class="token punctuation">`</span>user_id<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span>role_id<span class="token punctuation">`</span><span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token string">'1'</span><span class="token punctuation">,</span> <span class="token string">'1'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
SQL

5.Git Commit

Para concluir con este post hay que hacer commit de la siguiente manera.

Entity Commit
Entity Commit

Github Commit:
https://github.com/cruizg93/Spring-Boot-Aplicacion/commit/bc098239c50a6705d61abadbef7d4e67581dd868

6.Video Paso a Paso

Menu

  1. Setup
  2. Entidades y POJOS
  3. Basic HTML
  4. Lista de Usuarios
  5. Crear Usuario y Validar Campos
  6. Editar Usuario
  7. Eliminar Usuario
  8. Cambiar Contraseña
  9. Spring Security
  10. Paginas de Error
  11. Bonus, Arreglando Cositas
  12. Formulario de registro
  13. Despliegue en Heroku

Gracias por llegar al final de este post.
No se te olvide dejar tus comentario o preguntas aca abajo o en mi twitter @Cruizg93

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *