Spring Boot con Base de Datos
- Details
- Created: Friday, 04 November 2016 23:24
- Hits: 4512
Primero generamos un proyecto con Spring Boot INITIALIZR.
1. Configuración de Maven
- Spring boot starter test
- Spring boot starter data JPA
- H2 como manejador de BD (esta en particular vive en memoria y solo es para esta cápsula). Puedes utilizar la BD que soporte Spring.
<modelVersion>4.0.0</modelVersion>
<groupId>com.ledzedev.springboot</groupId>
<artifactId>demo-spring-boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-spring-boot</name>
<description>Proyecto demo de Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
2. Vamos a empezar escribiendo una entidad para escribir noticias en la base de datos.
/**
* Código generado por Gerado Pucheta Figueroa
* Twitter: @ledzedev
* http://ledze.mx
* 04/Nov/2016.
*/
@Entity
class Noticia{@Id
@GeneratedValue
private Long id;private String tituloNoticia;
public Noticia() { //constructor vacío porque así lo dice JPA
}public Noticia(String tituloNoticia) {
this.tituloNoticia = tituloNoticia;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTituloNoticia() {
return tituloNoticia;
}
public void setTituloNoticia(String tituloNoticia) {
this.tituloNoticia = tituloNoticia;
}
@Override
public String toString() {//es buena práctica sobreescribir el método toString para poder conocer el contenido de cada objeto
return "Noticia{" +"id=" + id +
", tituloNoticia='" + tituloNoticia + '\'' +
'}';
}
}
3. Ahora necesitamos una interfaz que hable con la base de datos y que lea y escriba en ella.
/**
* Código generado por Gerado Pucheta Figueroa
* Twitter: @ledzedev
* http://ledze.mx
* 04/Nov/2016.
*/
interface NoticiasRepositorio extends JpaRepository<Noticia, Long>{//por convención hay que llamar los métodos en inglés y automáticamente SpringBoot intuye el nombre de la propiedad
// en este caso solo agrego el findBy=buscaPor
// TituloNoticia = nuestro objeto Noticia tiene una propiedad tituloNoticia
Collection<Noticia> findByTituloNoticia(String tn);}
4. Ahora el programa principal
- una clase pública con un main y debe tener la anotación:
@SpringBootApplication
- utilizamos la interfaz CommandLineRunner que proporciona Spring Boot y cuya única función es cargar todo en el arranque de spring boot.
- escribimos algunos nombres de noticias
- leemos todas las noticias
- encontramos una noticia por su titulo.
/**
* Código generado por Gerado Pucheta Figueroa
* Twitter: @ledzedev
* http://ledze.mx
* 04/Nov/2016.
*/
@SpringBootApplication
public class DemoSpringBootApplication {private static final Logger log = LoggerFactory.getLogger(DemoSpringBootApplication.class);
public static void main(String[] args) {
SpringApplication.run(DemoSpringBootApplication.class, args);
}
/*
- Utilizamos la interfa CommandLineRunner que nos proporciona SpringBoot y
tiene un solo método que tiene la función de cargar cuando se ejecuta el main.
- Recuerda que nuestra base de datos es h2 para este ejemplo, pero puedes utilizar el manejador de BD que te guste.
- Escribimos el runner como un bean para que sea detectado por spring boot y que cargue lo que necesitamos
al arranque*/
@Bean
CommandLineRunner commandLineRunner(NoticiasRepositorio nr){//como es java 8 puedo ocupar un lambda ya que esta interfaz solo tiene 1 método
return args -> {//inserto en la BD
log.info("Guardando en la BD.");Arrays.asList("Donald Trump gana la presidencia en EUA.",
"El peso mexicano alcanza al dolar y su paridad es 1 a 1.",
"Nigeria tiene crisis por el tomate.",
"Brasil reinstala a Dilma Rouseff y la disculpan públicamente.",
"EPN renuncia a su cargo en México y la gente no se lo permite.")
.forEach( n -> nr.save(new Noticia(n)) );
log.info("Consulto todos los registros existentes en la BD.");
//busco los elementos y los imprimo en el log
nr.findAll().forEach(n -> {log.info(n.getTituloNoticia() + " id: "+n.getId());
});
log.info("Consulta por el método que agregamos.");
//ahora busco con el método que nosotros hicimos.
nr.findByTituloNoticia("Donald Trump gana la presidencia en EUA.").forEach(n -> {log.info("El id de la noticia es: "+n.getId());
});
};
};
}
5. El resultado debe ser el siguiente:
Te puedes descargar mi código directamente del repositorio en github o te lo puedes descargar en formato zip.
Artículo relacionado
- Spring Boot INITIALIZR
Como siempre dame un poquito de crédito y no le quites la firma a mi código.