DEV Community

Paulo Gabriel
Paulo Gabriel

Posted on

O CRUD mais rápido da sua vida

Não temos como negar que o ecossistema do Spring Framework é gigante, junto do Spring Boot temos muitos facilitadores, conseguimos desenvolver Web APIs com muita facilidade, a partir do starter conseguimos facilmente criar uma aplicação Spring, também temos a CLI para fazer isso, porém vamos usar o starter. Criamos o projeto adicionando as seguintes dependências:

Dependencias

Feito isso, criamos o projeto, e abrimos ele no nosso editor preferido, vamos trabalhar adicionar um docker-compose para facilitar nossa vida.

version: '3'

services:

  database:
    image: postgres:15-alpine
    container_name: crud-database
    environment:
      POSTGRES_DB: crud
      POSTGRES_USER: crud
      POSTGRES_PASSWORD: crud
    ports:
    - 5432:5432
Enter fullscreen mode Exit fullscreen mode

Vamos mudar o application.properties para application.yaml e vamos adicionar as configurações de conexão com o banco de dados.

spring:
  datasource:
    url: jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:crud}
    username: ${DB_USER:crud}
    password: ${DB_PASS:crud}   
  jpa:
    hibernate:
        ddl-auto: update
Enter fullscreen mode Exit fullscreen mode

Definimos as variáveis de ambiente e também valores padrão para caso elas não existam no ambiente, note que definimos os valores para localhost, e o usuário e banco do docker-compose. Feito isso vamos criar duas models.

@Entity
@Getter
@Setter
@ToString
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @NotBlank
    private String name;
}
...
@Entity
@Getter
@Setter
@ToString
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @NotBlank
    private String name;
    @NotNull
    @PositiveOrZero
    private BigDecimal price;
    @NotNull
    @ManyToOne
    @JoinColumn(name = "category_id")
    private Category category;
}
Enter fullscreen mode Exit fullscreen mode

Também criamos os repositories.

@RestResource
public interface CategoryRepository extends JpaRepository<Category, Long>{

}
...
@RestResource
public interface ProductRepository extends JpaRepository<Product, Long> {

}
Enter fullscreen mode Exit fullscreen mode

Também vamos adicionar a dependencia OpenApi para termos um swagger

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.1.0</version>
</dependency>
Enter fullscreen mode Exit fullscreen mode

Acessando http://localhost:8080/swagger-ui/index.html conseguimos acessar o swagger e ver todos os endpoints do CRUD já criados, inclusive implementando o HATEOS.

Beleza, mas para o que eu vou usar isso?

Para POCs que precisam ser criadas rápidamente, também podemos usar de cache, etc. É um mundo de possibilidades

Top comments (0)