📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Backend com Java e Spring Boot. Recomendado revisar antes de começar.
📁 Código deste projeto:
web-spring/(os caminhos citados abaixo são relativos à subpasta).
v1.0 — CRUD Básico, Spring Data JPA, H2 Database e Server-Driven UI com HTMX
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): CRUD Básico (Criar, Listar, Excluir) · H2 local · Spring Boot 3 + HTMX
- v2: Edição Dinâmica · Tema Claro/Escuro · Padrão
innerHTML- v3: Paginação de Dados · Saldo em Tempo Real · Bean Validation
- v4: Trabalho em Equipe Ágil · Backlog & Sprints · Git Flow · 3 Novas Features
🎓 Nível Profissional Simulado: Desenvolvedor Java Júnior. Todo desenvolvedor backend Java precisa dominar o ecossistema Spring Boot (Controllers, Services, Repositories, JPA Entities). Com HTMX, você constrói aplicações modernas e interativas sem precisar de frameworks JavaScript pesados.
Construir do zero a primeira versão (v1) do Sistema de Controle de Gastos Pessoais, implementando operações de cadastro, listagem e exclusão de lançamentos financeiros com Spring Boot 3, persistência com Spring Data JPA, banco em memória H2 e interface reativa com Thymeleaf + HTMX.
“Preciso de um sistema simples onde eu possa lançar meus gastos do dia a dia com descrição, valor e data. Quero ver a lista dos meus gastos em uma tabela com o valor total somado e poder excluir lançamentos errados clicando em um botão sem a página inteira piscar ou recarregar.”
| ID | Tipo | Descrição | Origem no Briefing |
|---|---|---|---|
| RF01 | Funcional | Cadastrar novos lançamentos financeiros (descrição, valor em reais e data). | “lançar meus gastos do dia a dia” |
| RF02 | Funcional | Listar todos os gastos em ordem cronológica com formatação monetária. | “ver a lista dos meus gastos” |
| RF03 | Funcional | Excluir um gasto específico com atualização atômica da tabela via HTMX. | “excluir lançamentos sem recarregar” |
| RNF01 | Não-Funcional | Resposta da interface em menos de 100ms utilizando HTMX swaps (hx-target). |
Interatividade sem SPA |
| RNF02 | Não-Funcional | Banco em memória H2 configurado para inicialização rápida de desenvolvimento. | Agilidade Local |
| ID | User Story | Prioridade |
|---|---|---|
| US01 | Como usuário, quero cadastrar uma despesa e vê-la adicionada na tabela imediatamente. | Alta |
| US02 | Como usuário, quero excluir uma despesa com um clique sem recarregar a tela. | Alta |
| User Story | To Do | Doing | Done |
|---|---|---|---|
| US01 — Cadastro de Gastos | ✅ | ||
| US02 — Exclusão Dinâmica HTMX | ✅ |
# Branch da funcionalidade
git checkout -b feature/US01-crud-gastos-htmx
# Executar a aplicacao via Maven Wrapper
./mvnw spring-boot:run
GastoController.java)@Controller
@RequestMapping("/gastos")
public class GastoController {
private final GastoRepository repository;
public GastoController(GastoRepository repository) {
this.repository = repository;
}
@GetMapping
public String listar(Model model) {
model.addAttribute("gastos", repository.findAll());
return "gastos/index";
}
@PostMapping
public String criar(@ModelAttribute Gasto gasto, Model model) {
repository.save(gasto);
model.addAttribute("gastos", repository.findAll());
return "gastos/index :: tabela-gastos"; // Retorna apenas o fragmento HTML para o HTMX
}
}
cd catalogo_projetos/javaweb_gastos_01_htmx/web-spring
./mvnw spring-boot:run
No Windows (PowerShell):
cd catalogo_projetos\javaweb_gastos_01_htmx\web-spring
.\mvnw.cmd spring-boot:run
Abra http://localhost:8080/gastos. Cadastre um novo gasto e observe a adição instantânea na tabela sem recarregamento de página.
# Executar testes unitarios com JUnit 5
./mvnw test
- CRUD de gastos persistindo no banco H2.
- Requisições HTMX substituindo o fragmento da tabela de forma reativa.
| ⬅️ Ver Todos os Projetos no Catálogo de Projetos | 🏠 Página Inicial do Portal |