<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>STS - CRUD by </title>
      <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw</link>
      <description>Estrutura </description>
      <language>en-us</language>
      <pubDate>2022-02-26 14:28:29 UTC</pubDate>
      <lastBuildDate>2022-03-15 14:56:48 UTC</lastBuildDate>
      <webMaster>hello@padlet.com</webMaster>
      <image>
         <url></url>
      </image>
      <item>
         <title>Anotações</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067548248</link>
         <description><![CDATA[<div><strong><em>@Entity</em></strong> indica que a classe é uma entidade, ou seja,&nbsp; ele será utilizada para gerar uma tabela no Banco de Dados.<br><br><strong><em>@Table</em></strong><em> </em>indica o nome da tabela no Banco de dados. Caso ela não seja declarada, o Banco criará a tabela com o mesmo nome da classe.<br><br><strong><em>@ID</em></strong> inidica que o atributo é a chave primária da tabela.<br><br><strong><em>@GeneratedValue</em></strong> indica que a chave primária será gerada automaticamente pelo Banco de Dados.<br>O parâmetro <strong>strategy</strong> indica como a Chave Primária será gerada. <br>A opção <strong>GenerationType.IDENTITY</strong> indica que será uma sequência numérica iniciando em 1 e será responsabilidade do Banco de dados gerar esta sequência, ou seja, a propriedade auto_increment do SQL. <br><br>Não confundir o auto-incremento do Banco de Dados que inicia em 1 com o indice de um Array (Vetor ou Matriz) que inicia em 0.<br><br><strong><em>@NotBlank</em></strong> indica que um atributo não pode ser nulo e também não pode ser deixado em branco (vazio).<br>O parâmetro message insere uma mensagem que será exibida caso o atributo seja nulo.<br><br><strong><em>@Size</em></strong> tem a função de definir o tamanho minimo e máximo de caracteres de um atributo String. Não é obrigatório definir os 2 parâmetros, você pode definir apenas um deles de acordo com as necessidades do seu projeto.<br><br><strong><em>@JsonFormat</em></strong>(shape = JsonFormat.Shape.STRING) é utilizada&nbsp; para formatar o valor do preço do produto como uma String. Desta forma, conseguiremos visualizar a parte decimal do preço mesmo sendo 00.<br><br><strong><em>@JsonIgnoreProperties</em></strong><strong> </strong>é utilizado para impedir que o informado seja negativo.<br><br><strong><em>@UpdateTimestamp</em></strong> Indica se o atributo receberá um Timestamp (Data e hora do sistema) e sempre que a Postagem for atualizada o atributo também será atualizado.<br><br>***OneToMeny****ManyToOne***<br><br><strong><em>@OneToMany</em></strong><strong>(mappedBy = "tema", cascade = CascadeType.ALL)</strong>: indica,&nbsp; que a Classe Tema terá um relacionamento do tipo One To Many (Um para Muitos) com a Classe&nbsp; Postagem<br><strong>mppedBy</strong> = "tema": Indica qual Objeto será utilizado como "chave estrangeira" no relacionamento, em nosso exemplo será o objeto tema inserido na Classe Postagem<br><strong>cascade</strong> = CascadeType.ALL: Indica que toda e qualquer mudança efetuada num objeto da Classe Tema se propagará para todos os respectivos objetos associados.&nbsp; Exemplo: Se eu apagar um tema, todas as postagens associadas ao tema apaga<br><br><strong><em>@ManyToOne:</em></strong> Anotação que indica que a Classe Postagem terá um relacionamento&nbsp; do tipo Many To One (Muitos para Um) com a Classe Tema<br><strong><em><br>@JsonIgnoreProperties</em></strong>("postagem"): Anotação que desabilita a recursividade&nbsp; infinita durante a exibição dos dados no formato JSON (Desserialização).&nbsp; private Tema tema;: Objeto do tipo Tema que atuará como a "chave estrangeira" da Classe&nbsp; Postagem na relação com a Classe Tema, além de exibir o tema da postagem<br><br><strong><em>GetterAndSetter </em></strong><br><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 14:33:22 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067548248</guid>
      </item>
      <item>
         <title>Ctrl+C </title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067570473</link>
         <description><![CDATA[<div>spring.jpa.hibernate.ddl-auto=update<br>spring.jpa.database=mysql<br>spring.datasource.url=jdbc:mysql://localhost/<strong>db_blogpessoal</strong>?createDatabaseIfNotExist=true&amp;serverTimezone=America/Sao_Paulo&amp;useSSl=false<br>spring.datasource.username=root<br>spring.datasource.password=root<br><br>spring.jpa.show-sql=true<br><br>spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect<br><br>spring.jackson.date-format=yyyy-MM-dd HH:mm:ss<br>spring.jackson.time-zone=Brazil/East</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 15:10:41 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067570473</guid>
      </item>
      <item>
         <title>Criar as consultas personalizadas.</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067570621</link>
         <description><![CDATA[<div><strong>public List&lt;Produto&gt;findAllByNomeContainingIgnoreCase(String nome);<br><br></strong>find -&gt; encontre<br>All -&gt; tudo<br>By -&gt; por<br>(Atributo Nome)<br>Containing -&gt; contendo<br>IgnoreCase -&gt; ignorar caso(ignora letras&nbsp; maiúsculo<br><br><strong>public List&lt;Produto&gt;findAllByPrecoGreaterThanOrderByPreco(BigDecimal preco);		<br><br></strong>find -&gt; encontre<br>All -&gt; tudo<br>By -&gt; por<br>(Atributo Preco)<br>Greater -&gt; melhor<br>Then -&gt; que <br>Order -&gt; ordem&nbsp; <br>By -&gt; por<br>(Atributo Preco) <br><br><strong>public List&lt;Produto&gt;findAllByPrecoLessThanOrderByPrecoDesc(BigDecimal preco);<br><br></strong>find -&gt; encontre<br>All -&gt; tudo<br>By -&gt; por<br>(Atributo Preco)<br>Less -&gt; menor<br>Then -&gt; que <br>Order -&gt; ordem&nbsp; <br>By -&gt; por<br>(Atributo Preco) <br>Desc -&gt; decrescente <br><br>					<br><strong>public List &lt;Produto&gt; findAllByNomeContainingIgnoreCaseAndLaboratorioContainingIgnoreCase (String nome, String laboratorio);<br><br></strong>find -&gt; encontre<br>All -&gt; tudo<br>By -&gt; por<br>(Atributo Nome)<br>Containing -&gt; contendo<br>IgnoreCase -&gt; ignorar caso(ignora letras&nbsp; maiúsculo)<br>And -&gt; e<strong><br></strong>(Atributo Categoria)<br>Containing -&gt; contendo<br>IgnoreCase -&gt; ignorar caso(ignora letras&nbsp; maiúsculo)<br><br><strong>public List &lt;Produto&gt; ContainingIgnoreCaseOrLaboratorioContainingIgnoreCase(String nome, String laboratorio);<br><br></strong>find -&gt; encontre<br>All -&gt; tudo<br>By -&gt; por<br>(Atributo Nome)<br>Containing -&gt; contendo<br>IgnoreCase -&gt; ignorar caso(ignora letras&nbsp; maiúsculo)<br>And -&gt; e<strong><br></strong>(Atributo Categoria)<br>Containing -&gt; contendo<br>IgnoreCase -&gt; ignorar caso(ignora letras&nbsp; maiúsculo)<br><br><strong>public List &lt;Produto&gt; findAllByPrecoBetweenOrderByPreco(BigDecimal preco1, BigDecimal preco2);<br><br></strong>find -&gt; encontre<br>All -&gt; tudo<br>By -&gt; por<br>(Atributo Preco)<br>Between -&gt; entre<br>Order -&gt; ordem&nbsp; <br>By -&gt; por<br>(Atributo Preco) <br><br><strong><em>@Query</em></strong> -&gt; Permite executar uma consulta no Spring utilizando código SQL nativo<br> <br>inicio -&gt; Parâmetro da consulta SQL (Valor inicial)<br> <br>final -&gt; Parâmetro da consulta SQL (Valor final)<br> <br>nativeQuery = true -&gt; Indica que o código da consulta é o SQL nativo que é compatível com qualquer SGBD Relacional<br> <br><strong><em>@Param</em></strong><strong>("inicio")</strong> -&gt; Mapeia o parâmetro :inicio da consulta na variável BigDecimal inicio&nbsp; que é o primeiro parâmetro do método buscarProdutosEntre<br> <br><strong>@Param("fim")</strong> -&gt; Mapeia o parâmetro :fim da consulta na variável BigDecimal fim&nbsp; que é o segundo parâmetro do método buscarProdutosEntre<br> <br>Method Query equivalente: public List&lt;Produto&gt; findByPrecoBetween(BigDecimal inicio, BigDecimal fim);<br> <br><strong>Ex:@Query(value = "select * from tb_produtos where preco between :inicio and :fim", nativeQuery = true)<br>public List &lt;Produto&gt; buscarProdutosEntre(@Param("inicio") BigDecimal inicio, @Param("fim") BigDecimal fim);</strong></div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 15:10:57 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067570621</guid>
      </item>
      <item>
         <title>Anotação</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067576908</link>
         <description><![CDATA[<div><strong><em>@Repository:</em></strong> indica que a Interface é do tipo repositório, ou seja, é responsável pela comunicação com o Banco de dados através dos métodos padrão e das Method Queries (Métodos Personalizados), que são as consultas personalizadas&nbsp; criadas através de palavras chave que representam as instruções da linguagem SQL.<br><br>Observe que na próxima linha, na declaração da Interface foi adicionada uma <strong>Herança </strong>através da palavra reservada <strong>extends </strong>com a Interface <strong>JpaRepository</strong>, que recebe&nbsp; 2 parâmetros:<br><br>1) A Classe Postagem, que é a Entidade (Tabela) que será mapeada em nosso Banco de dados (Lembre-se que a Classe Postagem foi quem gerou a nossa tabela tb_postagens)<br> <br>2) O Long representa a nossa Chave Primária (Primary Key), que é o atributo que recebeu a anotação <strong>@Id </strong>na nossa Classe Postagem (o atributo também se chama<strong> id</strong> em nossa Classe Postagem).<br> <br>Estes 2 parâmetros são do tipo Java Generics (podem receber qualquer tipo de Objeto &lt;T, T&gt;). <br><br>Dentro contexto do JPA são o mínimo necessário para executar os Métodos padrão da <br> <br>Interface <strong>JpaRepository</strong>, que serão implementados na próxima etapa na Classe <strong>PostagemController</strong>. <br> <br>Alguns métodos básicos já ficam automaticamente disponíveis no Recurso Postagem a partir do momento que a Interface PostagemRepository herda a Interface JpaRepository.<br><br><strong>public interface ProdutoRepository extends JpaRepository&lt;Produto, Long&gt;{<br></strong><br><strong>public List &lt;Postagem&gt; findAllByTituloContainingIgnoreCase(String titulo);</strong><br><br>select * from tb_postagens where titulo like "%%"<br>select -&gt; find<br>* -&gt; All<br>where -&gt; By<br>like -&gt; Containing<br>IgnoreCase - ignora o maiusculo e minusculo&nbsp;<br><br><br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 15:22:25 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067576908</guid>
      </item>
      <item>
         <title>Anotações</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067620309</link>
         <description><![CDATA[<div><strong><em>@RestController</em></strong>: indica que a Classe é uma RestController, ou seja, é responsável por responder todas as requisições http enviadas para um endpoint (endereço) definido na anotação @RequestMapping.<br><strong>___________________________________</strong><br><br><strong><em>&nbsp;@RequestMapping</em></strong>("/postagens"): indica o endpoint (endereço) que a controladora responderá as requisições.<br><strong>___________________________________</strong><br><br><strong><em>@CrossOrigin</em></strong>("*"): indica que a classe controladora permitirá o recebimento de requisições realizadas de fora do domínio (localhost, em nosso caso) ao qual ela pertence. Essa anotação é essencial para que o front-end (Angular ou React), tenha acesso à nossa API (O termo técnico é consumir a API)<br><br>Para as versões mais recentes do Angular e do React, é necessário configurar esta anotação com os seguintes parâmetros:<strong> <br></strong>@CrossOrigin(origins = "*", allowedHeaders = "*") <strong><br><br></strong>Esta anotação, além de liberar todas as origens (origins), libera também todos os parâmetros do cabeçalho das requisições (allowedHeaders).<br>Em produção, o *(asterisco) é substituido pelo endereço de domínio (exemplo: www.meudominio.com) do Frontend.<br><strong>___________________________________</strong><em><br></em><strong><em>@Autowired</em></strong> é uma Injeção de Dependência. Consiste&nbsp; na&nbsp; maneira,&nbsp; ou&nbsp; seja,&nbsp; na&nbsp; implementação utilizada pelo&nbsp; Spring&nbsp; Framework&nbsp; de&nbsp; aplicar&nbsp; a&nbsp; Inversão&nbsp; de&nbsp; Controle&nbsp; quando&nbsp; for necessário.<br> <br>A Injeção de Dependência define quais classes serão instanciadas e em quais lugares serão injetadas quando houver necessidade. <br> <br>Em nosso exemplo a classe controladora cria um ponto de injeção da interface PostagemRepository, e quando houver a necessidade o Spring Framework irá criar uma instância (objeto) desta interface permitindo o uso de todos os métodos (padrão ou personalizados da Interface PostagemRepository).<br><strong>___________________________________</strong><br><strong><em>@GetMapping: </em></strong>indica que o método abaixo responderá todas as requisições do tipo GET que forem enviadas no endpoint /postagens<br><br>&nbsp;O Método getAll() será do tipo ResponseEntity porque ele responderá a requisição (Request), com uma HTTP Response (Resposta http).<br>&nbsp;<br>&nbsp; &lt;List&lt;Postagem&gt;&gt;: O Método além de retornar um objeto da Classe ResponseEntity (OK 🡪 200), no parâmetro body (Corpo da Resposta), será retornado um Objeto da Classe List (Collection), contendo todos os Objetos da Classe Postagem persistidos no Banco de dados, na tabela tb_postagens. Observe que nesta linha foi utilizado um recurso chamado Java Generics, que além de simplificar o retorno do Objeto da Classe List, dispensa o uso do casting(mudança de tipos). <br>Observe que na definição do Método foram utilizados os símbolos &lt;T&gt;, onde T é o Tipo do Objeto que será retornado no Corpo da Resposta.<br>&nbsp;<br>return ResponseEntity.ok(postagemRepository.findAll());: Executa o método findAll() (Método padrão da Interface JpaRepository), que retornará todos os Objetos da Classe Postagem persistidos no Banco de dados<br>(&lt;List&lt;Postagem&gt;&gt;). Como a List sempre será gerada (vazia ou não), o Método sempre retornará o Status 200 🡪 <em>OK</em>.<br>O Mátodo findAll() é equivalente a consulta SQL: SELECT * FROM tb_postagens;<br><strong>___________________________________</strong><br> <strong><em>Listar postagem por id</em></strong> <br>Utilizando Expressões <strong><em>Lambda</em></strong><br>As expressões Lambda representam uma função anônima, ou seja, uma função lambda é uma função sem declaração, <br>isto é, não é necessário colocar um nome, um tipo de retorno e o modificador de acesso. A ideia é que o método seja declarado no mesmo lugar em que será usado. As expressões lambda em Java tem a sintaxe definida como: (argumento) -&gt; (corpo). Elas são semelhantes as Arrow Functions do Javascript/Typescript.<br> <br><strong><em>@GetMapping("/{id}"):</em></strong> Anotação que indica que o método abaixo responderá todas as requisições do tipo GET que forem enviadas no endpoint /postagens/id, onde id é uma variável de caminho <em>(path variable)</em>, que receberá em nosso o exemplo o Id que você deseja encontrar<br><br>O Método getById(@PathVariable Long id) será do tipo ResponseEntity porque ele responderá a requisição (Request), com uma HTTP Response (Resposta http), em nosso exemplo a Response Status 200 =&gt;<em> OK</em>, caso a Postagem seja encontrada. Caso não seja encontrada, a resposta será <em>Not Found</em> =&gt; 404 (Não Encontrada).<br> <br><strong><em>@PathVariable</em></strong> Long id: Anotação que insere a variável de caminho (<em>path variable</em>) id, que foi informada no endereço da requisição, e insere no parâmetro id do método getById.<br>Exemplo: http://localhost:8080/postagens/1<br><br>O parâmetro id do método receberá o valor 1 (Id que será procurado na tabela postagens através do método findById(id))<br><br>&lt;Postagem&gt;: Como o Método listará apenas 1 registro da nossa tabela, o método retornará dentro da resposta um objeto do tipo Postagem, que são os dados encontrados na tabela.<br><br>return postagemRepository.findById(id): Retorna a execução do método findById(id)<br> <br><strong><em>Lambda</em></strong><br><strong><em>.map</em></strong>(resposta -&gt; ResponseEntity.<em>ok</em>(resposta)): Se a postagem existir, a função<em> map (tipo Optional)</em>, aplica o valor do objeto resposta (objeto do tipo Postagem com o retorno do método findById(id) no método: <br>ResponseEntity.ok(resposta); e retorna o status OK =&gt; 200<br> <br><strong><em>.orElse</em></strong>(ResponseEntity.notFound().build()); : Se a postagem não for encontrada, retorna o status Not Found =&gt; 404. (build)<br><br>Optional (map): É um contêiner para um valor que pode estar ausente. Em nosso contexto, tem como principal função evitar o erro do tipo NullPointerException (Objeto nulo), caso a Postagem procurada pelo método findById(id)não seja encontrada na Model Postagens.<br><strong>___________________________________<br>Consultar postagens por titulo</strong> <br><strong><em>&nbsp;@GetMapping("/titulo/{titulo}")</em></strong>: Anotação que indica que o método abaixo responderá todas as requisições do tipo GET que forem enviadas no endpoint /postagens/titulo/titulo, onde a segunda palavra titulo é uma variável de caminho (path variable), que receberá em nosso exemplo a String (palavra, sílaba e etc), que você deseja encontrar na tabela tb_postagens<br><br>O Método getByTitulo(@PathVariable Long titulo) será do tipo ResponseEntity porque ele responderá a requisição (Request), com uma HTTP Response (Resposta http), neste caso Response Status 200 =&gt; OK, independente da Postagem ser ou não encontrada. O método retornará uma lista de Postagens vazia, caso nenhuma postagem que atenda ao critério de busca seja encontrada.<br> @PathVariable String titulo: Anotação que insere o valor da variável de caminho titulo, informada no endereço da requisição e insere no parâmetro titulo do método getByTitulo. <br> Exemplo:http://localhost:8080/postagens/titulo/primeira<br> <br>O parâmetro titulo do método receberá a String "primeira" (palavra que será procurada na tabela postagens no campo titulo via findAllByTituloContainingIgnoreCase(titulo))<br> <br>&lt;List&lt;Postagem&gt;&gt;: Como o Método listará todos os registros da nossa tabela, que possuam a string enviada pelo path, o método retornará dentro da resposta um objeto do tipo List (Collection) preenchido com <br>objetos do tipo Postagem, que são os dados da tabela.<br><br>return ResponseEntity.ok(postagemRepository.findAllByTituloContainingIgnoreCase(titulo));: Executa o método findAllByTituloContainingIgnoreCase(titulo) e retorna o status OK =&gt; 200<br><br>Como o Método sempre irá criar a List independente ter ou não valores na tabela, ele sempre retornará 200.<br><strong>___________________________________<br></strong><strong><em>Criar nova postagem <br>@PostMapping:</em></strong> Anotação que indica que o método abaixo responderá todas as requisições do tipo POST que forem enviadas no endpoint /postagens<br><br>O Método ResponseEntity&lt;Postagem&gt; postPostagem (@RequestBody Postagem postagem) será do tipo&nbsp; ResponseEntity porque ele responderá a requisição (Request), com uma HTTP Response (Resposta http),&nbsp; neste caso Response Status 201 =&gt; CREATED, caso a Postagem seja inserida na tabela. Caso não seja inserida na tabela, a resposta será Internal Server Error =&gt; 500<br><br><strong>@Valid:</strong> Valida o Objeto Postagem enviado no corpo da requisição (Request Body), conforme as regras definidas na Model Postagem. Caso algum atributo não seja validado, o método retornará um status 400 =&gt; Bad Request.<br><br><strong><em>@RequestBody</em></strong> Postagem postagem: Anntotation (anotação) que insere o objeto do tipo Postagem enviado no corpo da requisição (Request Body) e insere no parâmetro postagem do método postPostagem<br><br> &lt;Postagem&gt;: O Método retornará dentro da resposta um objeto do tipo Postagem, que são os dados da tabela.<br><br>return ResponseEntity.status(HttpStatus.CREATED).body(postagemRepository.save(postagem));: Executa o método save(postagem) e retorna o status CREATED = 201 se o objeto Postagem foi inserido na tabela postagens no Banco de dados.<br><br>Ao fazer o envio dos dados via Postman ou front-end, não é necessário passar o Id e a Data<strong><br>___________________________________<br>Editar uma postagem </strong><br><strong><em>@PutMapping: </em></strong>Annotation (Anotação), que indica que o método abaixo responderá todas as requisições do tipo PUT que forem enviadas no endpoint /postagens<br><br>O Método ResponseEntity&lt;Postagem&gt; putPostagem (@RequestBody Postagem postagem) será do tipo <br>ResponseEntity porque ele responderá a requisição (Request), com uma HTTP Response (Resposta http), <br>neste caso Response Status 200 =&gt; OK, caso a Postagem seja atualizada na tabela. Caso não seja atualizada na tabela, a resposta será Internal Server Error =&gt; 500<br><br><strong><em>@Valid:</em></strong> Valida o Objeto Postagem enviado no corpo da requisição (Request Body), conforme as regras definidas na Model Postagem. Caso algum atributo não seja validado, o método retornará um status 400 =&gt; Bad Request.<br><br><strong><em>@RequestBody </em></strong>Postagem postagem: Anntotation (anotação) que insere o objeto do tipo Postagem enviado<br>no corpo da requisição (Request Body) e insere no parâmetro postagem do método postPostagem<br><br>&nbsp;&lt;Postagem&gt;: O Método retornará dentro da resposta um objeto do tipo Postagem, que são os dados da tabela.<br>&nbsp;<br>return postagemRepository.findById(postagem.getId()): Retorna a execução do método findById(postagem.getId()).<br>Observe que o Id da postagem é obtido através do método getId() que retorna o Id da Postagem enviada no Corpo da requisição (Request Body)<br>&nbsp;<br>.map(resposta -&gt; ResponseEntity.ok().body(postagemRepository.save(postagem))): Se a postagem existir, a função map (tipo Optional), executa o método save(postagem) e retorna o status OK = 200 se o objeto Postagem foi atualizado na tabela postagens no Banco de dados.<br>&nbsp;<br>.orElse(ResponseEntity.notFound().build());: Se a postagem não for encontrada pelo método findById(postagem.getId()), <br>&nbsp;retorna o status Not Found = 404<br>&nbsp;<br>Optional (map): É um contêiner para um valor que pode estar ausente. Em nosso contexto, tem como principal função evitar o erro do tipo NullPointerException (Objeto nulo), caso a Postagem procurada pelo método findById(id)não seja encontrada na Model Postagens.<br><br>Ao fazer o envio dos dados via Postman ou front-end é necessário passar o Id para identificar qual a <br>&nbsp;Postagem será atualizada.<strong><br>___________________________________<br>Deletar uma postagem </strong><br><strong><em>@DeleteMapping</em></strong>("/{id}"): Annotation (Anotação), que indica que o método abaixo responderá todas as requisições do tipo DELETE que forem enviadas no endpoint /postagens/id<br><br>O Método deletePostagem(@PathVariable Long id)&nbsp; será do tipo ResponseEntity porque ele responderá a requisição (Request), com uma HTTP Response (Resposta http), neste caso Response Status 204 =&gt; NO_CONTENT caso a stagem seja encontrada e excluída da tabela. Caso não seja encontrada, a resposta será Not Found =&gt; 404<br>&nbsp;<br>A Annotation @PathVariable Long id: insere a variável de path (caminho ou url do endpoint),&nbsp; passada no endereço da requisição, e insere no parâmetro id do método deletePostagem<br>Exemplo:http://localhost:8080/postagens/1<br>o parâmetro id do método receberá o valor 1 (Id que será procurado na tabela postagens e deletado via deleteById())<br><br> &lt;?&gt;: O ?, no contexto de genéricos, basicamente serve como um coringa, ou seja, ele representa "qualquer tipo".&nbsp;<br>Sua função é permitir o uso do polimorfismo junto com genéricos, logo você não está definindo um tipo específico&nbsp;<br>para retorno. Como Delete não retorna nada, o tipo ResponseEntity&lt;Void&gt; é o tipo genérico que será retornado.<br>return postagemRepository.findById(id): Retorna a execução do método findById(id). Observe que o Id da postagem foi passado via path (caminho ou url do endpoint)<br>&nbsp;<br>.map(resposta -&gt; {<br>postagemRepository.deleteById(id);<br>return ResponseEntity.status(HttpStatus.NO_CONTENT).build();<br> 			&nbsp; &nbsp; &nbsp; &nbsp;})<br><br>O Trecho de código acima será executado se a postagem for encontrada pelo método findById. Primeiro, o método&nbsp;<br> deleteById(id) irá excluir a postagem da tabela postagens. Na sequência, será retornado o status NO_CONTENT = 204&nbsp;<br> indicando que a postagem foi excluída e não existe mais.<br><br> .orElse(ResponseEntity.notFound().build()): Caso a Postagem não seja encontrada pelo método findById, a resposta será Not Found =&gt; 404</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 16:36:48 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067620309</guid>
      </item>
      <item>
         <title>Status</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067633534</link>
         <description><![CDATA[<div><em>Ok </em>-&gt; 200<br>CREATED -&gt; 201<br>NO_CONTENT -&gt; 204<br><br><em>Bad Request -&gt;400</em><br><em>Not Found</em> -&gt; 404<br><br><em><br></em>Server Error =&gt; 500<br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 17:00:45 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067633534</guid>
      </item>
      <item>
         <title>Optional</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067640131</link>
         <description><![CDATA[<div>Como e onde aplicar o Optional dentro do STS?<br><br>https://drive.google.com/file/d/15vk9Ctp2FHcYKpU4ImaKRGDO_bxaJVdu/view?usp=sharing</div>]]></description>
         <enclosure url="https://drive.google.com/file/d/15vk9Ctp2FHcYKpU4ImaKRGDO_bxaJVdu/view?usp=sharing" />
         <pubDate>2022-02-26 17:12:19 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067640131</guid>
      </item>
      <item>
         <title>Spring Web</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067670440</link>
         <description><![CDATA[<div>Fornece todas as Bibliotecas necessárias para trabalhar com o protocolo http.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:09:19 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067670440</guid>
      </item>
      <item>
         <title>Spring Boot Dev Tools</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067670621</link>
         <description><![CDATA[<div>Permite a atualização do projeto em tempo real durante o processo de Desenvolvimento da aplicação.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:09:29 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067670621</guid>
      </item>
      <item>
         <title>Validation</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067670924</link>
         <description><![CDATA[<div>Fornece um conjunto de anotações que permite validar os atributos das Classes da Camada Model.</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:10:00 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067670924</guid>
      </item>
      <item>
         <title>Spring Data JPA</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067671015</link>
         <description><![CDATA[<div>Java Persistence API é uma biblioteca que armazena e recupera objetos que são armazenados em bancos de dados.</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:10:12 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067671015</guid>
      </item>
      <item>
         <title>MySQL Driver</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067671092</link>
         <description><![CDATA[<div>Responsável pela conexão entre nossa API e o Banco de Dados MySQL.<br><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:10:22 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067671092</guid>
      </item>
      <item>
         <title>@NotNull</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067672050</link>
         <description><![CDATA[<div>Valida se o valor da propriedade anotada não é nulo.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:12:35 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067672050</guid>
      </item>
      <item>
         <title>@AssertTrue </title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067672171</link>
         <description><![CDATA[<div>Valida se o valor da propriedade anotada é verdadeiro.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:12:51 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067672171</guid>
      </item>
      <item>
         <title>@Size</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067672278</link>
         <description><![CDATA[<div>Valida se o valor da propriedade anotada tem um tamanho entre os atributos min e max; pode ser aplicado a propriedades String, Collection, Map e array.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:13:04 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067672278</guid>
      </item>
      <item>
         <title>@Min</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067672579</link>
         <description><![CDATA[<div>Valida se a propriedade anotada tem um valor maior ou igual ao valor mínimo atribuído ao atributo&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:13:39 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067672579</guid>
      </item>
      <item>
         <title>@Max</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067673416</link>
         <description><![CDATA[<div>Valida se a propriedade anotada tem um valor menor ou igual ao valor máximo atribuído ao atributo.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:15:17 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067673416</guid>
      </item>
      <item>
         <title>@Email </title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067673685</link>
         <description><![CDATA[<div>Valida se a propriedade anotada é um email&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:15:54 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067673685</guid>
      </item>
      <item>
         <title>@NotEmpty</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067673842</link>
         <description><![CDATA[<div>Valida se a propriedade não é nula ou vazia; pode ser aplicado a valores de String, Collection, Map ou Array.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:16:13 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067673842</guid>
      </item>
      <item>
         <title>@NotBlank</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067674037</link>
         <description><![CDATA[<div>Pode ser aplicado apenas a valores de texto e valida se a propriedade não é nula ou espaço em branco.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:16:33 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067674037</guid>
      </item>
      <item>
         <title>@Positive</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067674360</link>
         <description><![CDATA[<div>Aplique a valores numéricos e valide se eles são estritamente positivos&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:17:17 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067674360</guid>
      </item>
      <item>
         <title>@PositiveOrZero</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067674532</link>
         <description><![CDATA[<div>Aplique a valores numéricos e valide se eles são estritamente positivos ou positivos incluindo o Zero.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:17:39 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067674532</guid>
      </item>
      <item>
         <title>@Negative</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067675029</link>
         <description><![CDATA[<div>Aplique a valores numéricos e valide se eles são estritamente negativos&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:18:35 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067675029</guid>
      </item>
      <item>
         <title>@NegativeOrZero</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067675327</link>
         <description><![CDATA[<div>Aplique a valores numéricos e valide se eles são estritamente negativos ou negativos incluindo o Zero.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:19:11 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067675327</guid>
      </item>
      <item>
         <title>@Past</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067675744</link>
         <description><![CDATA[<div>Valida se um valor de data está no passado&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:20:01 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067675744</guid>
      </item>
      <item>
         <title>@PastOrPresent</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067676554</link>
         <description><![CDATA[<div>Valida se um valor de data está no passado ou no presente.</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:21:21 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067676554</guid>
      </item>
      <item>
         <title>@Future</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067676803</link>
         <description><![CDATA[<div>Valida se um valor de data está no futuro&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:21:51 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067676803</guid>
      </item>
      <item>
         <title>@FutureOrPresent</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067677161</link>
         <description><![CDATA[<div>Valida se um valor de data está no futuro ou no presente.</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:22:36 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067677161</guid>
      </item>
      <item>
         <title>@CPF </title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067678502</link>
         <description><![CDATA[<div>&nbsp;Valida CPF&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:25:15 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067678502</guid>
      </item>
      <item>
         <title>@CNPJ</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067678587</link>
         <description><![CDATA[<div>&nbsp;Valida CNPJ&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:25:26 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067678587</guid>
      </item>
      <item>
         <title>@ISBN </title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067678712</link>
         <description><![CDATA[<div>&nbsp;Valida o ISBN de um Livro&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:25:47 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067678712</guid>
      </item>
      <item>
         <title>@TituloEleitora</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067678807</link>
         <description><![CDATA[<div>&nbsp;Valida o Título de Eleitor&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:26:01 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067678807</guid>
      </item>
      <item>
         <title>@CreditCardNumber(ignoreNonDigitCharacters =false)</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067678968</link>
         <description><![CDATA[<div>&nbsp;Valida o numero do Cartão de Crédito&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:26:19 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067678968</guid>
      </item>
      <item>
         <title>save </title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067679324</link>
         <description><![CDATA[<div><strong>Salva ou Atualiza um objeto no Banco de Dados.</strong></div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:27:09 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067679324</guid>
      </item>
      <item>
         <title>findById Retorna (exibe) um registro na tabela pelo id</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067679541</link>
         <description><![CDATA[<div>Retorna (exibe) um registro na tabela pelo id</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:27:25 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067679541</guid>
      </item>
      <item>
         <title>existsById</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067679635</link>
         <description><![CDATA[<div>Checa se um id existe na tabela.&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:27:38 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067679635</guid>
      </item>
      <item>
         <title>findAll </title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067679852</link>
         <description><![CDATA[<div>Retorna (exibe) todos os registros da tabela</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:28:07 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067679852</guid>
      </item>
      <item>
         <title>deleteById </title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067679908</link>
         <description><![CDATA[<div>Localiza um registro na tabela pelo id e deleta.</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:28:17 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067679908</guid>
      </item>
      <item>
         <title>deleteAll</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067680061</link>
         <description><![CDATA[<div>Deleta todos os registros da tabela&nbsp;</div>]]></description>
         <enclosure url="" />
         <pubDate>2022-02-26 18:28:38 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2067680061</guid>
      </item>
      <item>
         <title>Link para pegar Dependências</title>
         <author>giuliarafa</author>
         <link>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2094571399</link>
         <description><![CDATA[<div>https://mvnrepository.com/search?q=Spring+web</div>]]></description>
         <enclosure url="https://mvnrepository.com/search?q=Spring+web" />
         <pubDate>2022-03-14 19:45:40 UTC</pubDate>
         <guid>https://padlet.com/giuliarafa/d2jpcsurutxixpxw/wish/2094571399</guid>
      </item>
   </channel>
</rss>
