Insertar registro con Spring Boot

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Nota importantísima. Toda la estructura de paquetes de SpringBoot debe colgar de un paquete base que hemos definido en el initializer de la lección anterior. Si creamos clases que esten en un paquete que no es hijo del paquete base, el código no funcionará.

Configuración básica

Vista

./src/main/webapp/index.html
<form action="/createPersona">
<input type="text" name="nombre">
<input type="submit" value="Alta">
</form>
Descargar Proyecto

Controlador

com.pablomonteserin.prueba.controller.PersonaController
@Controller
public class PersonaController {

	@Autowired
	private PersonaRepository personaRepository;

	// @PostMapping("/createPersona")
	@GetMapping("/createPersona")
	public String indexGET(@ModelAttribute("persona") Persona persona) throws IOException {	
		personaRepository.save(persona);
		return "forward:/index.html";
	}
}

Conexión a la base de datos

com.pablomonteserin.prueba.application.properties
#debug=true
#server.port=8080

#spring.mail.host=smtp.gmail.com
#spring.mail.username=

spring.datasource.url=jdbc:mysql://localhost:3306/persona?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=

spring.jpa.hibernate.ddl-auto=update

Modelo

com.pablomonteserin.prueba.persistence.repository.PersonaRepository
public interface PersonaRepository extends CrudRepository<Persona, Integer> {

}

Redireccionando desde un método del controlador a otro método del controlador

@GetMapping("/")
public String selectLibros(Model model) {
	// ...
	return "consulta";
}

@GetMapping("/create-libro")
	public String createLibro(@ModelAttribute("libro") Libro libro) {
	// ...
	return "redirect:/";
}

Añadiendo la clase Servicio para la lógica de negocio

com.pablomonteserin.prueba.services.PersonaService
public interface PersonaService {
	void save(Persona persona);
}
com.pablomonteserin.prueba.services.impl.PersonaServiceImpl
//@Transactional
@Service
public class PersonaServiceImpl implements PersonaService {
	
	@Autowired
	private PersonaRepository personaRepository;

	@Override
	public void save(Persona persona) {
		personaRepository.save(persona);		
	}

}

Usando Thymeleaf

Cuando estamos en fase de desarrollo, probablemente querramos desactivar la caché de thymeleaf para que los cambios en los HTML se actualicen automáticamnte.

src/main/resources/application.properties
spring.thymeleaf.cache=false

Si quieres que un método del controlador no cargue una plantilla de thymeleaf y redireccione directamente a un html ubicado en webapp, usaremos:

return "forward:index.html";

Cargar una imagen

Las imágenes deben estar ubicadas en la carpeta src/main/resources/static.

Carga de una imagen proveniente de una variable dinámica y ubicada en la raíz del servidor:

<img th:src="@{|${equipo.foto_escudo}}|" />

Recuperando datos

Recuperando un parámetro de un enlace del tipo https://example.com/equipo/5

<a th:href="@{|/equipo/${equipo.equipo_cod}|}">
@GetMapping("/equipo/{equipo_cod}")
public String selectEquipo(@PathVariable Integer equipo_cod, Model model) {
	// ...
	return "equipo";
}

Recuperando parámetros de un formulario enviado por get

public String createPaciente(@RequestParam("nombre") String nombre, @RequestParam("apellidos") String apellidos,
			@RequestParam("fecha_alta") String fechaAlta) {

Leer una colección de datos en la vista

com.pablomonteserin.prueba.controller
@GetMapping("/consultaInvitados")
public String selectInvitados( Model model) {
	List<Invitado> invitados = invitadoRepository.findAll();
	model.addAttribute("invitados", invitados);
	return "consulta";
}
src/main/resources/templates/consulta.html
<div th:each="invitado : ${invitados}">
	<td th:text="${invitado.id}"></td>
	<td th:text="${invitado.nombre}"></td>
	<td th:text="${invitado.descripcion}"></td>
</div>

Parsear una fecha

<input type="date" name="fecha_alta" th:value="${#dates.format(paciente.fecha_alta, 'yyyy-MM-dd')}"  />

Definiendo nuevos métodos en el modelo

public interface EquipoRepository extends CrudRepository<Equipo, Integer> {
   @Query("SELECT e FROM Equipo e WHERE e.equipo_cod=:id")
   Equipo findEquipoByEquipoCod(@Param("id")int id);

   List<Equipo> findAll();
}
← Creación de un proyecto en Spring Boot
Ejercicios Spring Boot con Thymeleaf →
icono de mandar un mailSOPORTE Usuarios Premium
Pablo Monteserín
contacta conmigoPablo
Monteserín

Para dudas técnicas sobre los ejercicios de mis cursos es necesario tener una cuenta premium activa. Para cualquier otra cosa, puedes usar el formulario de la página de contacto.