Criar um CRUD (Create, Read, Update, Delete) completo é uma das tarefas mais comuns no desenvolvimento de aplicações. No caso do Spring Framework, essa tarefa pode ser realizada de maneira simples e eficiente, aproveitando a robustez do Spring Boot e suas várias funcionalidades. Neste post, vamos mostrar um passo a passo de como construir um CRUD completo usando Spring.
1. Configuração do Ambiente
Antes de começar a codificar, você precisa configurar o ambiente de desenvolvimento. Primeiro, certifique-se de ter o Java (JDK 8 ou superior) instalado e configure o seu IDE de preferência (como IntelliJ IDEA ou Eclipse). Você também vai precisar do Spring Boot, que pode ser facilmente gerado através do Spring Initializr.
Escolha as dependências necessárias:
- Spring Web
- Spring Data JPA
- Banco de dados (H2, MySQL, PostgreSQL, etc.)
- Lombok (opcional para reduzir o boilerplate)
Com isso, você já tem o esqueleto do seu projeto pronto!
2. Definir a Estrutura do Projeto
Crie uma estrutura básica para o projeto:
src/
└── main/
├── java/
│ └── com/
│ └── exemplo/
│ └── crud/
│ ├── model/
│ ├── repository/
│ ├── service/
│ └── controller/
└── resources/
├── application.properties
3. Modelando a Entidade
Crie a classe de modelo que representa os dados que serão manipulados pelo CRUD. Vamos usar um exemplo de uma entidade Produto
.
package com.exemplo.crud.model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Produto {
@Id
private Long id;
private String nome;
private double preco;
// Getters and Setters
}
4. Criando o Repositório
Agora, crie o repositório para interagir com o banco de dados. O Spring Data JPA permite que você crie repositórios simples estendendo a interface JpaRepository
.
package com.exemplo.crud.repository;
import com.exemplo.crud.model.Produto;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProdutoRepository extends JpaRepository<Produto, Long> {
}
5. Desenvolvendo o Serviço
O serviço será responsável pela lógica de negócio. Ele interage com o repositório para realizar as operações de CRUD.
package com.exemplo.crud.service;
import com.exemplo.crud.model.Produto;
import com.exemplo.crud.repository.ProdutoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class ProdutoService {
@Autowired
private ProdutoRepository produtoRepository;
public List<Produto> listarProdutos() {
return produtoRepository.findAll();
}
public Produto buscarProdutoPorId(Long id) {
Optional<Produto> produto = produtoRepository.findById(id);
return produto.orElse(null);
}
public Produto salvarProduto(Produto produto) {
return produtoRepository.save(produto);
}
public void deletarProduto(Long id) {
produtoRepository.deleteById(id);
}
}
6. Criando o Controller
O controlador será responsável por mapear as requisições HTTP e retornar as respostas para o usuário. Aqui, vamos criar os endpoints para o CRUD de Produto
.
package com.exemplo.crud.controller;
import com.exemplo.crud.model.Produto;
import com.exemplo.crud.service.ProdutoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/produtos")
public class ProdutoController {
@Autowired
private ProdutoService produtoService;
@GetMapping
public List<Produto> listarProdutos() {
return produtoService.listarProdutos();
}
@GetMapping("/{id}")
public Produto buscarProdutoPorId(@PathVariable Long id) {
return produtoService.buscarProdutoPorId(id);
}
@PostMapping
public Produto salvarProduto(@RequestBody Produto produto) {
return produtoService.salvarProduto(produto);
}
@PutMapping("/{id}")
public Produto atualizarProduto(@PathVariable Long id, @RequestBody Produto produto) {
produto.setId(id);
return produtoService.salvarProduto(produto);
}
@DeleteMapping("/{id}")
public void deletarProduto(@PathVariable Long id) {
produtoService.deletarProduto(id);
}
}
7. Configurando o Banco de Dados
Adicione as configurações de banco de dados no arquivo application.properties
. Se você estiver usando o H2 (banco em memória para testes), a configuração ficaria assim:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
Se for usar um banco de dados real como MySQL, ajuste as configurações de acordo.
8. Executando o Projeto
Agora, basta executar a classe principal do Spring Boot, que está anotada com @SpringBootApplication
, e seu CRUD estará funcionando! Você pode testar os endpoints usando ferramentas como Postman ou diretamente no navegador.
- GET /produtos – Lista todos os produtos
- GET /produtos/{id} – Busca um produto por ID
- POST /produtos – Cria um novo produto
- PUT /produtos/{id} – Atualiza um produto existente
- DELETE /produtos/{id} – Deleta um produto
Conclusão
Criar um CRUD completo usando Spring é simples e direto, especialmente com o Spring Boot, que facilita a configuração e a implementação. O processo envolve a criação de uma entidade, um repositório, um serviço para a lógica de negócio e um controlador para mapear as requisições. Com esses componentes, você pode construir aplicações web completas de forma ágil e eficiente.