image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image

SJ

Sidnei Junior30/01/2025 10:15
Compartilhe
Nexa - Análise Avançada de Imagens e Texto com IA na AWSRecomendados para vocêNexa - Análise Avançada de Imagens e Texto com IA na AWS

Guia sobre o Padrão de Camadas no Java Spring

  • #Spring
  • #Java

📚 Introdução

No Spring Boot, normalmente dividimos o código em camadas para manter a organização e facilitar a manutenção. Essas camadas são:

  1. Entidade (Entity)
  2. Repositório (Repository)
  3. Serviço (Service)
  4. Controlador (Controller)



1. 🔍 Entidade (Entity) – Representa a tabela do banco de dados

A entidade é uma classe que representa uma tabela no banco de dados. Normalmente, usamos anotações do JPA (Java Persistence API) para mapear essa classe.

📂 Exemplo:

import jakarta.persistence.*;

@Entity
public class Produto {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  
  private String nome;
  private double preco;

  // Construtor vazio
  public Produto() {}

  // Construtor com argumentos
  public Produto(String nome, double preco) {
      this.nome = nome;
      this.preco = preco;
  }

  // Getters e Setters
  public Long getId() {
      return id;
  }

  public void setId(Long id) {
      this.id = id;
  }

  public String getNome() {
      return nome;
  }

  public void setNome(String nome) {
      this.nome = nome;
  }

  public double getPreco() {
      return preco;
  }

  public void setPreco(double preco) {
      this.preco = preco;
  }
}
🔍 Essa classe Produto representa uma tabela no banco chamada produto. 🔎 Getters e Setters são métodos usados para acessar (get) e modificar (set) os atributos privados da classe. Eles seguem o encapsulamento, uma boa prática da POO.

2. 🏢 Repositório (Repository) – Interface que acessa o banco de dados

O repositório é responsável por fazer operações no banco de dados, como buscar, salvar, deletar.

Ele é uma interface que estende JpaRepository, e o Spring já cuida da implementação para você.

📂 Exemplo:

import org.springframework.data.jpa.repository.JpaRepository;

public interface ProdutoRepository extends JpaRepository<Produto, Long> {
}
🔍 Aqui não tem implementação! O Spring Data JPA cuida disso para você.

3. 🌟 Serviço (Service) – Onde fica a lógica de negócio

A camada de serviço contém a lógica de negócios, como validações e regras antes de acessar o banco.

📂 Exemplo:

import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class ProdutoService {
  private final ProdutoRepository repository;

  public ProdutoService(ProdutoRepository repository) {
      this.repository = repository;
  }

  public List<Produto> listarTodos() {
      return repository.findAll();
  }

  public Produto salvar(Produto produto) {
      return repository.save(produto);
  }
}
🔍 O ProdutoService recebe o ProdutoRepository e faz operações nele.

4. 🌟 Controlador (Controller) – A interface para API REST

O controller recebe requisições HTTP e chama o Service para processar os dados.

📂 Exemplo:

import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/produtos")
public class ProdutoController {
  private final ProdutoService service;

  public ProdutoController(ProdutoService service) {
      this.service = service;
  }

  @GetMapping
  public List<Produto> listarTodos() {
      return service.listarTodos();
  }

  @PostMapping
  public Produto criar(@RequestBody Produto produto) {
      return service.salvar(produto);
  }
}
🔍 Agora temos um endpoint REST:
  • GET /produtos → Retorna todos os produtos.
  • POST /produtos → Cria um novo produto.

🔥 Por que esse padrão é usado?

  1. Separa responsabilidades → Cada camada tem um papel claro.
  2. Facilita testes → Você pode testar cada camada separadamente.
  3. Reutilização → A lógica do Service pode ser reutilizada em diferentes lugares.
  4. Manutenção mais fácil → Se precisar mudar o banco de dados, só altera o Repository.

🚀 Resumo

Entity -Representa a tabela do banco de dados

Repository -Interface que interage com o banco

Service -Contém a lógica de negócios

Controller -Recebe as requisições da API

Compartilhe
Recomendados para você
Deal - Spring Boot e Angular (17+)
Cognizant - Arquitetura com Spring Boot e Cloud
Claro - Java com Spring Boot
Comentários (0)
Recomendados para você