Para hacer con Spring Boot un Modelo – Controlador, es decir, que podamos acceder a una base de datos y mostrar información tenemos que hacer los siguientes pasos:
1.- Crear un proyecto con las dependencias SpringBoot, JPA y Mysql
2.- Configurar el acceso a la base de datos:
application.properties
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/sakila
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql: true
3.- Crear una entidad, igual que hacía en hibernate
package com.trifulcas.SpringBootData;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import jakarta.persistence.*;
@Entity
@Table(name = "category")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "category_id")
private int categoryId;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "last_update", nullable = false)
private Timestamp lastUpdate;
public Category() {
super();
// TODO Auto-generated constructor stub
}
public Category(String name) {
super();
this.name = name;
Date now = new Date();
this.lastUpdate = new Timestamp(now.getTime());
}
public int getCategoryId() {
return categoryId;
}
public void setCategoryId(int categoryId) {
this.categoryId = categoryId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Timestamp getLastUpdate() {
return lastUpdate;
}
public void setLastUpdate(Timestamp lastUpdate) {
this.lastUpdate = lastUpdate;
}
@Override
public String toString() {
return "Category [categoryId=" + categoryId + ", name=" + name + ", lastUpdate=" + lastUpdate + "]";
}
}
4.- Crear un ‘repository’ para la entidad. ¿Qué es esto? Es una especie de DAO pero ya prefabricado.¡OJO! Es un interface, no una clase.
public interface CategoryRepository extends CrudRepository<Category, Integer> {
}
5.- Por último podremos usar todas las utilidades del repository en cualquier controlador. Para hacerlo tenemos que definir una clase del mismo tipo que el repository y anotarla con @AutoWired
package com.trifulcas.SpringBootData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
// Esta anotación serializa por defecto todo lo que las funciones retornen
@RestController
public class CategoryController {
// Lo que hace es crear e inyectar un objeto de tipo
// CRUD con la entidad 'Category'
// Este objeto nos servirá como un DAO, nos permite crear, modificar
// obtener y borrar cualquier elemento de la web
// el objeto repository nos permite usar findall, findbyid, deletebyid, save...
@Autowired
private CategoryRepository categoryRepository;
@GetMapping("/add")
public String addNewCategory(
@RequestParam(value = "name", defaultValue = "Nueva categoría")
String name) {
Category cat = new Category(name);
categoryRepository.save(cat);
return "Saved "+cat.getCategoryId();
}
@GetMapping("/all")
public Iterable<Category> viewAll() {
return categoryRepository.findAll();
}
@GetMapping("/delete")
public String deleteCategory(
@RequestParam(value = "id", defaultValue = "0")
String id) {
try {
categoryRepository.deleteById(Integer.parseInt(id));
return "Borrado "+id;
}catch(Exception ex) {
return ex.getMessage();
}
}
}