Spring Boot con Base de Datos

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.