Return to Video

JAD CAP03 2024 VA08 CONSULTAS DERIVADAS DE METODO

  • 0:08 - 0:10
    Além da JPQL,
    também podemos construir
  • 0:10 - 0:13
    as consultas através
    de uma outra forma
  • 0:13 - 0:16
    que chamamos
    de consultas baseadas em métodos.
  • 0:16 - 0:19
    Ou seja,
    conseguimos utilizar os nomes
  • 0:19 - 0:26
    dos campos que temos na classe Java,
    como parte do nome da função.
  • 0:26 - 0:30
    E claro, temos que seguir algumas
    regras para conseguir fazer isso.
  • 0:30 - 0:33
    Então, o nome do método
    que vamos criar
  • 0:33 - 0:38
    é o que vai determinar
    que tipo de consulta a JPA fará.
  • 0:38 - 0:42
    Então, chamamos isso
    de consultas derivadas de métodos.
  • 0:42 - 0:43
    Beleza?
  • 0:43 - 0:47
    Então vamos usar um nome
    que é padronizado,
  • 0:47 - 0:52
    vamos utilizar algumas palavras
    que a JPA nos indica.
  • 0:52 - 0:55
    E aí, com base nos nomes
    dos atributos da nossa classe,
  • 0:55 - 0:58
    conseguimos fazer a consulta,
    beleza?
  • 0:58 - 1:00
    Vamos dar uma olhada
    nessa documentação,
  • 1:00 - 1:02
    para entendermos melhor
    o que isso quer dizer.
  • 1:02 - 1:03
    Vamos lá.
  • 1:03 - 1:10
    Estou aqui na documentação
    desses métodos, né?
  • 1:10 - 1:13
    Nessas consultas baseadas
    em métodos.
  • 1:13 - 1:14
    Então,
    o que acontece?
  • 1:14 - 1:18
    Olha só,
    as pesquisas que vamos usar,
  • 1:18 - 1:20
    a forma que vamos escrever
    os métodos,
  • 1:20 - 1:23
    os nomes dos métodos,
    para poder fazer as pesquisas.
  • 1:23 - 1:26
    E aí temos aqui o padrão, tá?
  • 1:26 - 1:27
    Então,
    por exemplo,
  • 1:27 - 1:29
    temos aqui nessa tabela,
  • 1:29 - 1:34
    a palavra-chave que vamos usar
    e temos aqui um exemplo
  • 1:34 - 1:38
    de como ficaria o nome do método.
  • 1:38 - 1:41
    Então, por exemplo,
    temos aqui o "And".
  • 1:41 - 1:44
    Então o "And" usamos para fazer
    aquelas pesquisas,
  • 1:44 - 1:47
    onde combinamos dois campos,
    por exemplo,
  • 1:47 - 1:52
    selecionar listagem de uma tabela
    todos os registros,
  • 1:52 - 1:56
    onde a cidade seja, por exemplo,
    São Paulo
  • 1:56 - 1:59
    e o nome do bairro,
    seja, por exemplo,
  • 1:59 - 2:01
    Vila Mariana.
  • 2:01 - 2:05
    Então usamos dois ou mais atributos
    para fazer a consulta.
  • 2:05 - 2:08
    Então, olha só,
    como fica essa consulta?
  • 2:08 - 2:13
    É "findBy",
    esse "findBy" é obrigatório.
  • 2:13 - 2:17
    Esse "Lastname",
    é o nome de um atributo na classe.
  • 2:17 - 2:21
    Então imagine que você tenha
    uma classe Java e lá tem um atributo
  • 2:21 - 2:23
    chamado "Lastname".
  • 2:23 - 2:26
    E tem um outro atributo
    chamado "Firstname".
  • 2:26 - 2:29
    Então o "Lastname"
    e o "Firstname"
  • 2:29 - 2:33
    são os nomes dos atributos na classe.
  • 2:33 - 2:36
    Agora o "findBy,"
    é o nome de um método
  • 2:36 - 2:38
    padronizado pela JPA.
  • 2:38 - 2:40
    Eu tenho que usar esse "findBy".
  • 2:40 - 2:44
    Então imagina,
    que ao invés do nome em inglês,
  • 2:44 - 2:49
    fosse em português,
    o último nome e o primeiro nome.
  • 2:49 - 2:50
    Ficaria como?
  • 2:50 - 2:55
    "findBy", último nome, "And",
    primeiro nome, tá bom?
  • 2:55 - 2:58
    Um outro exemplo.
    Olha só o "Between" aqui.
  • 2:58 - 3:02
    O "Between", "findBy",
    ai tem aqui,
  • 3:02 - 3:06
    a data inicial "Between", né?
  • 3:06 - 3:09
    Então vamos fazer ali uma busca, né?
  • 3:09 - 3:14
    Encontrar pela data inicial,
    que esteja entre,
  • 3:14 - 3:18
    e aí passaremos as duas datas
    que serão fornecidas para esse método.
  • 3:18 - 3:21
    Legal.
    O "LessThan", por exemplo.
  • 3:21 - 3:24
    Eu quero buscar todo mundo,
    todos os registros,
  • 3:24 - 3:27
    onde um determinado campo
    seja menor que alguma coisa.
  • 3:27 - 3:31
    Olha só.
    "findByAge".
  • 3:31 - 3:34
    Esse "Age" ele é o nome
    do atributo lá na classe,
  • 3:34 - 3:36
    vamos supor que fosse idade
    em português,
  • 3:36 - 3:40
    então ficaria "findBy",
    idade, "LessThan".
  • 3:40 - 3:45
    Então essa palavra aqui no meio
    tem que ser o nome do atributo
  • 3:45 - 3:47
    lá na classe.
  • 3:47 - 3:51
    Só que o "findBy" eu tenho que usar
    e o "LessThan" também.
  • 3:51 - 3:54
    Ou seja,
    a JPA vai entender que tipo
  • 3:54 - 3:59
    de consulta queremos implementar,
    por conta dessas palavras aqui, tá?
  • 3:59 - 4:02
    Dessas expressões aqui, beleza?
  • 4:02 - 4:03
    E aí eu recomendo para vocês...
  • 4:03 - 4:08
    Vocês tem um link dessa
    documentação no material escrito,
  • 4:08 - 4:11
    então eu recomendo que vocês
    olhem essa documentação
  • 4:11 - 4:15
    para poder variar
    bastante aqui as consultas de vocês.
  • 4:15 - 4:18
    Olha quanta coisa temos aqui.
    Está bom?
  • 4:18 - 4:20
    Então,
    vamos fazer alguns testes
  • 4:20 - 4:22
    para ver como isso funciona.
  • 4:22 - 4:27
    Bom, então vocês viram que tem ali
    toda uma padronização?
  • 4:27 - 4:30
    Então teremos aquelas palavras
    que são obrigatórias,
  • 4:30 - 4:34
    "findBy", "And",
    "LessThan","Between".
  • 4:34 - 4:39
    Essas palavras irão compor
    o nome da função e você vai combinar
  • 4:39 - 4:42
    com os nomes dos campos
    no objeto Java,
  • 4:42 - 4:43
    na classe Java.
  • 4:43 - 4:46
    Isso conseguiremos fazer.
  • 4:46 - 4:50
    Dessa forma, conseguiremos fazer
    as consultas baseadas
  • 4:50 - 4:51
    no nome dos métodos.
  • 4:51 - 4:52
    Olha que legal, né?
  • 4:52 - 4:55
    Essa é uma técnica bastante
    interessante que a JPA
  • 4:55 - 4:56
    entrega para nós.
  • 4:56 - 5:00
    Vamos criar ali uma consulta,
    por exemplo,
  • 5:00 - 5:03
    para fazer uma busca pelo nome,
  • 5:03 - 5:07
    só que usando o método,
    o nome do método,
  • 5:07 - 5:10
    e não usando a query,
    usando a JPQL.
  • 5:10 - 5:13
    Então vamos fazer um ajuste
    ali nas nossas consultas
  • 5:13 - 5:15
    para vermos como isso funciona.
  • 5:15 - 5:20
    Vamos lá ver como isso fica
    escrito em código mesmo
  • 5:20 - 5:21
    ali na nossa aplicação.
  • 5:21 - 5:22
    Vamos trabalhar um pouco.
  • 5:22 - 5:25
    Então olha só,
    temos aqui
  • 5:25 - 5:27
    esse "BuscarContatoPeloNome, né?
  • 5:27 - 5:32
    Então temos já aqui uma consulta
    usando a JPQL,
  • 5:32 - 5:34
    para fazer uma busca de contato
    pelo nome.
  • 5:34 - 5:36
    Agora imagina que queremos
    fazer isso,
  • 5:36 - 5:40
    só que usando a consulta
    derivada de método,
  • 5:40 - 5:42
    a query derivada de método.
  • 5:42 - 5:43
    Então como vamos fazer, né?
  • 5:43 - 5:46
    Então eu vou fazer aqui mesmo,
    aqui embaixo,
  • 5:46 - 5:49
    para vermos como elas são similares,
    tá bom?
  • 5:49 - 5:50
    Então vamos lá.
  • 5:50 - 5:51
    Eu vou colocar aqui,
    olha,
  • 5:51 - 5:57
    vou criar aqui
    um "Optional" de contato.
  • 5:57 - 5:59
    Então,
    o que essa função vai retornar?
  • 5:59 - 6:02
    Ela vai retornar o objeto "Optional"
    do tipo "Contato".
  • 6:02 - 6:05
    Ela vai carregar um contato dentro dela.
  • 6:05 - 6:08
    E aí seguindo aquela regra,
  • 6:08 - 6:10
    como ficará aqui
    o nome da consulta?
  • 6:10 - 6:13
    Eu sei que o meu campo
    lá no banco de dados.
  • 6:13 - 6:14
    Na verdade,
    no banco de dados não,
  • 6:14 - 6:17
    na classe, né?
  • 6:17 - 6:18
    Cadê a nossa classe Java?
  • 6:18 - 6:20
    Deixa eu abrir aqui o nosso modelo.
  • 6:20 - 6:22
    Olha só,
    é nome, tá?
  • 6:22 - 6:25
    E está em português inclusive, né?
    Bacana.
  • 6:25 - 6:29
    Então como ficará aqui:
    "findBy".
  • 6:29 - 6:32
    Então esse "findBy" é obrigatório.
  • 6:32 - 6:36
    Isso aqui a JPA vai reconhecer
    como sendo uma pesquisa,
  • 6:36 - 6:39
    uma consulta que ela terá
    que construir.
  • 6:39 - 6:43
    "findBy" o quê?
    Nome.
  • 6:43 - 6:47
    E observa que eu coloquei o "Nome"
    com "N" maiúsculo,
  • 6:47 - 6:50
    apesar de aqui estar com "n" minúsculo.
  • 6:50 - 6:54
    Mas a JPA também
    entende o que é meu case aqui.
  • 6:54 - 6:58
    Então ele sabe que esse "findBy"
    é da JPA,
  • 6:58 - 7:03
    e ele saberá que o nome aqui,
    apesar de estar com letra maiúscula,
  • 7:03 - 7:07
    ele sabe que está com letra maiúscula
    por conta do que é meu case.
  • 7:07 - 7:09
    E aí vamos colocar aqui, né?
  • 7:09 - 7:13
    Qual é o valor que deve ser passado
    para que essa consulta
  • 7:13 - 7:15
    possa acontecer?
  • 7:15 - 7:16
    Tá bom?
  • 7:16 - 7:19
    Então,
    essa será a anatomia aqui,
  • 7:19 - 7:24
    a assinatura da classe
    que teremos que criar.
  • 7:24 - 7:27
    E olha só como é simples,
  • 7:27 - 7:30
    não vamos precisar
    nem escrever aqui a JPQL.
  • 7:30 - 7:35
    Então, se você precisar fazer
    uma consulta e encontrar alguma coisa
  • 7:35 - 7:41
    que usará apenas um parâmetro,
    apenas um campo,
  • 7:41 - 7:45
    uma propriedade do objeto,
    então você faz dessa forma.
  • 7:45 - 7:48
    Você não precisa usar a JPQL.
  • 7:48 - 7:49
    Tá bom?
    Legal.
  • 7:49 - 7:57
    Agora vamos construir um "service"
    e vamos usar esse método aqui,
  • 7:57 - 7:59
    baseado em "Map",
    essa consulta baseada
  • 7:59 - 8:01
    em nome de "Map".
  • 8:01 - 8:04
    Então, vamos lá agora
    para o nosso serviço, né?
  • 8:04 - 8:07
    E iremos fazer essa consulta aqui.
  • 8:07 - 8:09
    Estou até pensando
    em fazer o seguinte,
  • 8:09 - 8:12
    ao invés de fazer pelo nome,
    eu vou fazer pelo e-mail,
  • 8:12 - 8:14
    porque temos um e-mail lá.
  • 8:14 - 8:17
    Eu acho que vai ficar mais legal,
    porque vamos ter uma pelo nome,
  • 8:17 - 8:21
    usando aqui a JPQL
    e vamos ter uma por e-mail, tá?
  • 8:21 - 8:24
    Eu vou fazer assim
    para termos até essa consulta
  • 8:24 - 8:26
    também disponível aqui
    no nosso endpoint.
  • 8:26 - 8:27
    Então vamos lá.
  • 8:27 - 8:31
    Então eu mudei aqui,
    vou retornar um "Optional" de contato,
  • 8:31 - 8:34
    só que eu vou buscar
    o contato pelo e-mail.
  • 8:34 - 8:37
    Então será fornecido o e-mail
    para localizarmos o contato
  • 8:37 - 8:39
    na nossa base de dados.
  • 8:39 - 8:40
    Agora ficou legal.
  • 8:40 - 8:43
    Agora,
    vamos criar lá no nosso "service",
  • 8:43 - 8:47
    um método para fazer isso,
    para consumir esse serviço.
  • 8:47 - 8:51
    Vamos chamar aqui um "public",
    vamos ter também aqui, né?
  • 8:51 - 8:57
    Ele vai retornar o quê?
    O "ContatoExibicaoDto".
  • 8:57 - 9:03
    Vamos chamar
    de "buscarContatoPeloEmail".
  • 9:03 - 9:05
    Estou usando um nome
    em português mesmo,
  • 9:05 - 9:06
    aqui não tem problema.
  • 9:06 - 9:10
    Onde temos que usar
    o "findBy" é no repositório,
  • 9:10 - 9:12
    lá no serviço não tem
    problema nenhum,
  • 9:12 - 9:15
    eu posso usar
    o nome que eu quiser, tá?
  • 9:15 - 9:16
    E vamos passar, né?
  • 9:16 - 9:18
    Aqui,
    olha.
  • 9:18 - 9:20
    Quem chamar esse método
    terá que me passar
  • 9:20 - 9:23
    uma string que vai representar
    o meu e-mail.
  • 9:23 - 9:29
    E aí vamos retornar
    o "repository.".
  • 9:29 - 9:31
    E temos ali
    o "findByEmail",
  • 9:31 - 9:35
    que é essa última função
    que criamos no nosso serviço.
  • 9:35 - 9:40
    Vamos fornecer esse e-mail aqui,
    para quem chamar.
  • 9:40 - 9:43
    E lógico,
    aqui estamos falando
  • 9:43 - 9:48
    que ele vai retornar
    o "ContatoExibicaoDto".
  • 9:48 - 9:52
    Só que lembra que o "findByEmail"
    vai retornar para nós
  • 9:52 - 9:54
    um "Optional".
  • 9:54 - 9:57
    Então, na verdade aqui,
    o que vamos fazer, né?
  • 9:57 - 10:05
    Vamos criar aqui
    o "Optional" do tipo contato.
  • 10:05 - 10:08
    Vamos chamar esse cara aqui
    de "contatoOptional".
  • 10:08 - 10:14
    E vai receber o quê?
    A resposta do nosso repositório, né?
  • 10:14 - 10:17
    Então esse cara aqui,
    vai nos retornar
  • 10:17 - 10:20
    um objeto do tipo "Optional".
  • 10:20 - 10:22
    E aí, o que vamos fazer?
  • 10:22 - 10:27
    Vamos extrair esse contato
    de dentro do objeto "Optional".
  • 10:27 - 10:31
    Então vamos verificar aqui,
    se o "contatoOptional", né?
  • 10:31 - 10:35
    "contatoOptional.isPresent",
    ou seja,
  • 10:35 - 10:38
    se tem um contato presente
    nesse objeto "contatoOptional",
  • 10:38 - 10:40
    o que faremos?
  • 10:40 - 10:44
    Vamos retornar um "new",
    "ContatoExibicaoDto",
  • 10:44 - 10:50
    passando esse
    "contatoOptional.get.
  • 10:50 - 10:50
    Bacana.
  • 10:50 - 10:54
    Aí lembra que o nosso
    "ContatoExibicaoDto"
  • 10:54 - 10:57
    tem um construtor
    que recebe o contato
  • 10:57 - 11:02
    e retorna a instância
    de um objeto "ContatoExibicaoDto".
  • 11:02 - 11:03
    Legal?
  • 11:03 - 11:06
    E esse "get",
    ele está extraindo o objeto contato,
  • 11:06 - 11:08
    que está dentro
    desse "contatoOptional".
  • 11:08 - 11:09
    Legal, né?
  • 11:09 - 11:12
    E, caso ele não encontre,
    porque pode ser que tenha fornecido
  • 11:12 - 11:15
    um e-mail que não existe
    ou o e-mail errado,
  • 11:15 - 11:21
    então vamos lançar uma exceção
    para dizer que esse usuário,
  • 11:21 - 11:23
    esse contato
    que está sendo buscado,
  • 11:23 - 11:24
    não existe.
  • 11:24 - 11:26
    Então,
    "UsuárioNaoEncontradoException".
  • 11:26 - 11:35
    E vou passar aqui a frase,
    "contato não encontrado".
  • 11:35 - 11:36
    Vamos finalizar aqui.
  • 11:36 - 11:38
    Então, pronto,
    nosso serviço está aqui.
  • 11:38 - 11:41
    Então o "buscarContatoPeloEmail",
  • 11:41 - 11:45
    ele precisa receber um e-mail, né?
  • 11:45 - 11:47
    Ele vai retornar
    o "ContatoExibicaoDto",
  • 11:47 - 11:53
    só que o nosso "findByEmail"
    retorna um "contatoOptional".
  • 11:53 - 11:56
    Então colocamos aqui,
    criamos um contato,
  • 11:56 - 11:58
    um objeto do tipo optional,
  • 11:58 - 12:01
    do tipo contato,
    carregando um contato
  • 12:01 - 12:03
    e vamos verificar
    se existe esse contato.
  • 12:03 - 12:08
    Se ele estiver presente,
    retornamos o "ContatoExibicaoDto".
  • 12:08 - 12:11
    Extraímos o contato que está
    dentro do "Optional",
  • 12:11 - 12:14
    para poder construir esse objeto
    "ContatoExibicaoDto".
  • 12:14 - 12:18
    Se não lançamos aqui uma exceção
    do tipo usuário não encontrado.
  • 12:18 - 12:22
    Agora precisamos criar o endpoint.
  • 12:22 - 12:25
    Então,
    vamos chegar no nosso controlador
  • 12:25 - 12:27
    e vamos criar esse endpoint.
  • 12:27 - 12:28
    Então vamos lá.
  • 12:28 - 12:34
    Então,
    será aqui um "@GetMapping"
  • 12:34 - 12:36
    e eu vou usar também
    parâmetro aqui.
  • 12:36 - 12:38
    Então vamos chamar aqui
    um "@GetMapping",
  • 12:38 - 12:42
    vamos chamar aqui
    o "/contatos"
  • 12:42 - 12:46
    e vamos passar um "params"
    que será o e-mail, tá?
  • 12:46 - 12:50
    Então essa consulta
    ficará desse jeito aqui:
  • 12:50 - 12:53
    "//api/contatos?",
  • 12:53 - 12:57
    passando o parâmetro,
    a Query string aqui "email",
  • 12:57 - 13:00
    que será igual,
    aí você colocará aqui qual é o e-mail
  • 13:00 - 13:04
    que você está querendo
    consultar no banco.
  • 13:04 - 13:05
    Beleza?
    Bacana.
  • 13:05 - 13:09
    E vamos agora fazer aqui
    o nosso método.
  • 13:09 - 13:13
    Então esse "public" retornará
    o "ContatoExibicaoDto",
  • 13:13 - 13:17
    quando "bucarContatoPeloEmail",
  • 13:17 - 13:21
    nome da nossa função,
    do nosso método.
  • 13:21 - 13:24
    Quem chamar
    o "buscarContatoPeloEmail",
  • 13:24 - 13:29
    terá que passar o e-mail,
    e esse e-mail
  • 13:29 - 13:32
    virá aqui pelo parâmetro da URL.
  • 13:32 - 13:38
    Então teremos aqui
    um "@RequestParam".
  • 13:38 - 13:44
    E quem é esse parâmetro?
    Vamos usar aqui.
  • 13:44 - 13:47
    Então, o parâmetro que está vindo aqui,
    que é o e-mail,
  • 13:47 - 13:51
    será colocado no valor da variável,
    do argumento e-mail
  • 13:51 - 13:53
    da função "buscarContatoPeloEmail".
  • 13:53 - 14:02
    E a implementação será simplesmente
    "return service.buscarContatoPeloEmail"
  • 14:02 - 14:07
    passando esse e-mail
    que foi enviado para nós
  • 14:07 - 14:10
    via parâmetro na URL.
  • 14:10 - 14:10
    Então olha lá.
  • 14:10 - 14:18
    Será uma pesquisa,
    uma requisição HTTP do tipo GET.
  • 14:18 - 14:19
    Qual será a requisição?
  • 14:19 - 14:23
    "/contatos",
    completando lá o "/api/contatos"
  • 14:23 - 14:25
    e terá um parâmetro "email".
  • 14:25 - 14:29
    Carregando o e-mail do contato
    que está sendo buscado.
  • 14:29 - 14:36
    Esse e-mail que será fornecido aqui,
    vamos substituir
  • 14:36 - 14:38
    no argumento aqui da nossa função,
    tá bom?
  • 14:38 - 14:41
    E aí vamos passar isso
    lá para o nosso serviço
  • 14:41 - 14:45
    e ele vai retornar se encontrar
    o e-mail equivalente lá.
  • 14:45 - 14:48
    Então vamos restartar
    a nossa aplicação,
  • 14:48 - 14:57
    para fazermos essa consulta.
  • 14:57 - 14:58
    Pronto!
  • 14:58 - 15:00
    Então olha,
    ela foi startada com sucesso,
  • 15:00 - 15:02
    não tivemos nenhum problema.
  • 15:02 - 15:05
    Agora vamos fazer
    uma consulta por e-mail.
  • 15:05 - 15:08
    Então vamos lá.
    Eu vou pegar aqui.
  • 15:08 - 15:11
    Eu não tenho uma consulta pelo e-mail.
  • 15:11 - 15:13
    Então vou pegar essa consulta
    aqui pelo nome.
  • 15:13 - 15:15
    Eu vou duplicar ela.
  • 15:15 - 15:20
    Vou dar o nome aqui,
    "buscar pelo email".
  • 15:20 - 15:22
    "Create".
    Vou clicar nela.
  • 15:22 - 15:24
    E vamos arrumar aqui esta URL.
  • 15:24 - 15:26
    Esta URL não será assim não.
  • 15:26 - 15:29
    Vou chamar aqui,
    "/contatos,
  • 15:29 - 15:36
    como vamos usar parâmetros,
    vamos colocar aqui "?email="
  • 15:36 - 15:39
    e vou colocar o e-mail da pessoa
    que estou buscando.
  • 15:39 - 15:41
    Como eu não me lembro
    dos e-mails cadastrados,
  • 15:41 - 15:43
    então vou pedir para listar
    todo mundo aqui.
  • 15:43 - 15:46
    Vamos supor que eu quero
    procurar alguém
  • 15:46 - 15:49
    que tenha o e-mail,
    "joao@email.com".
  • 15:49 - 15:53
    É o registro número 8.
    Deixa eu dar um control c aqui.
  • 15:53 - 15:56
    Vamos dar uma olhada.
    Control v aqui.
  • 15:56 - 16:00
    Então olha só,
    eu vou fazer uma busca nesse servidor
  • 16:00 - 16:03
    na porta 8080,
    nesse recurso.
  • 16:03 - 16:07
    Eu quero os "contatos"
    e vou passar aqui o parâmetro e-mail,
  • 16:07 - 16:10
    e o valor desse parâmetro
    é "joao@email.com".
  • 16:10 - 16:13
    Vamos dar um "Send"
    e ver se ele vai achar.
  • 16:13 - 16:16
    Olha lá,
    achou aqui o contato.
  • 16:16 - 16:19
    Se eu pegar aqui por exemplo,
    o ".br",
  • 16:19 - 16:20
    esse e-mail não existe.
  • 16:20 - 16:22
    Então se eu der um "Send",
  • 16:22 - 16:25
    ele não achou,
    deu "404 Not Found".
  • 16:25 - 16:29
    Ou seja,
    esse recurso que você está buscando
  • 16:29 - 16:33
    lá no servidor não tem,
    não está lá.
  • 16:33 - 16:34
    Então é isso.
  • 16:34 - 16:37
    Agora também sabemos
    como usar as consultas,
  • 16:37 - 16:40
    utilizando as consultas
    derivadas de método.
  • 16:40 - 16:43
    Então, você pode utilizar
    aquelas palavras-chave,
  • 16:43 - 16:49
    aquelas "keywords",
    que você tem na documentação da JPA,
  • 16:49 - 16:53
    para construir as suas consultas
    baseadas no nome do método
  • 16:53 - 16:54
    no repositório.
  • 16:54 - 16:57
    E aí você faz uma combinação
    das "keywords",
  • 16:57 - 17:02
    com os nomes dos campos
    que você tem lá na sua classe Java.
  • 17:02 - 17:05
    Então isso vai permitir
    que você crie também,
  • 17:05 - 17:08
    consultas personalizadas
    de uma forma bastante simples.
Title:
JAD CAP03 2024 VA08 CONSULTAS DERIVADAS DE METODO
Video Language:
Portuguese, Brazilian
Duration:
17:12

Portuguese, Brazilian subtitles

Incomplete

Revisions Compare revisions