Operações com Banco de Dados e Renderização Front-end no Spring Boot

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 ao create, 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">

Tags: spring-boot jpa thymeleaf MySQL webjars

Publicado em 9-28 04:39