Para integrar um banco de dados no Spring Boot, as dependências adequadas devem ser adicionadas e a conexão configurada. O Spring Data JPA simplifica operações com bancos relacionais, enquanto o driver MySQL permite comunicação com o MySQL.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
Configuração no arquivo application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/meu_banco?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=admin
spring.datasource.password=senha123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true
O parâmetro spring.jpa.hibernate.ddl-auto define o comportamento do Hibernate em relação à estrutura do banco de dados:
create: Recria a estruutra do banco a cada inicialização, excluindo dados existentes.create-drop: Similar aocreate, mas remove as tabelas ao encerrar a aplicação.update: Atualiza a estrutura conforme as entidades, mantendo os dados. A opção mais comum em produção.validate: Verifica a compatibilidade da estrutura sem alterá-la.
O dialect especiifca o dialeto SQL para MySQL 8, e show-sql exibe os comandos SQL gerados.
Exemplo de criação da tabela:
CREATE TABLE usuario (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
nome_usuario VARCHAR(255) NOT NULL UNIQUE,
senha VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
apelido VARCHAR(255) UNIQUE,
idade INT,
data_cadastro VARCHAR(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Classe de entidade:
@Entity
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "nome_usuario", nullable = false, unique = true)
private String nomeUsuario;
@Column(nullable = false)
private String senha;
@Column(name = "email", nullable = false, unique = true)
private String email;
@Column(name = "apelido", unique = true)
private String apelido;
private Integer idade;
@Column(name = "data_cadastro", nullable = false)
private String dataCadastro;
// getters e setters
}
Repositório JPA:
public interface UsuarioRepository extends JpaRepository<Usuario, Long> {
Usuario findByNomeUsuario(String nomeUsuario);
Usuario findByEmail(String email);
}
Testes unitários:
@SpringBootTest
class UsuarioRepositoryTest {
@Autowired
private UsuarioRepository repository;
@Test
void salvarUsuario() {
Usuario usuario = new Usuario();
usuario.setNomeUsuario("João Silva");
usuario.setEmail("joao@example.com");
usuario.setSenha("segura123");
repository.save(usuario);
assertEquals(1, repository.count());
}
}
Renderização com Thymeleaf
O Thymeleaf é uma engine de template moderna para HTML5, integrada ao Spring Boot. Permite renderziar templates diretamente no navegador sem execução do servidor.
Adicione a dependência:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Template HTML:
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Página Inicial</title>
</head>
<body>
<h1 th:text="${titulo}">Bem-vindo</h1>
</body>
</html>
Controlador:
@Controller
public class PaginaController {
@GetMapping("/")
public String index(Model model) {
model.addAttribute("titulo", "Sistema de Exemplo");
return "index";
}
}
Desative o cache no application.properties:
spring.thymeleaf.cache=false
WebJars para Recursos Front-end
WebJars permite empacotar recursos front-end como JavaScript e CSS em JARs gerenciados pelo Maven.
Adicione o Bootstrap:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>5.3.0</version>
</dependency>
Referencie no template:
<link th:href="@{/webjars/bootstrap/5.3.0/css/bootstrap.min.css}" rel="stylesheet">