image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image

SJ

Sidnei Junior30/01/2025 10:15
Compartilhe

Guia sobre o Padrão de Camadas no Java Spring

    📚 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
    Comentários (0)