No desenvolvimento com SpringBoot, a camada de dados frequentemente envolve a combinação de fontes de dados, tecnologias de persistência e bancos de dados. Opções comuns incluem o uso de Hikari ou Druid como fonte de dados, juntamente com JdbcTemplate, MyBatis ou MyBatis-Plus para persistência, e bancos como MySQL ou H2. O SpringBoot facilita isso com soluções embutidas, eliminando a necessidade de configuração manual complexa.
Fonte de Dados Embutida: Hikari
O SpringBoot automaticamente configura uma fonte de dados quando dependências apropriadas estão presentes. Ele oferece três opções embutidas:
- HikariCP: Fonte de dados padrão, conhecida por sua leveza e desempenho rápido.
- DataSource do Tomcat: Usada em ambientes web se o Hikari não estiver disponível.
- Commons DBCP: Alternativa quando tanto Hikari quanto Tomcat não estão acessíveis.
Por padrão, o Hikari é ativado. Configurações básicas de conexão podem ser definidas assim:
spring:
datasource:
url: jdbc:mysql://localhost:3306/banco_dados?serverTimezone=UTC
username: usuario
password: senha
Para ajustes específicos, como o pool de conexões, use seções dedicadas:
spring:
datasource:
url: jdbc:mysql://localhost:3306/banco_dados?serverTimezone=UTC
hikari:
maximum-pool-size: 40
driver-class-name: com.mysql.cj.jdbc.Driver
dbcp2:
tomcat:
Solução de Persistência Embutida: JdbcTemplate
Para usar o JdbcTemplate, adicione a dependência correspondente:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
Configure opções do template no application.yml:
spring:
jdbc:
template:
query-timeout: 30
max-rows: 200
fetch-size: 10
Exemplo de uso para consultas e atualizações, com nomes de variáveis alterados para clareza:
@SpringBootTest
class TesteAplicacaoDados {
@Autowired
private JdbcTemplate templateJdbc;
@Test
void buscarLivroPorId() {
String consulta = "SELECT * FROM livros WHERE id = ?";
List<Livro> resultados = templateJdbc.query(consulta, new Object[]{1}, new RowMapper<Livro>() {
@Override
public Livro mapRow(ResultSet rs, int linha) throws SQLException {
Livro livro = new Livro();
livro.setId(rs.getInt("identificador"));
livro.setTitulo(rs.getString("titulo"));
livro.setCategoria(rs.getString("categoria"));
livro.setDescricao(rs.getString("descricao"));
return livro;
}
});
System.out.println(resultados);
}
@Test
void inserirNovoLivro() {
String comando = "INSERT INTO livros (titulo, categoria) VALUES (?, ?)";
templateJdbc.update(comando, "Título Exemplo", "Ficção");
}
}
Outro exemplo simplificado usando queryForList:
@Test
void listarLivros() {
String sql = "SELECT * FROM livros WHERE ativo = true";
List<Map<String, Object>> lista = templateJdbc.queryForList(sql);
}
Bancco de Dados Embutido: H2
O SpringBoot suporta bancos de dados embutidos como H2, HSQL e Derby, que são leves e podem rodar em memória para testes. Para produção, prefira bancos como MySQL. Configure o H2 adicionando dependências:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jpa</artifactId>
</dependency>
Ative o console de gerenciamento e defina a fonte de dados no application.yml:
spring:
h2:
console:
path: /console-h2
enabled: true
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: admin
password: segredo
Acesse o console em /console-h2 durante o desenvolvimento.