Skip to content

devsuperior/introducao-api-java-spring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Aula: Introdução API web com Java e Spring

🎓Prof. Dr. Nelio Alves - mais de 500 mil alunos impactados

Para quem é esta aula

  • Estudantes de programação há pelo menos 1 ano.
  • Profissionais em início de carreira.
  • Profissionais com mais tempo de carreira que desejam se atualizar ou migrar de tecnologia.

Pré-requisitos para esta aula

  • Conhecimento básico de:
    • Lógica e OO em qualquer linguagem
    • Git e Github
    • SQL

Caso queira reproduzir o projeto, instale no seu computador

O que você vai aprender nesta aula

  • Criar projeto Spring Boot
  • Configurar banco de dados H2
  • Criar classe de domínio (entidade) com ORM da JPA
  • Realizar seed da base de dados
  • Recuperar dados com paginação

Saiba mais sobre nossas formações completas

Passo a passo da aula

1. Criar projeto com Spring Initializr

https://start.spring.io

2. Configurar banco de dados H2

# Configuração do banco de dados em memória
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# Dialeto do Hibernate para H2
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

# Ativa o console web do H2 em /h2-console
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

3. Criar classe de domínio (entidade) com ORM da JPA

package com.devsuperior.dsstock.entities;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

import java.util.UUID;

@Entity
@Table(name = "tb_product")
public class Product {

    @Id
    private UUID id;
    private String name;
    private Double price;
    private Integer quantity;

    // getters, setters
}

4. Realizar seed da base de dados

Arquivo import.sql

INSERT INTO tb_product (id, name, price, quantity) VALUES ('a3f5e6d2-9f1b-4c72-a01a-8e3a7e3c9d21', 'Notebook Dell Inspiron 15', 3899.00, 10);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('b2a4d9c7-8e3f-41b2-912e-77d2a1f6c5a9', 'Smartphone Samsung Galaxy S23', 4599.00, 15);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('c7d8a1b2-4f6c-47e9-9a3d-1e2f7d8a9c3b', 'iPhone 14 Pro Max', 7899.00, 8);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('d9e1c2a3-7f5b-4a6c-8b1d-2f3c9e7a6b4d', 'Smart TV LG 55\" 4K', 2799.00, 12);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('e6f7a9b3-1c2d-4e5f-9b8a-3d7e1c4b9f2a', 'Console PlayStation 5', 3899.00, 6);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('f8a2d3c4-5b6e-47f9-8c1a-4b9f2e7c3d1e', 'Console Xbox Series X', 3799.00, 7);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('a1b2c3d4-6e7f-4a8b-9c2d-5f6e1a2b3c4d', 'Cadeira Gamer ThunderX3', 1299.00, 20);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('b3c4d5e6-7f8a-41b9-8c2d-6a7e1b2c3d4e', 'Mouse Logitech MX Master 3', 499.00, 30);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('c5d6e7f8-1a2b-43c9-9d3e-7b8c2d1e3f4a', 'Teclado Mecânico Redragon Kumara', 299.00, 25);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('d7e8f9a1-2b3c-45d9-8e4f-8c9d2e1f3a5b', 'Monitor Gamer AOC 27\" 144Hz', 1499.00, 14);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('e9f1a2b3-4c5d-47e9-9f5a-9d1e2c3f4b6a', 'HD Externo Seagate 2TB', 549.00, 18);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('f2a3b4c5-6d7e-49f1-8a6b-1c2d3e4f5a7b', 'SSD Kingston NV2 1TB NVMe', 379.00, 22);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('a4b5c6d7-8e9f-41a2-9b3c-2d4e5f6a7b8c', 'Placa de Vídeo RTX 4070 Ti', 4999.00, 5);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('b6c7d8e9-1f2a-43b4-8c5d-3e4f5a6b7c8d', 'Processador AMD Ryzen 7 5800X', 1899.00, 9);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('c8d9e1f2-3a4b-45c6-9d7e-4f5a6b7c8d9e', 'Placa-mãe ASUS TUF B550M', 1099.00, 11);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('d1e2f3a4-5b6c-47d8-8e9f-5a6b7c8d9e1f', 'Memória RAM Corsair 16GB DDR4', 299.00, 40);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('e3f4a5b6-7c8d-49e1-9f2a-6b7c8d9e1f2a', 'Fonte Corsair 650W 80 Plus Bronze', 499.00, 13);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('f5a6b7c8-9d1e-41f2-8a3b-7c8d9e1f2a3b', 'Gabinete Gamer NZXT H510', 599.00, 10);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('a7b8c9d1-2e3f-43a4-9b5c-8d9e1f2a3b4c', 'Headset HyperX Cloud II', 599.00, 21);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('b9c1d2e3-4f5a-45b6-8c7d-9e1f2a3b4c5d', 'Impressora HP DeskJet Ink Advantage', 449.00, 16);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('c2d3e4f5-6a7b-47c8-9d1e-1f2a3b4c5d6e', 'Kindle Paperwhite 11ª Geração', 699.00, 9);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('d4e5f6a7-8b9c-49d1-8e2f-2a3b4c5d6e7f', 'Câmera GoPro Hero 11', 2599.00, 7);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('e6f7a8b9-1c2d-41e3-9f4a-3b4c5d6e7f8a', 'Apple Watch Series 9', 4299.00, 8);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('f8a9b1c2-3d4e-43f5-8a6b-4c5d6e7f8a9b', 'Xiaomi Mi Band 8', 299.00, 25);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('a1c2d3e4-5f6a-47b8-9c9d-5d6e7f8a9b1c', 'Ar Condicionado LG Dual Inverter 12000 BTUs', 2299.00, 6);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('b2d3e4f5-6a7c-49d1-8e2a-6e7f8a9b1c2d', 'Geladeira Brastemp Frost Free 375L', 2999.00, 4);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('c3e4f5a6-7b8d-41c2-9f3a-7f8a9b1c2d3e', 'Máquina de Lavar Electrolux 11Kg', 2399.00, 5);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('d4f5a6b7-8c9e-43d1-8a2b-8a9b1c2d3e4f', 'Micro-ondas Panasonic 32L', 749.00, 12);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('e5a6b7c8-9d1f-45e2-9c3d-9b1c2d3e4f5a', 'Fogão 5 Bocas Consul Inox', 1899.00, 3);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('f6b7c8d9-1e2a-47f3-8d4e-1c2d3e4f5a6b', 'Cafeteira Nespresso Essenza Mini', 599.00, 18);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('a7c8d9e1-2f3b-49a4-9e5f-2d3e4f5a6b7c', 'Aspirador de Pó Robô Roomba i3', 2899.00, 4);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('b8d9e1f2-3a4c-41b5-8f6a-3e4f5a6b7c8d', 'Smart Speaker Amazon Echo Dot 5ª Geração', 379.00, 28);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('c9e1f2a3-4b5d-43c6-9f7b-4f5a6b7c8d9e', 'Caixa de Som JBL Charge 5', 899.00, 17);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('d1f2a3b4-5c6e-45d7-8a9c-5a6b7c8d9e1f', 'Violão Yamaha C40', 899.00, 8);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('e2a3b4c5-6d7f-49e8-9b1d-6b7c8d9e1f2a', 'Teclado Musical Casio CT-X700', 1399.00, 5);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('f3b4c5d6-7e8a-41f9-8c2e-7c8d9e1f2a3b', 'Bicicleta Caloi Elite Carbon', 7999.00, 2);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('a4c5d6e7-8f9b-43a1-9d3f-8d9e1f2a3b4c', 'Patinete Elétrico Xiaomi Mi Scooter 3', 2999.00, 6);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('b5d6e7f8-9a1c-45b2-8e4a-9e1f2a3b4c5d', 'Drone DJI Mini 3 Pro', 4699.00, 3);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('c6e7f8a9-1b2d-47c3-9f5b-1f2a3b4c5d6e', 'Relógio Casio G-Shock', 699.00, 14);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('d7f8a9b1-2c3e-49d4-8a6c-2a3b4c5d6e7f', 'Perfume Paco Rabanne 1 Million 100ml', 499.00, 20);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('e8a9b1c2-3d4f-41e5-9b7d-3b4c5d6e7f8a', 'Tênis Nike Air Max 270', 899.00, 19);
INSERT INTO tb_product (id, name, price, quantity) VALUES ('f9c1d2e3-4a5b-46c7-9d8e-6f7a8b9c1d2e', 'Notebook Apple MacBook Air M2', 10499.00, 5);

5. Recuperar dados com paginação

ProductRepository.java

package com.devsuperior.dsstock.repositories;

import com.devsuperior.dsstock.entities.Product;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.UUID;

public interface ProductRepository extends JpaRepository<Product, UUID> {
}

ProductController.java

package com.devsuperior.dsstock.controllers;

import com.devsuperior.dsstock.entities.Product;
import com.devsuperior.dsstock.repositories.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/products")
public class ProductController {

    @Autowired
    private ProductRepository productRepository;

    @GetMapping
    public Page<Product> getProducts(Pageable pageable) {
        return productRepository.findAll(pageable);
    }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages