Anotações Spring, Configurações e Consultas SQL em Projetos de Desenvolvimento

Anotações e Suas Funcionalidades

Em projetos baseados em Spring, diversas anotações são empregadas para configurar e gerenciar componentes. A anotação @Configuration marca classes que definem beans para o contêiner Spring, permitindo métodos com @Bean que retornam objetos gerenciados. Para habilitar a documentação de APIs REST, utiliza-se @EnableSwagger2, que integra o framework Swagger. A anotação @Bean indica que um método produz um bean a ser registrado no contexto da aplicação, com o Spring invocando o método apenas uma vez.

Controladores REST são definidos com @RestController, que combina @Controller e @ResponseBody para retornar dados diretamente no corpo da resposta HTTP. O mapeamento de requisições é feito via @RequestMapping, que pode ser refinado com variantes como @GetMapping para leitura ou @PostMapping para criação. A injeção de dependências é facilitada por @Autowired, que injeta beans automaticamente em campos, setters ou construtores.

Para documentação de operações API, @ApiOperation fornece detalhes como descrições e tipos de resposta. Em camadas de acesso a dados, @Mapper marca interfaces para MyBatis, gerando implementações automaticamente, enquanto @Repository identifica componentes DAO para persistência. A anotação @Param vincula parâmetros de requisição a argumentos de métodos em controladores.

Camadas de serviço são indicadas com @Service para lógica de negócios, e @Override garante que um método sobrescreve corretamente um da superclasse. A anotação @Transactional gerencia transações declarativamente, garantindo atomicidade: alterações são revertidas em caso de exceções não tratadas durante a execução.

Configuração de Arquivos de Projeto

Arquivos de configuração definem parâmetros essenciais para a aplicação. Exemplo em formato properties:

spring.application.name=meu-servico

# Driver JDBC para conexão com banco de dados MySQL
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# URL de conexão com parâmetros de encoding e fuso horário
spring.datasource.url=jdbc:mysql://localhost:3306/meubanco?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC

# Credenciais de acesso ao banco
spring.datasource.username=usuario
spring.datasource.password=senha

# Estratégia de correspondência de caminhos no Spring MVC
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

# Localização dos arquivos de mapeamento MyBatis
mybatis.mapper-locations=classpath:mapeamentos/*.xml

# Pacote de aliases para entidades MyBatis
mybatis.type-aliases-package=com.exemplo.projeto.entidades

# Porta do servidor
server.port=8080

Alternativamente, em formato YAML:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/meubanco?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    username: usuario
    password: senha
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

mybatis:
  mapper-locations: classpath:mapeamentos/*.xml
  type-aliases-package: com.exemplo.projeto.entidades

server:
  port: 8080

Conceitos e Exemplos em SQL

Em consultas SQL, funções e técnicas específicas são frequentemente utilizadas. A função COALESCE retorna o primeiro valor não nulo de uma lista de argumentos, útil para tratar dados ausentes. Em subconsultas, SELECT 1 atua como um placeholder, onde o valor "1" é irrelevante e serve apenas para verificar a existência de linhas. O operador LEFT JOIN retorna todos os rgeistros da tabela esquerda, mesmo quando não há correspondências na tabela direita.

Parâmetros em consultas, como #{nome}, são placeholders que são substituídos por valores reais antes da execução, prevenindo ataques de injeção SQL. Considere a seguinte instrução SQL atualizada com nomes de tabelas e colunas modificados:

UPDATE inventario
SET quantidade_estoque = quantidade_estoque + COALESCE(
    (SELECT SUM(qtd_entrada) FROM entradas WHERE entradas.nome_item = inventario.nome_item),
    0
)
WHERE EXISTS (
    SELECT 1 FROM entradas WHERE entradas.nome_item = inventario.nome_item
)
AND inventario.nome_item = #{item.nome};

Esta consulta atualiza o campo quantidade_estoque na tabela inventario. Ela soma o total de qtd_entrada da tabela entradas para itens correspondentes, usando COALESCE para tratar valores nulos. A cláusula WHERE EXISTS garante que a atualização ocorra apenas se houver registros relacionados, e #{item.nome} é um parâmetro dinâmico que filtra o item específico. A lógica asesgura que a quantidade seja ajustada com base nas entradas registradas, mantendo a integridade dos dados.

Tags: Spring Boot MyBatis Swagger SQL Java Annotations

Publicado em 7-16 00:42