Skip to content

Instantly share code, notes, and snippets.

@andersonbuenos
Created September 24, 2025 07:07
Show Gist options
  • Select an option

  • Save andersonbuenos/5aa669bcc0508696a76047e713bb7a34 to your computer and use it in GitHub Desktop.

Select an option

Save andersonbuenos/5aa669bcc0508696a76047e713bb7a34 to your computer and use it in GitHub Desktop.
Encontro 02 - Teste e Validação
## 1. O que é o banco H2?
O **H2 Database** é um banco de dados relacional **open source** escrito em Java. Ele é leve, rápido e pode rodar **em memória** (para testes) ou em **arquivo** (persistência local).
Características principais:
* 100% Java, sem necessidade de instalar servidor externo.
* Modo **in-memory** (ideal para testes unitários).
* Compatível com **JPA/Hibernate**, JDBC e Spring Boot.
* Fácil integração: basta adicionar uma dependência no `pom.xml`.
---
## 2. Por que usar o H2 neste projeto?
O projeto **delivery-tech** é um **Spring Boot com Maven**.
Motivos para usar o H2:
* **Testes automatizados**: permite rodar os testes de repositório sem depender de um banco externo (MySQL/Postgres).
* **Ambiente de desenvolvimento**: rápido para prototipar e validar queries JPA.
* **Integração com Spring Boot**: o Spring cria automaticamente as tabelas a partir das entidades (`@Entity`).
* **Console web embutido**: facilita visualizar e debugar dados (em `http://localhost:8080/h2-console`).
---
## 3. Onde importar a dependência?
No **Maven**, a dependência vai no `pom.xml` do projeto - Já instalado na criação do arquivo spring-boot.
### Exemplo:
```xml
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
```
> 🔹 `scope=runtime` → o H2 só será carregado em tempo de execução, não no build.
---
## 4. Configurações no `application.properties`
No diretório `src/main/resources/application.properties`, configuramos o H2:
```properties
# Ativar console H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
# Datasource H2
spring.datasource.url=jdbc:h2:mem:deliverydb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
# JPA / Hibernate
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
```
Explicação:
* `jdbc:h2:mem:deliverydb` → cria um banco em memória chamado `deliverydb`.
* `ddl-auto=update` → o Hibernate cria/atualiza as tabelas automaticamente.
* `show-sql=true` → loga as queries no console.
---
## 5. Acesso ao console H2
Depois de rodar o projeto (`mvn spring-boot:run` ou direto pelo IDE), o console estará disponível em:
👉 [http://localhost:8080/h2-console](http://localhost:8080/h2-console)
Configuração no console:
* **JDBC URL**: `jdbc:h2:mem:deliverydb`
* **User**: `sa`
* **Password**: (vazio)
---
## 6. Integração com as entidades do projeto
No seu repositório `delivery-tech`, você já tem entidades (por exemplo, `Cliente`, `Pedido`, `Produto`).
Com o H2:
* O **Spring Boot** vai criar as tabelas automaticamente com base nas classes anotadas com `@Entity`.
* Os **repositórios Spring Data JPA** já podem ser usados normalmente (ex: `ClienteRepository extends JpaRepository`).
Exemplo simples de entidade:
```java
@Entity
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String email;
}
```
---
## 7. Onde usar o H2 neste projeto
* **Ambiente de desenvolvimento** → para rodar localmente sem precisar instalar MySQL/Postgres.
* **Testes unitários/integrados** → o banco em memória é destruído e recriado a cada execução dos testes.
Se futuramente você quiser usar MySQL/Postgres em produção, basta trocar o `application.properties` (ou criar `application-dev.properties` para H2 e `application-prod.properties` para MySQL/Postgres).
---
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment