Escolar Documentos
Profissional Documentos
Cultura Documentos
main
1 contributor
Spring Framework
Controlo de Versões
Table 1. Histórico de Versões
Data Autor Versão Descrição Validado
Especificações Técnicas
Este manual destina-se a qualquer pessoa que deseje organizar e acolher informações
sobre a Spring Framework mas também tem a finalidade de servir de guião para iniciantes
e aprendizes.
Table of Contents
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=I… 1/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Spring Boot é uma extensão do Spring Framework, mais rápida e mais eficiente com
funcionalidades como: injeção de dependências iniciais para simplificar a configuração da
compilação e da aplicação, servidor incorporado para reduzir a complexidade da
implementação e configuração automática para funcionalidade Spring. As dependências
mais utilizadas são: JPA, Security, Test, Web e Thymeleaf. Todas as configurações de
dependências são automaticamente incluídas no processo de autoconfiguração.
Principais vantagens
O Spring Boot funciona bem com vários containers de servlet
O Spring Boot funciona bem com alguns dos containers de servlet incorporados mais
populares. O Spring Boot usa o Tomcat como padrão, mas pode-se trocá-lo facilmente por
Jetty, Undertow, Resin e Wildfly.
O Spring Boot usa o Boot Initializer para compilar o idioma de origem. Essa técnica de
inicialização permite que aos utilizadores economizarem espaço nos seus dispositivos e
carreguem aplicações rapidamente.
Embora o Spring Boot possa usar ficheiros WAR (recurso de aplicativo da web), eles não
são necessários. Em vez disso, o Spring Boot pode contar com o JAR (recurso Java).
O Spring Boot não força o desenvolvidor usar um POM (project object model). Incluir o
artefato spring-boot-dependencies permite gerir dependências sem depender de um POM
ou arquivo XML.
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=I… 2/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Como muitas ferramentas de código aberto, o Spring Boot possui uma grande
comunidade de utilizadores cheia de desenvolvedores que gostam de partilhar as suas
ideias e criações.
Ref.: [2]
Instalação Rápida
Passo 1 - Criar um novo projeto
Use este link para criar um projeto “web”. Na caixa de diálogo “Dependências”, procure e
adicione a dependência “web” conforme mostrado na captura de tela. Clique no botão
“Gerar”, baixe o zip e descompacte-o em uma pasta no seu computador.
Figure 1. Configurações necessárias para criar um projeto Spring Boot com Spring Initializr
online
Os projetos criados por start.spring.io contêm Spring Boot, uma estrutura que torna o
Spring pronto para funcionar dentro da sua aplicação, mas sem muito código ou
configuração necessária. O Spring Boot é a maneira mais rápida e popular de iniciar
projetos Spring.
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=I… 3/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Este é todo o código necessário para criar um serviço web simples “Hello World” no Spring
Boot.
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
@SpringBootApplication
@RestController
class DemoApplication {
@GetMapping("/hello")
fun hello(@RequestParam(value = "name", defaultValue = "World") name: String?) :
return "Hello $name!"
}
O método hello() que adicionamos foi projetado para receber um parâmetro String
chamado name e, em seguida, combinar esse parâmetro com a palavra "Hello" no
código. Isso significa que, se definires seu nome como “Joana” na solicitação, a resposta
será “Hello Joana” .
Passo 3 - Teste
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=I… 4/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Vamos compilar e executar o programa. Se estiver a utilizar o Intellij como IDE, clique no
ícone 'Run' para iniciar a compilação e de seguida a execução
Nota: Se não estiver a utilizar o Intellij ou o seu IDE não possui o botão
"Run", pode executar o código abaixo através do terminal:
As últimas linhas aqui nos dizem que o Spring iniciou. O servidor Apache Tomcat
incorporado do Spring Boot atua como um servidor da Web e escuta as solicitações na
porta 8080 . Abra o seu browser e na barra de endereços na parte superior, digite
http://localhost:8080/hello . Deve obter um resultado semelhante a este:
O que acontece quando adicionar ?name=Joana no final da URL? Teste também este caso.
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=I… 5/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Ref.: [3]
Escolha o caminho que irá guardar o projeto, e seleciona a linguagem como Kotlin , o
tipo como Gradle - Kotlin e atribua o nome ao grupo de com.powersolutioncv e o
artifacto como o nome do projeto tudo a minuscula com separações de palavras feitas
com hífen ( - )
Na lista JDK, selecione Download JDK e faça download da versão mais recente do Oracle
OpenJDK.
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=I… 6/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Spring Web
H2 Database
Validation
Spring HATEOAS
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=I… 7/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Ref.: [4]
Estrutura do projeto
Normalmente o projeto é estruturado da seguinte forma:
▪ api: onde contém todos os pacotes com os elementos que fazem a gestão dos pedidos
e dos dados como controladores, conversores de modelos como assemblers, constantes,
exceções para tratamento de erros e os modelos de entrada e saída;
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=I… 8/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
▪ assemblers: que contém classes que convertem os modelos da base de dados para um
modelo de saída, onde são definidos os campos em que o cliente pode receber nas
respostas dos pedidos.
▪ constants: contêm as variáveis que não mudam de valores em todo o sistema, como
mensagens de exceções e validações.
▪ controllers têm a função de gerir de todos os pedidos HTTP feitos pelo cliente e
retornar a resposta dado pelo sistema.
▪ exceptions contém classes que fazem o tratamento de erros e retornam uma mensagem
apropriada para que o utilizador entenda quais são as possíveis causas do erro e corrigir o
pedido caso o erro seja da parte do utilizador.
▪ models contém os modelos de entrada, que são o corpo JSON que deve ser enviado
pelo cliente com os campos requisitados, e os modelos de saída que são modelos que
contém os campos que devem ser retornados pelo servidor.
No pacote config podem se encontrar as classes que são responsáveis pela definição dos
parâmetros de configuração e também pelo carregamento de ficheiros de configuração
caso existirem.
No pacote data encontram-se todas as entidades JPA que são representação da tabela em
que os dados serão persistidos na base de dados no pacote entities ou models. Também
contém as interfaces dos repositórios que dá o acesso aos dados no pacote repositories.
▪ As classes auxiliares estão presentes no pacote helpers, que contêm métodos que
ajudam na implementação de serviços
Entidades
As entidades no JPA nada mais são do que POJOs que representam dados que podem ser
persistidos no banco de dados. Uma entidade representa uma tabela armazenada em um
banco de dados. Cada instância de uma entidade representa uma linha na tabela.
Para definir uma entidade, cria-se uma classe Kotlin com o nome da entidade iniciado
sempre a maíuscula.
class Student (
Para que o Spring reconheça esta classe como uma entidade, deve-se definir a anotação
@Entity .
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 10/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
@Entity
class Student (
Cada entidade JPA deve ter uma chave primária que a identifique exclusivamente. A
anotação @Id define a chave primária. Podemos gerar os identificadores de diferentes
formas, que são especificadas pela anotação @GeneratedValue .
Também pode-se escolher o tipo de id com o formato UUID. Para isto define-se um
generador genérico com estratégia uuid com o nome de system-uuid através da
anotação @GenericGenerator , como pode-se ver no exemplo a seguir:
@Entity
class Student (
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
val id: String = "",
De seguida pode-se definir outros campos do tipo var por serem mutáveis de acordo
com os atributos da entidade. Por exemplo no caso da entidade Student , campos como
código ou número de estudante, nome, idade, ano, curso, faculdade e universidade podem
ser utilizadas.
@Entity
class Student (
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
val id: String = "",
@ManyToOne
var university: University? = null
Neste exemplo podemos notar que todas as variáveis foram inicializadas com o valor
padrão, e em alguns casos como o caso de course , faculty , utilizaram os tipo Course e
Faculty , que podem ser definidos como uma classe de enumerados. As classes de
enumerados contêm valores constantes e padronizados para um determinado tipo num
determinado contexto. Por exemplo, podemos definir a classe Faculty que contém as
faculdades existentes numa universidade.
Também podemos notar relações com uma outra entidade como o caso de university .
Existem vários tipos de relações como OneToOne, OneToMany, ManyToOne e
ManyToMany. Para mais detalhes podes consultar [6]
Ainda nas classes das entidades, pode-se definir o nome da tabela na base de dados
através da anotação @Table , onde no campo name pode-se escolher o nome da tabela.
Convencionalmente, o nome é definido tudo em minúscula.
@Entity
@Table(name = "students")
class Student (
// fields
)
Também existe a anotação de colunas, onde contém várias formas de customizar a coluna,
como o seu nome, o comprimento da entrada, se for nulável ou não, ou se for único.
@Entity
@Table(name = "students")
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 12/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
class Student (
// ...
// ...
)
Repositórios
Cada repositório no Spring Data estende a interface do repositório genérico, mas além
disso, cada um deles tem uma funcionalidade diferente. Existem diferentes tipos de
interfaces de repositório Spring Data e suas funcionalidades, tais como:
CrudRepository
PagingAndSortingRepository
JpaRepository
@Repository
interface StudentRepository : JpaRepository<Student, String>
Para o tipo JpaRepository devemos indicar a entidade e também o tipo de Id. Neste
exemplo, a entidade é Student e o Id é do tipo String . [7]
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 13/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Essa interface declara métodos úteis para trabalhar com especificações. Para usá-los,
precisamos que nosso repositório estenda
org.springframework.data.jpa.repository.JpaSpecificationExecutor<T> .
Por exemplo, agora podemos encontrar todas as instâncias de Student com o código de
estudante especificado:
@Repository
interface StudentRepository : JpaRepository<Student, String>, JpaSpecificationExecut
class StudentOutputModel (
) : RepresentationModel<StudentOutputModel>()
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 14/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
O modelo de saída pode ser definido por uma classe que estende a classe
RepresentationModel do HATEOAS que herda o método add() que serve para adicionar
links de relações da entidade com outras entidades ou com ele próprio.
Um exemplo de corpo JSON pode ser encontrado a baixo. Onde pode-se ver a estrutura
de resposta é retornado pelo servidor:
{
"code" : 123456,
"name" : "Joana Patricia Pereira",
"age" : 19,
"course" : "MEDICINE",
"faculty" : "BIO",
"_links" : {
"self" : {
"href" : "http://localhost:8080/students/5a7cc6d9-cc26-4db7-8365-aee937cd0173"
},
"university": {
"href" : "http://localhost:8080/universities/36127889-bf8e-472f-b88f-bda84b27e
}
}
}
No exemplo acima, temos um exemplo de um JSON retornado pelo servidor, onde pode-
se observar os campos com os dados e também links de relação com a própria entidade
representada por self , onde contém o link para realizar operações para aquela entidade
como GET , PUT , DELETE . Na secção Teste de API encontram-se mais informações destas
operações de forma detalhada. Também o link de relação com a entidade University
onde pode-se efetuar também operações para aquela entidade.
Modelos de Entrada
O modelo de entrada é um corpo JSON que serve para enviar dados para o servidor para
fazer operações de edição na base de dados. Normalmente é passado no corpo de uma
requisição POST ou PUT .
O modelo é definido por uma classe de dados com os campos necessários para o sucesso
da operação requisitada.
São utilizadas anotações de validação que realizam validações como de campo vazio
NotBlank, e de campo anulável NotNull que garantem que os dados necessários sejam
enviados para o sistema. Caso não tenha os dados é retornado uma resposta de erro de
validação.
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 15/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
class StudentInputModel (
Assemblers
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 16/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Ainda utiliza-se o método apply() para que seja feitas outras operações dentro do
modelo. Neste caso através do método add() do RepresentationModel adiciona-se um
link de relação de entidades. Com o método linkTo() de WebMvcLinkBuilder
( org.springframework.hateoas.server.mvc.WebMvcLinkBuilder ) pode-se criar um link. Para
mapear para um dos métodos do controlador que normalmente é o GET , utiliza-se o
methodOn() também da WebMvcLinkBuilder onde é indicado o controlador, e pode-se
acessar o método getStudentById por exemplo que existe no controlador e indicar o id
acessando a partir do modelo ( entity.id ).
Ainda no método linkTo() pode-se indicar a relação com os métodos withRel() onde
indica-se um parâmetro String o nome da relação, mas em caso de relação com a
própria entidade pode-se utilizar o método withSelfRel() sem a necessidade de passar
parâmetro "self" .
@Component
class StudentAssembler : RepresentationModelAssemblerSupport<Student, StudentOutputM
StudentController::class.java, StudentOutputModel::class.java
) {
return StudentOutputModel (
code = entity.code,
name = entity.name,
age = entity.age,
course = entity.course,
faculty = entity.faculty,
).apply {
this.add(
WebMvcLinkBuilder.linkTo(
WebMvcLinkBuilder.methodOn(StudentController::class.java
.getOneStudentById(entity.id)
).withSelfRel()
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 17/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
if(entity.university != null)
this.add(
WebMvcLinkBuilder.linkTo(
WebMvcLinkBuilder.methodOn(UniversityController::cla
.getUniversityById(entity.university!!.id)
).withRel("university")
)
Serviços
Componentes de serviço são classes que contêm a anotação @Service . Esses classes são
usadas para escrever a lógica de negócios em uma camada diferente, separada do ficheiro
de classe @RestController .
@Service
class StudentService () {
Seguindo o exemplo ainda com o caso de Gestão de Estudantes, irá se criar métodos que
servirão para obter, guardar, atualizar e eliminar estudantes.
@Service
class StudentService () {
fun getStudents () {
fun getStudentById () {
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 18/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
fun createStudent () {
fun updateStudent () {
fun deleteStudent () {
Normalmente nos serviços são injetados os repositórios por onde se tem acesso aos
dados, para fazer isto no construtor da classe StudentService indica-se o repositório de
estudantes.
Também nota-se que o assembler é utilizado para converter o modelo guardado para o
modelo de representação. O assembler também deve-se ser injetado no serviço:
@Service
class StudentService (
var assembler : StudentAssembler,
var repository : StudentRepository,
) {
// methods
}
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 19/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
return studentsOut
return studentOut
Também pode-se buscar um estudante através de um outro campo que não seja id. Como
apresentado na secção de Repositórios com o JpaSpecificationExecutor pode-se definir
métodos que buscam a entidade através de campos específicos. Podemos definir no
serviço um método getStudentByCode onde ao passar o código de estudante, pode-se
obter aquele estudante. É feito da mesma forma que o id, com a diferença do uso do
método findStudentByCode para buscar o estudante.
return studentOut
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 20/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
return studentOutput
Note que ao indicar a universidade foi utilizado o id que o identifica. Sendo assim deve-se
buscar a universidade através do seu id recorrendo ao repositório para a universidade,
para isto define-se também no construtor do serviço o universityRepository que irá ser
utilizado para acessar dados sobre as universidades. Após isto, a entidade do estudante
tem uma relação com a entidade da universidade.
@Service
class StudentService (
var assembler : StudentAssembler,
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 21/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
// methods
}
class StudentUpdateInputModel (
No corpo, através do repositório busca-se o estudante pelo seu id, e de seguida guarda-se
numa variável. De seguida através do método apply , introduz-se os valores vindos no
modelo com os novos dados nos seus respetivos campos. Por fim utiliza-se o método
save() para guardar as alterações. A baixo pode-se ver o código que faz o descrito acima.
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 22/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
student.apply {
age = updateInputModel.age
course = updateInputModel.course
faculty = updateInputModel.faculty
university = university
}
return studentOutput
Para o caso de eliminação busca-se o estudante pelo seu id, e utiliza-se o método
delete() para eliminar o estudante da base de dados.
repository.delete(student)
return true
Controladores
Os controladores servem para fazer a gestão das requisições HTTP feitas pelos clientes e
retornar uma resposta do servidor para os clientes definido por uma classe que é anotada
por @RestController . Os controladores são definidos pelo contexto do negócio, mas
também podem ser definidos de acordo com as entidades.
Os métodos contêm anotações que indicam para qual método HTTP e para qual endpoint
deve ser feita a requisição para que seja invocada a função específica para aquela ação.
Por exemplo, para métodos GET ou DELETE , é utilizado a anotação @GetMapping ou
@DeleteMapping respetivamente. É indicado um endpoint caso haja um específico, em que
também pode ser passado parâmetros como um ID, que é indicado pela anotação
@PathVariable . Em casos onde os parâmetros são passados por query, é utilizado a
anotação @RequestParam para identificar a variável.
Para métodos POST e PUT são utilizadas anotações como @PostMapping e @PutMapping ,
onde no corpo é indicado uma anotação @RequestBody em que normalmente é precedido
por uma anotação @Valid para que seja validada os campos de entrada, como
mencionado na secção dos Modelos de Entrada.
No controlador são injetados serviços, que são invocados quando é enviado uma
requisição para o seu respetivo endpoint.
O controlador retorna como resposta para o cliente, lista de modelos de saída em caso de
vários dados ou um modelo de saída com a estrutura referida na secções Modelos de
Saída, ou a indicação de que o pedido foi recebido com sucesso, em casos onde não há
necessidade de retornar dados. Utiliza-se o ResponseEntity para retornar dados
juntamente com o status. Possue status como ok, badRequest, entre outros.
@RestController
@CrossOrigin
@RequestMapping("students")
class StudentController (
var service : StudentService
) {
@GetMapping
fun getAllStudents () : ResponseEntity<List<StudentOutputModel>> {
return ResponseEntity.ok(studentsList)
@GetMapping("/{id}")
fun getOneStudentById (@PathVariable id: String) : ResponseEntity<StudentOutputM
return ResponseEntity.ok(student)
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 24/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
@GetMapping("/one")
fun getOneStudentByCode (@RequestParam("code") code: Long? = null) : ResponseEnt
if(code != null) {
return ResponseEntity.ok(student)
return ResponseEntity.badRequest()
@PostMapping
fun createStudent (@RequestBody body: StudentInputModel) : ResponseEntity<Studen
return ResponseEntity.ok(student)
@PutMapping("/{id}")
fun updateStudent (@PathVariable id: String, @RequestBody body: StudentUpdateInp
: ResponseEntity<StudentOutputModel> {
return ResponseEntity.ok(student)
@DeleteMapping("/{id}")
fun deleteStudent (@PathVariable id: String) : ResponseEntity<Boolean> {
return ResponseEntity.ok(deleted)
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 25/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Desafio: No controlador, crie um método HTTP para atualizar uma entidade através de
Por exemplo atualizar os dados do estudante através do seu código de estudante.
Teste de API
Vamos compilar e executar o programa. Clique no ícone 'Run' para iniciar a compilação e
de seguida a execução
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 26/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 27/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 28/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 29/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 30/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
Glossary
A
AOP
C
Commons DBCP
Commons DataBase Connection Pools - Library of the Apache foundation offering pooling
implementations of the DataSource interface.
CRUD
D
DAO
Data Access Object - Pattern to separate persisting logic from the object to be persisted
Dependency Injection
Pattern to hand a component’s dependency to the component from outside, freeing the
component to lookup the dependant itself. For more information see
http://en.wikipedia.org/wiki/Dependency_Injection.
H
Hibernate
J
JPA
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 31/32
3/16/23, 10:21 PM documentation/powersolution-academy-spring-boot-basics.adoc at main · PowerSolution-Academy/documentation
S
Spring
Referências
[1] Spring Framework - Spring.io
Give feedback
https://github.com/PowerSolution-Academy/documentation/blob/main/backend/spring-boot/powersolution-academy-spring-boot-basics.adoc?fbclid=… 32/32