Prévia do material em texto
Desenvolvimento Web Full MVC
Estrutura básica do Maven
src/
main/
java/ → código-fonte
resources/ → arquivos de configuração
test/
java/ → testes unitários
target/ → diretório de saída (build)
pom.xml → arquivo principal de configuração
O pom.xml
org.springframework.boot
spring-boot-starter-web
2.7.5
➔ Arquivo XML que centraliza as configurações do projeto.
Contém:
● Informações do projeto: nome, versão, descrição.
● Dependências: bibliotecas externas necessárias.
● Plugins: tarefas adicionais (compilação, testes, empacotamento).
● Configuração do build.
O ciclo de vida do maven
mvn clean install
➔ O Maven possui fases pré-definidas:
● clean → remove arquivos gerados em builds anteriores.
● compile → compila o código fonte.
● test → executa os testes automatizados.
● package → empacota o projeto (gera .jar ou .war).
● install → instala no repositório local.
● deploy → publica no repositório remoto.
Benefícios do maven
➔ Padronização do ciclo de vida do build.
➔ Gerenciamento automático de dependências (inclusive transitivas).
➔ Integração com ferramentas (Jenkins, SonarQube, Docker, etc).
➔ Reutilização: módulos podem ser compartilhados entre projetos.
➔ Comunidade grande: vasto repositório central (Maven Central).
Projeto
Projeto
Projeto
Projeto
Projeto
Projeto
Projeto
Projeto
Projeto Eclipse
Projeto Eclipse
Projeto Eclipse
Projeto Eclipse
Projeto Eclipse
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
Projeto Eclipse
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MensagemController {
@GetMapping("/hello")
public String hello() {
return "Olá, alunos! 🚀 Esse é um exemplo com Spring Boot.";
}
}
Projeto Eclipse
mvn clean install -> No Terminal
mvn spring-boot:run
Projeto
Projeto
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-test
test
Projeto
package com.example.demomvc.model;
public class Mensagem {
private String texto;
public Mensagem(String texto) {
this.texto = texto;
}
public String getTexto() {
return texto;
}
public void setTexto(String texto) {
this.texto = texto;
}
}
Projeto
package com.example.demomvc.service;
import com.example.demomvc.model.Mensagem;
import org.springframework.stereotype.Service;
@Service
public class MensagemService {
public Mensagem getMensagem() {
return new Mensagem("Olá, bem-vindo ao projeto Spring Boot com MVC!");
}
}
Projeto
package com.example.demomvc.controller;
import com.example.demomvc.service.MensagemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@Autowired
private MensagemService mensagemService;
@GetMapping("/")
public String home(Model model) {
model.addAttribute("mensagem", mensagemService.getMensagem());
return "home"; // renderiza home.html
}
}
Projeto
Spring Boot MVC Demo
Mensagem
Projeto
Vantagens do H2
➔ Integração Simples
◆ Configuração automática com Spring Boot
◆ Não requer instalação externa
➔ Banco em Memória (Ideal para Testes)
◆ Criação e descarte automático dos dados
◆ Excelente para ambiente de desenvolvimento e testes unitários
➔ Console Web Embutido
◆ Interface web para consultas SQL
◆ Acesso via /h2-console
➔ Compatibilidade com JPA/Hibernate
◆ Permite testar entidades e repositórios
◆ Facilita migração para outros bancos (PostgreSQL, MySQL etc.)
➔ Leveza e Rapidez
◆ Roda em memória, inicialização rápida
◆ Perfeito para prototipagem
➔ Útil para Prototipagem e Estudos
◆ Acelera o aprendizado e a criação de provas de conceito
◆ Sem a necessidade de configurar banco de dados robusto
Projeto
Projeto
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-test
test
com.h2database
h2
runtime
Projeto
spring.application.name=primeiro_projeto
# Configuração do banco H2 em memória
spring.datasource.url=jdbc:h2:mem:demodb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
# Dialeto do Hibernate
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
# Habilitar console H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
Projeto
package com.example.demomvc.model;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Produto {
@Id
@GeneratedValue (strategy = GenerationType .IDENTITY)
private Long id;
private String nome;
private Double preco;
public Produto() {}
public Produto(String nome, Double preco) {
this.nome = nome;
this.preco = preco;
}
public Long getId() { return 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; }
}
Projeto
package com.example.demomvc.repository;
import com.example.demomvc.model.Produto;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ProdutoRepository extends JpaRepository {
}
Projeto
package com.example.demomvc.controller;
import com.example.demomvc.model.Produto;
import com.example.demomvc.repository.ProdutoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping ("/produtos" )
public class ProdutoController {
@Autowired
private ProdutoRepository produtoRepository ;
// Listar todos
@GetMapping
public List listar() {
return produtoRepository .findAll();
}
// Adicionar novo produto
@PostMapping
public Produto adicionar(@RequestBody Produto produto) {
return produtoRepository .save(produto);
}
}
Projeto
Atividade
1. Realizar o método de atualizar
2. Realizar o método de deletar
Resolução
import java.util.List;
import java.util.Optional;
@PutMapping("/{id}")
public Produto atualizar(@PathVariable Long id, @RequestBody Produto produtoAtualizado) {
Optional produtoExistente = produtoRepository.findById(id);
if (produtoExistente.isPresent()) {
Produto produto = produtoExistente.get();
produto.setNome(produtoAtualizado.getNome());
produto.setPreco(produtoAtualizado.getPreco());
return produtoRepository.save(produto);
} else {
throw new RuntimeException("Produto não encontrado com id " + id);
}
}
Resolução
@DeleteMapping("/{id}")
public String deletar(@PathVariable Long id) {
if (produtoRepository.existsById(id)) {
produtoRepository.deleteById(id);
return "Produto com id " + id + " deletado com sucesso!";
} else {
return "Produto com id " + id + " não encontrado!";
}
}