Spring Boot – Persistindo dados
Hoje mostrarei um exemplo de como gerenciar informações em bancos de dados.
Antes de mais nada atualize seu Spring Boot CLI (hoje a versão 1.2).
gvm i springboot
crie um novo projeto com o auxilio do Spring Boot CLI
spring init --packageName=br.com.dados --type=gradle-project --dependencies=web,data-jpa dadosProject
O comando
spring init --list
mostra todas as opções para esse comando.
Certifique-se de que seu arquivo build.gradle se parece com esse:
buildscript { ext { springBootVersion = '1.2.0.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'spring-boot' jar { baseName = 'demo' version = '0.0.1-SNAPSHOT' } sourceCompatibility = 1.7 targetCompatibility = 1.7 repositories { mavenCentral() } dependencies { compile("org.springframework.boot:spring-boot-starter-web") compile("org.springframework.boot:spring-boot-starter-data-jpa") testCompile("org.springframework.boot:spring-boot-starter-test") compile("org.hsqldb:hsqldb") }
Crie um simples entity:
package demo.domain; import ... @Entity public class Banco implements Serializable { @Id @GeneratedValue private Long id; @Column(nullable = false) private String codigo; @Column(nullable = false) private String nome; public Banco() { super(); } public Banco(String codigo, String nome) { this.codigo = codigo; this.nome = nome; } ... }
crie uma interface para o repositório
package demo.domain; import org.springframework.data.repository.CrudRepository; public interface BancoRepository extends CrudRepository{ Banco findByCodigo(String codigo); }
E por fim uma classe de testes:
package demo; import ... @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration public class ApplicationTests { @Autowired private BancoRepository bancoRepository; @Test public void bancoTest() { // create Banco banco = new Banco("001", "Banco do Brasil SA"); bancoRepository.save(banco); Assert.assertTrue("registros encontrados = 0", bancoRepository.count() > 0); // read Banco bancoSaved = bancoRepository.findByCodigo("001"); Assert.assertNotNull("registros nao encontrado", bancoSaved); // update bancoSaved.setNome("Banco Brasileiro SA"); bancoRepository.save(bancoSaved); Banco bancoUptodate = bancoRepository.findByCodigo("001"); Assert.assertFalse("nome nao atualizado", bancoUptodate.getNome().equalsIgnoreCase("Banco do Brasil SA")); // delete bancoRepository.delete(bancoUptodate); Banco bancoDeleted = bancoRepository.findByCodigo("001"); Assert.assertTrue("entity nao apagado", bancoDeleted == null); } }
Execute o teste e verá que todos passaram.
Ao analizar o código, a primeira pergunta que surge é onde os dados foram persistidos? Qual DataSource foi usado?
Observe que adicionamos ao arquivo build.gradle a dependência do banco HyperSQL DataBase (hsqldb). Isso foi suficiente para que o Spring Boot criasse automaticamente um datasource em memória e disponibilizasse para que usássemos.
Isso é legal mas não parece muito útil. Edite o arquivo application.properties adicionando as linhas abaixo que farão com que o banco de dados seja gerenciado em arquivo.
spring.jpa.hibernate.ddl-auto=update spring.datasource.url=jdbc:hsqldb:file:banco_db
ou essas para utilizar o MySQL:
spring.jpa.hibernate.ddl-auto=update spring.datasource.url=jdbc:mysql://localhost:3306/banco_db spring.datasource.username=dbuser spring.datasource.password=dbpass spring.datasource.driver-class-name=com.mysql.jdbc.Driver
veja aqui mais opções de configuração para esse arquivo.