< Return to Video

vimeo.com/.../1123921673

  • 0:00 - 0:11
    Vamos organizar agora
    o nosso projeto.
  • 0:11 - 0:16
    A gente precisa que as pastas,
    que a estrutura de diretórios do
  • 0:16 - 0:19
    projeto,
    esteja adequado com uma arquitetura
  • 0:19 - 0:20
    que a gente
    vai utilizar.
  • 0:20 - 0:23
    Então a gente está trabalhando
    aqui com o MVC, não é isso?
  • 0:23 - 0:27
    Então a gente vai ter o módulo,
    que são as regras de negócio.
  • 0:27 - 0:30
    A gente já viu ali o controller,
    que é onde a gente
  • 0:30 - 0:33
    vai ter as classes que vão
    receber as requisições,
  • 0:33 - 0:36
    oriundas lá do nosso cliente web.
  • 0:36 - 0:38
    E a gente vai ter
    mais algumas coisinhas.
  • 0:38 - 0:41
    Então a gente vai organizar
    agora uma estrutura de pastas, de
  • 0:41 - 0:45
    diretórios, os packages aqui
    no contexto Java, para que a gente
  • 0:45 - 0:48
    organize melhor as nossas classes,
    tá bom?
  • 0:48 - 0:51
    Então vamos codificar
    mais um pouquinho.
  • 0:51 - 0:55
    Bom pessoal, então a gente já tem
    aqui o package controller, só que
  • 0:55 - 0:58
    além disso a gente vai
    precisar de mais alguns.
  • 0:58 - 1:01
    Então a gente vai precisar aqui,
    olha, então botar um direito aqui,
  • 1:01 - 1:04
    new package, a gente vai ter um
  • 1:04 - 1:06
    pacote chamado model.
  • 1:06 - 1:08
    E lembra
    que o package model
  • 1:08 - 1:10
    é para a gente
    colocar as classes que
  • 1:10 - 1:15
    modelam os objetos de domínio
    da nossa aplicação.
  • 1:15 - 1:17
    Então vou dar um return aqui.
  • 1:17 - 1:19
    Então já está ali
    o pacotinho model criado.
  • 1:19 - 1:23
    Além disso,
    a gente vai também criar.
  • 1:23 - 1:26
    um outro package chamado repository.
  • 1:26 - 1:31
    repository, esse pacote vai ser
    utilizado para a gente colocar as
  • 1:31 - 1:35
    classes de repositório
    da nossa aplicação.
  • 1:35 - 1:36
    Bom gente,
    e aí falando de repositório,
  • 1:36 - 1:38
    vamos entender
    mais um conceito aqui,
  • 1:38 - 1:40
    né?
  • 1:40 - 1:43
    Um repositório é onde
    a gente tem algo guardado.
  • 1:43 - 1:45
    Então, por exemplo, uma caixa d'água
  • 1:45 - 1:47
    é um repositório de água, né?
  • 1:47 - 1:51
    Então, se eu preciso de água, eu vou
    buscar água ali na caixa d'água.
  • 1:51 - 1:51
    Legal.
  • 1:51 - 1:54
    Aqui no nosso caso,
    o que é o repositório?
  • 1:54 - 1:57
    Ele representa
    a nossa fonte de dados.
  • 1:57 - 1:59
    Então,
    sempre que eu quiser,
  • 1:59 - 2:02
    por exemplo,
    acessar o banco de dados, é
  • 2:02 - 2:04
    no repositório
    que eu estou pensando.
  • 2:04 - 2:05
    Legal?
  • 2:05 - 2:08
    Então, o que a gente vai
    ter nesse pacote repository?
  • 2:08 - 2:14
    As classes que representam
    os dados lá no banco de dados.
  • 2:14 - 2:15
    Legal?
  • 2:15 - 2:15
    E além disso,
  • 2:15 - 2:18
    a gente vai ter um outro package,
    né?
  • 2:18 - 2:21
    Que vai organizar
    as classes de serviço.
  • 2:21 - 2:24
    O nosso controlador, ele até pode
  • 2:24 - 2:29
    obter os dados acessando
    diretamente o repositório.
  • 2:29 - 2:30
    Mas isso não é uma boa prática.
  • 2:30 - 2:34
    O interessante é que aconteça
    da seguinte forma.
  • 2:34 - 2:37
    O controlador,
    ele vai utilizar
  • 2:37 - 2:40
    um serviço que vai
    consumir os dados.
  • 2:40 - 2:42
    Ou seja, a gente vai ter uma classe
  • 2:42 - 2:48
    que vai ser a classe de negócio,
    que vai manipular os dados, né?
  • 2:48 - 2:51
    Ou seja, o repositório devolve
    os dados para o serviço.
  • 2:51 - 2:54
    A camada de serviço pode manipular
    esses dados, trabalhar esses dados
  • 2:54 - 2:57
    de alguma forma e aí
    entregar para o controlador,
  • 2:57 - 3:00
    que vai devolver para o cliente,
    tá bom?
  • 3:00 - 3:03
    Então, percebe que a gente está
    criando aqui uma arquitetura, né?
  • 3:03 - 3:05
    A gente está tentando organizar
  • 3:05 - 3:08
    a nossa aplicação
    em várias camadinhas.
  • 3:08 - 3:10
    Então, a gente tem a camada
    de modelo de negócio,
  • 3:10 - 3:13
    a gente tem a camadinha
    de controller, a camada
  • 3:13 - 3:15
    de repositório
    e a camada de serviço,
  • 3:15 - 3:16
    tá?
  • 3:16 - 3:18
    Então, tudo muito bem organizado,
  • 3:18 - 3:20
    muito bem segmentado, né?
  • 3:20 - 3:23
    Para que a gente possa reutilizar
    o código depois com mais facilidade,
  • 3:23 - 3:25
    para que a gente
    possa fazer manutenção
  • 3:25 - 3:27
    de uma forma mais tranquila,
    né?
  • 3:27 - 3:28
    Então,
    isso tudo é feito
  • 3:28 - 3:30
    para facilitar
    o nosso trabalho aqui.
  • 3:30 - 3:33
    Então, vamos lá criar
    mais essas pastinhas aí.
  • 3:33 - 3:34
    Legal.
  • 3:34 - 3:35
    Então, só para finalizar, né?
  • 3:35 - 3:41
    Mais uma pastinha, mais um package,
    que vai ser o service.
  • 3:41 - 3:43
    Legal.
  • 3:43 - 3:45
    Bom,
    gente, vamos começar criando, então.
  • 3:45 - 3:45
    ..
  • 3:45 - 3:47
    Deixa eu recolher aqui o controller.
  • 3:47 - 3:49
    Então,
    a gente vai começar pelo model, né?
  • 3:49 - 3:54
    Então, aqui a gente vai modelar
    o nosso objeto produto, tá?
  • 3:54 - 3:56
    Então, a gente vai começar
    criando uma classe.
  • 3:56 - 3:59
    Então, vou dar um botão
    direito aqui no model.
  • 3:59 - 4:02
    Vou criar uma classe Java.
  • 4:02 - 4:04
    Vou chamar essa classe de produto.
  • 4:04 - 4:06
    Qual é uma classe?
  • 4:06 - 4:08
    Letra maiúscula, certo, gente?
  • 4:08 - 4:10
    Então, vou dar aqui um return.
  • 4:10 - 4:12
    E vamos definir aqui
    algumas coisinhas.
  • 4:12 - 4:18
    Então, nossa classe produto,
    ela vai ter, né?
  • 4:18 - 4:19
    Um atributo, né?
  • 4:19 - 4:25
    Que vai ser do tipo long,
    que a gente vai chamar de ID, tá?
  • 4:25 - 4:28
    Então, esse campo,
    ele é o identificador, né?
  • 4:28 - 4:29
    Do nosso produto.
  • 4:29 - 4:32
    Cada produto vai
    ter um ID diferente.
  • 4:32 - 4:34
    A gente vai ter também um nome.
  • 4:34 - 4:38
    Então, eu quero saber qual
    é o nome do nosso produto.
  • 4:38 - 4:41
    A gente vai ter também o valor, né?
  • 4:41 - 4:42
    Ou preço, né?
  • 4:42 - 4:43
    Do produto.
  • 4:43 - 4:44
    Vou chamar aqui de valor.
  • 4:44 - 4:47
    Então, qual é o valor desse produto?
  • 4:47 - 4:49
    E a gente vai colocar também aqui
  • 4:49 - 4:51
    a quantidade que a gente
    tem em estoque.
  • 4:51 - 4:56
    Então, vai ser aqui int, quantidade.
  • 4:56 - 4:58
    E a gente vai finalizar aqui, né?
  • 4:58 - 5:01
    Com um atributo
    que é a data de fabricação.
  • 5:01 - 5:04
    Então, vai ser aqui um local date,
  • 5:04 - 5:06
    né?
  • 5:06 - 5:10
    E vai ser aqui a data fabricação,
    tá bom?
  • 5:10 - 5:13
    Então, esses são os atributos, né?
  • 5:13 - 5:17
    E cada objeto,
    produto que a gente criar, vai ter.
  • 5:17 - 5:21
    Então, cada produto vai ter
    o identificador do tipo inteiro, né?
  • 5:21 - 5:22
    Longo.
  • 5:22 - 5:24
    Vai ter um nome,
    que é do tipo string.
  • 5:24 - 5:26
    O valor, que é do tipo double.
  • 5:26 - 5:27
    Quantidade, que é do tipo int, né?
  • 5:27 - 5:30
    Quantas unidades desse produto
    a gente tem em estoque.
  • 5:30 - 5:32
    E a gente vai ter um local date
  • 5:32 - 5:35
    aqui, que é a data
    de fabricação desse produto.
  • 5:35 - 5:36
    Tá bom?
  • 5:36 - 5:36
    Legal.
  • 5:36 - 5:38
    Como a gente está criando
    aqui uma classe, né?
  • 5:38 - 5:40
    Utilizando as boas práticas e tal.
  • 5:40 - 5:42
    Então, a gente definiu todos
    os atributos como privados.
  • 5:42 - 5:45
    Então, a gente não vai ter acesso.
  • 5:45 - 5:46
    a esses atributos.
  • 5:46 - 5:48
    Eles estão encapsulados, né?
  • 5:48 - 5:50
    Então, a gente vai criar aqui
    os métodos de acesso, né?
  • 5:50 - 5:53
    Os famosos getters e setters.
  • 5:53 - 5:55
    Aqui no IntelliJ, a gente tem um
  • 5:55 - 5:56
    atalho para fazer isso, né?
  • 5:56 - 5:59
    Então, se você está usando o Mac OS,
  • 5:59 - 6:03
    você vai pressionar
    Command mais a letra N.
  • 6:03 - 6:06
    E aí vai aparecer esse
    menuzinho aqui para a gente, né?
  • 6:06 - 6:10
    Se você estiver usando o Windows
    ou o Linux, você vai apertar a tecla
  • 6:10 - 6:14
    Alt mais a tecla Insert, tá?
  • 6:14 - 6:15
    Alt, Insert.
  • 6:15 - 6:18
    Vai aparecer esse mesmo
    menuzinho aqui, tá?
  • 6:18 - 6:22
    E aí a gente vai escolher aqui,
    olha, a opção Getter e Setter.
  • 6:22 - 6:23
    Tá ok?
  • 6:23 - 6:25
    Vamos pressionar Return.
  • 6:25 - 6:28
    O IntelliJ já vai sugerir
    para a gente aqui, ó,
  • 6:28 - 6:31
    criar Getter e Setter
    para todos os atributos.
  • 6:31 - 6:35
    Eu vou fazer isso, então vou
    selecionar todo mundo aqui, né?
  • 6:35 - 6:36
    Só segurar o Shift, tá, gente?
  • 6:36 - 6:39
    E ir movimentando
    a setinha para baixo.
  • 6:39 - 6:42
    Ou clicou aqui no primeiro,
    segura o Shift e clica
  • 6:42 - 6:46
    aqui no último,
    que ele já seleciona todo mundo, né?
  • 6:46 - 6:49
    Dá um OK e prontinho, olha só.
  • 6:49 - 6:53
    Estão aqui criados todos
    os métodos Get e Set, né?
  • 6:53 - 6:55
    Utilizando aqui aquele princípio do
  • 6:55 - 6:56
    encapsulamento, né?
  • 6:56 - 6:59
    Na orientação a objeto.
  • 6:59 - 7:00
    Bacana.
  • 7:00 - 7:02
    Agora a gente vai ter que fazer
    as configurações aqui, né?
  • 7:02 - 7:04
    De mapeamento.
  • 7:04 - 7:07
    Agora a gente vai fazer aqui
    uma coisa muito legal, né?
  • 7:07 - 7:10
    Quando a gente está
    trabalhando com o Spring.
  • 7:10 - 7:11
    O que acontece?
  • 7:11 - 7:17
    A classe produto, ela precisa ter
  • 7:17 - 7:20
    uma tabela equivalente, né?
  • 7:20 - 7:22
    Lá no banco de dados.
  • 7:22 - 7:25
    Então imagina assim,
    eu vou mandar um produto, né?
  • 7:25 - 7:29
    Aqui de lá do cliente,
    por exemplo, vai vir um produto.
  • 7:29 - 7:34
    A minha aplicação, o back-end aqui,
    ela vai receber esse produto.
  • 7:34 - 7:37
    E eu vou ter que mandar esse
    produto para o banco de dados.
  • 7:37 - 7:38
    Então o que acontece?
  • 7:38 - 7:42
    Eu tenho o objeto do lado
    da aplicação, só que lá
  • 7:42 - 7:45
    no banco de dados eu tenho a tabela,
    a entidade.
  • 7:45 - 7:51
    Apesar de elas se parecerem, elas
    não são a mesma coisa, não é mesmo?
  • 7:51 - 7:52
    Então o que a gente vai fazer?
  • 7:52 - 7:57
    A gente vai criar um mapeamento
    objeto relacional.
  • 7:57 - 8:00
    O famoso ORM.
  • 8:00 - 8:02
    Que no caso do Spring JPA,
    que é o que vai
  • 8:02 - 8:06
    fazer isso aqui para a gente,
    é o Hibernate.
  • 8:06 - 8:10
    O Hibernate, ele é a biblioteca que,
    de fato, implementa a especificação
  • 8:10 - 8:13
    JPA, que diz como que deve
    ser feito esse mapeamento.
  • 8:13 - 8:17
    Então a JPA, ela diz como que esse
    mapeamento deve ser feito.
  • 8:17 - 8:19
    E a gente tem a implementação,
    de fato,
  • 8:19 - 8:23
    que é o Hibernate,
    que o Spring JPA utiliza.
  • 8:23 - 8:25
    Para fazer isso,
    gente, é bastante simples, tá?
  • 8:25 - 8:27
    Então o que a gente
    vai ter que fazer?
  • 8:27 - 8:33
    A gente vai ter que colocar algumas
    anotações ali na nossa classe.
  • 8:33 - 8:37
    para que o Spring saiba que ele vai
  • 8:37 - 8:39
    ter que localizar
    lá do lado
  • 8:39 - 8:42
    do banco de dados,
    no caso do Oracle,
  • 8:42 - 8:46
    uma tabela que vai ser utilizada
  • 8:46 - 8:49
    tanto para guardar o objeto, quanto
  • 8:49 - 8:53
    para criar de volta o objeto
    na nossa aplicação, tá bom?
  • 8:53 - 8:57
    Então vai fazer esse caminho,
    tanto de ida dos dados para o banco,
  • 8:57 - 8:59
    quanto depois a reconstrução
    do objeto, de fato,
  • 8:59 - 9:02
    aqui do lado da aplicação,
    para depois ainda ser
  • 9:02 - 9:05
    entregue em um outro
    formato lá para o cliente.
  • 9:05 - 9:06
    Beleza?
  • 9:06 - 9:08
    Parece complicado, mas não é não.
  • 9:08 - 9:10
    Vamos ver como é que isso
    funciona na prática.
  • 9:10 - 9:12
    Bom, gente,
    então vamos fazer esse mapeamento.
  • 9:12 - 9:15
    Então, primeira coisa, a classe
  • 9:15 - 9:19
    produto, ela tem que ser
    uma entidade lá no banco de dados.
  • 9:19 - 9:21
    Como a gente está usando Spring,
  • 9:21 - 9:24
    a gente vai fazer uma anotação aqui,
  • 9:24 - 9:29
    arroba entity,
    que é de entidade, tá bom?
  • 9:29 - 9:33
    Opa, não é enable, é entity, do
  • 9:33 - 9:36
    pacote Jacarta Persistence,
    tá bom, gente?
  • 9:36 - 9:37
    Então, olha só, entity.
  • 9:37 - 9:44
    Então, a gente já disse que a classe
    produto, ela deve ser uma entidade
  • 9:44 - 9:47
    lá no banco de dados, tá bom?
  • 9:47 - 9:51
    Então, beleza, além disso, eu vou
    colocar mais uma anotação aqui, que
  • 9:51 - 9:56
    vai ser a anotação table, e eu vou
    passar um parâmetro aqui, que vai
  • 9:56 - 9:59
    ser o name,
    e vou dizer que essa tabela,
  • 9:59 - 10:01
    ela se chama
    lá no banco de
  • 10:01 - 10:05
    dados,
    ela vai se chamar TBL produto.
  • 10:05 - 10:07
    Então,
    essa anotação, ela está
  • 10:07 - 10:09
    dizendo o seguinte
    aqui para o Spring.
  • 10:09 - 10:12
    Olha,
    Spring, a classe produto, ela tem
  • 10:12 - 10:17
    uma tabela no banco
    de dados equivalente, né?
  • 10:17 - 10:19
    E vai ser a TBL produto.
  • 10:19 - 10:23
    Então, essa TBL produto, ela vai
    estar preparada para receber esses
  • 10:23 - 10:24
    atributos aqui, ó.
  • 10:24 - 10:28
    O ID, o nome, o valor,
    a quantidade e a data de fabricação.
  • 10:28 - 10:30
    Então,
    isso aqui que a gente está fazendo,
  • 10:30 - 10:32
    a gente chama de mapeamento,
    tá, gente?
  • 10:32 - 10:36
    Eu estou dizendo que a classe
    produto, ela tem uma entidade no
  • 10:36 - 10:40
    banco de dados,
    que é a TBL produto, beleza?
  • 10:40 - 10:42
    Bom,
    ele está reclamando aqui
  • 10:42 - 10:44
    com a gente,
    pessoal, que é o seguinte,
  • 10:44 - 10:46
    toda tabela tem que ter
    uma chave primária, né?
  • 10:46 - 10:49
    Isso é uma boa prática lá
    na criação de bancos de dados.
  • 10:49 - 10:51
    Então, ele está querendo saber,
  • 10:51 - 10:55
    cara, qual desses atributos
    é a chave primária,
  • 10:55 - 10:58
    é equivalente à chave
    primária lá no banco de dados,
  • 10:58 - 11:02
    corresponde à chave primária
    lá no banco de dados.
  • 11:02 - 11:03
    É o ID, né?
  • 11:03 - 11:05
    Então, eu vou até separar ele aqui,
  • 11:05 - 11:08
    ó, vou deixar ele em destaque aqui
    em relação aos outros atributos,
  • 11:08 - 11:10
    porque a gente vai fazer
    algumas anotações aqui nele.
  • 11:10 - 11:14
    Então, a primeira coisa que eu vou
    fazer, ó, vou colocar aqui um arroba
  • 11:14 - 11:17
    ID, já me sugeriu ali,
    ó, do jacarta Persistence.
  • 11:17 - 11:21
    Então, quando eu faço isso, percebe
    que ele até já parou de reclamar,
  • 11:21 - 11:22
    né?
  • 11:22 - 11:24
    Então, o arroba ID está
    dizendo que o atributo
  • 11:24 - 11:29
    que está com essa anotação
    é a chave primária, ou
  • 11:29 - 11:34
    corresponde, né, a chave
    primária lá no banco de dados.
  • 11:34 - 11:35
    Tá bom?
  • 11:35 - 11:37
    Fora isso, eu vou colocar também
  • 11:37 - 11:41
    esse Generated Value.
  • 11:41 - 11:43
    Porque assim, gente, como que esse
  • 11:43 - 11:48
    valor vai ser gerado
    lá no banco de dados?
  • 11:48 - 11:50
    Como a gente está trabalhando, né?
  • 11:50 - 11:57
    Se fosse, por exemplo, o MySQL,
    isso aqui já seria suficiente, tá?
  • 11:57 - 12:00
    Então, ele sabe que o campo ID,
    lá na tabela,
  • 12:00 - 12:05
    ela vai ser gerado de forma
    auto-incremental, tá bom?
  • 12:05 - 12:06
    Mas, como a gente está trabalhando
  • 12:06 - 12:10
    com Oracle, no Oracle,
    isso aqui não vai funcionar.
  • 12:10 - 12:13
    A gente vai precisar
    usar uma sequência.
  • 12:13 - 12:16
    Lembra que no Oracle,
    eu preciso criar uma sequência,
  • 12:16 - 12:19
    né, que é um objeto lá
    do banco de dados Oracle,
  • 12:19 - 12:22
    que guarda uma sequência numérica,
  • 12:22 - 12:24
    né?
  • 12:24 - 12:28
    E a gente usa essa sequência
    para definir um atributo
  • 12:28 - 12:32
    que vai ser numerado
    automaticamente na tabela.
  • 12:32 - 12:35
    E a gente costuma fazer
    uma sequência para cada tabela.
  • 12:35 - 12:37
    Então,
    por exemplo, se eu vou ter a tabela
  • 12:37 - 12:40
    produto, então a gente
    cria a sequência produto.
  • 12:40 - 12:46
    E a gente diz, olha, cada produto
    que eu inseri vai ser numerado.
  • 12:46 - 12:47
    sequencialmente de um em um.
  • 12:47 - 12:49
    Então, a gente diz lá na sequência,
  • 12:49 - 12:52
    olha, começa no um E vai
    ser incrementado de 1.
  • 12:52 - 12:58
    E aí na hora de fazer um insert
    na tabela, a gente diz que o ID vai
  • 12:58 - 12:59
    verificar qual
    é a sequência
  • 12:59 - 13:01
    que está disponível,
    qual é a próxima
  • 13:01 - 13:05
    sequência disponível e vai atribuir
    esse valor para o registro que
  • 13:05 - 13:06
    a gente estiver inserindo
    naquele momento.
  • 13:06 - 13:07
    Então,
  • 13:07 - 13:08
    é isso que a gente
    está fazendo aqui.
  • 13:08 - 13:10
    Então,
    a gente está dizendo para o Spring,
  • 13:10 - 13:15
    para o JPA, para o Hibernate,
    olha, a forma como você.
  • 13:15 - 13:19
    vai criar esse ID lá no banco
    vai ser através de uma sequência.
  • 13:19 - 13:22
    E agora a gente tem que dizer
    quem é essa sequência, tá bom?
  • 13:22 - 13:23
    Então, vamos continuar, tem mais
  • 13:23 - 13:25
    algumas coisinhas ali nesse ID,
    vamos lá.
  • 13:25 - 13:27
    Aí,
    além disso, o que mais que a gente
  • 13:27 - 13:29
    vai ter
    que falar aqui?
  • 13:29 - 13:32
    A gente já falou que a estratégia
    vai ser a sequência.
  • 13:32 - 13:34
    Aí eu vou quebrar essa linha,
    tá gente?
  • 13:34 - 13:37
    Para a gente ter um pouquinho
    mais espaço aqui.
  • 13:37 - 13:38
    Então, eu vou fazer o seguinte, eu
  • 13:38 - 13:41
    vou jogar essas parênteses
    aqui para baixo.
  • 13:41 - 13:44
    Deixa eu colocar
    aqui o ID coladinho.
  • 13:44 - 13:45
    Então,
    além da sequência,
  • 13:45 - 13:47
    a gente vai colocar
    aqui uma vírgula.
  • 13:47 - 13:51
    E aí,
    a gente vai precisar do Generator.
  • 13:51 - 13:54
    Esse atributo aqui, ó, Generator.
  • 13:54 - 13:57
    E aí, a gente vai colocar
    aqui qual é o nome
  • 13:57 - 14:00
    do gerador de sequências
    lá do banco de dados, tá?
  • 14:00 - 14:06
    Então, eu vou chamar aqui,
    ó, de SecProdutos.
  • 14:06 - 14:08
    Então, lá no Oracle, a gente vai ter
  • 14:08 - 14:13
    que criar uma sequência
    com esse nome aqui, beleza?
  • 14:13 - 14:14
    Legal.
  • 14:14 - 14:16
    Além disso,
    a gente vai colocar aqui, olha,
  • 14:16 - 14:24
    uma outra anotação
    que é o Sequence Generator.
  • 14:24 - 14:26
    Eu tenho que falar aqui para o
  • 14:26 - 14:30
    Spring como que essa sequência
    vai ser gerada.
  • 14:30 - 14:33
    E aí,
    eu vou colocar aqui uma informação.
  • 14:33 - 14:35
    Esse name que eu vou
    colocar aqui
  • 14:35 - 14:38
    vai ser usado pelo Spring,
    tá, gente?
  • 14:38 - 14:43
    Eu vou usar o mesmo nome que eu vou
    dar para a minha sequência, né?
  • 14:43 - 14:45
    Lá no Oracle, beleza?
  • 14:45 - 14:47
    A gente ainda não criou
    isso lá no Oracle.
  • 14:47 - 14:49
    A gente vai criar isso
    num momento posterior.
  • 14:49 - 14:53
    Mas, a gente já está
    planejando isso tudo aqui.
  • 14:53 - 14:54
    Então, vamos lá.
  • 14:54 - 14:58
    Então, eu disse aqui que o valor vai
    ser gerado usando uma sequência e
  • 14:58 - 15:01
    que a sequência vai
    se chamar SecProdutos.
  • 15:01 - 15:03
    Aí, eu preciso dizer para o Spring
  • 15:03 - 15:07
    como é essa sequência,
    esse gerador de sequência.
  • 15:07 - 15:08
    Então,
    eu vou ter essa anotação aqui.
  • 15:08 - 15:10
    Eu estou dando um name.
  • 15:10 - 15:16
    Esse name vai ser usado pelo Spring,
    tá, gente?
  • 15:16 - 15:17
    E, além disso,
    né, do name, eu vou precisar
  • 15:17 - 15:22
    fornecer mais uma coisa
    que é o Sequence Name.
  • 15:22 - 15:29
    Esse Sequence Name, ele tem que ser
    o nome, de fato, lá do Oracle.
  • 15:29 - 15:30
    Que é esse nome aqui, ó.
  • 15:30 - 15:33
    Então, eu até vou dar
    um copiar e colar nele aqui
  • 15:33 - 15:37
    para ter certeza que eu não
    vou escrever nada diferente.
  • 15:37 - 15:37
    Tá, ó.
  • 15:37 - 15:38
    Vou colocar assim.
  • 15:38 - 15:41
    Esse nome aqui,
    gente, ele não precisa ser o mesmo.
  • 15:41 - 15:43
    Porque isso aqui vai ser usado
  • 15:43 - 15:45
    internamente pelo Spring Boot, tá?
  • 15:45 - 15:48
    Pelo Spring aqui na aplicação, tá?
  • 15:48 - 15:51
    Esse cara aqui é o nome
    da sequência lá no Oracle.
  • 15:51 - 15:55
    E o Sequence Name é o nome
    da sequência lá no Oracle.
  • 15:55 - 15:57
    Então, esse nome que a gente
    está colocando aqui tem que ser
  • 15:57 - 15:59
    exatamente o nome
    que a gente vai criar
  • 15:59 - 16:02
    a sequência depois,
    lá no Oracle Database.
  • 16:02 - 16:03
    Beleza?
  • 16:03 - 16:08
    E eu vou colocar aqui o Allocation
    Size, que é um por padrão, tá bom?
  • 16:08 - 16:11
    O tamanho da alocação
    lá da sequência.
  • 16:11 - 16:12
    Então, olha só.
  • 16:12 - 16:15
    Parece que é bastante coisa,
    mas não é.
  • 16:15 - 16:16
    Isso aqui é bastante simples, né?
  • 16:16 - 16:18
    Vamos entender aqui
    o que a gente Fez.
  • 16:18 - 16:22
    Então,
    a gente disse que o ID, ele vai ser
  • 16:22 - 16:25
    o identificador lá na tabela,
    lá no banco de dados.
  • 16:25 - 16:28
    Ou seja,
    ele vai ser a chave primária.
  • 16:28 - 16:29
    Como que vai ser gerado o valor?
  • 16:29 - 16:31
    Usando uma sequência.
  • 16:31 - 16:33
    Quem vai ser o gerador
    dessa sequência?
  • 16:33 - 16:35
    Uma sequência chamada SecProducts.
  • 16:35 - 16:37
    Legal.
  • 16:37 - 16:38
    E aí eu vou passar mais essa
  • 16:38 - 16:41
    informação,
    que vai ser de uso do Spring, né?
  • 16:41 - 16:45
    Estou falando para ele,
    cara, quem é o Sequence Generator?
  • 16:45 - 16:46
    É o SecProducts.
  • 16:46 - 16:50
    Então, esse nome aqui
    é do que a gente vai usar no Spring.
  • 16:50 - 16:51
    Então,
    esse nome pode ser qualquer nome.
  • 16:51 - 16:54
    Não precisa ser o nome
    da sequência que está lá no banco.
  • 16:54 - 16:55
    Beleza?
  • 16:55 - 16:56
    O Sequence Name.
  • 16:56 - 16:58
    Aí eu tenho que falar qual é,
    de fato,
  • 16:58 - 16:59
    o nome da sequência
    lá no banco.
  • 16:59 - 17:02
    E aí vai ser o mesmo nome
    que a gente colocou aqui.
  • 17:02 - 17:03
    Legal?
  • 17:03 - 17:06
    E o Allocation Size, que vai ser um.
  • 17:06 - 17:07
    Legal.
  • 17:14 - 17:16
    para essa fabricação.
  • 17:16 - 17:19
    Aqui a gente está
    usando o Camel Case, né?
  • 17:19 - 17:21
    Camel Case que é aquele formato, né?
  • 17:21 - 17:24
    Padrão de nomear variável, né?
  • 17:24 - 17:28
    Classe e método, que é...
  • 17:28 - 17:30
    Primeira letra minúscula,
    porque esse cara é um atributo.
  • 17:30 - 17:32
    Então, por regra, né?
  • 17:32 - 17:33
    Por boa prática, né?
  • 17:33 - 17:36
    Por design pattern,
    começa com letra minúscula.
  • 17:36 - 17:38
    Como são duas palavrinhas, a gente
  • 17:38 - 17:40
    começa a outra palavra
    com letra maiúscula.
  • 17:40 - 17:43
    Só que isso aqui não é bem
    o padrão lá no banco de dados, né?
  • 17:43 - 17:45
    Lá no banco de dados a gente costuma
  • 17:45 - 17:48
    colocar data,
    underscore, fabricação.
  • 17:48 - 17:51
    Então, eu quero que, apesar de que
  • 17:51 - 17:55
    aqui no Java seja assim, eu quero
  • 17:55 - 17:59
    que lá no banco seja usando
    a nomenclatura do banco.
  • 17:59 - 18:01
    E a gente vai criar lá no banco
  • 18:01 - 18:03
    usando a boa prática do banco.
  • 18:03 - 18:09
    Então, a gente vai colocar aqui,
    ó, um arroba, column, tá?
  • 18:09 - 18:12
    Um arroba, column.
  • 18:12 - 18:15
    Esse carinha aqui,
    ó, do Jakarta Persistence.
  • 18:15 - 18:18
    E aqui eu vou poder
    definir algumas coisinhas.
  • 18:18 - 18:25
    Por exemplo, qual vai ser
    o name que esse campo vai ter?
  • 18:25 - 18:33
    Então, o name dele lá no banco vai
    ser data, underscore, fabricação.
  • 18:33 - 18:36
    Então, percebe que, de novo,
    eu estou fazendo um mapeamento, né?
  • 18:36 - 18:38
    Eu estou dizendo, cara, olha só.
  • 18:38 - 18:42
    Spring, lá no banco é data,
  • 18:42 - 18:45
    underscore, fabricação.
  • 18:45 - 18:47
    Então,
    quem for esse nome lá
  • 18:47 - 18:50
    no banco equivale ao data,
    fabricação
  • 18:50 - 18:53
    aqui no objeto, aqui na classe, tá?
  • 18:53 - 18:56
    Isso aqui vai garantir
    esse mapeamento.
  • 18:56 - 19:01
    Ele sabe que lá é data,
    underscore, fabricação.
  • 19:01 - 19:02
    E aqui é data,
  • 19:02 - 19:05
    fabricação,
    usando o QMLCase, tá bom?
  • 19:05 - 19:06
    Legal.
  • 19:06 - 19:09
    Aqui no nome, a gente pode colocar,
  • 19:09 - 19:10
    né, por exemplo,
  • 19:10 - 19:12
    aqui também,
    olha, um arroba, column.
  • 19:12 - 19:16
    Aí eu posso colocar aqui,
    por exemplo, um length, né?
  • 19:16 - 19:19
    Dizendo que esse campo ele vai ter,
  • 19:19 - 19:24
    no máximo, lá no banco de dados,
    ó, tamanho 100, né?
  • 19:24 - 19:28
    E eu posso dizer também
    que ele não pode ser nulo.
  • 19:28 - 19:31
    Ou seja, o nome é obrigatório.
  • 19:31 - 19:34
    Então, qual é o tamanho
    do campo nome lá no banco?
  • 19:34 - 19:36
    Tamanho 100, né?
  • 19:36 - 19:38
    E eu estou dizendo
    que ele não pode ser nulo.
  • 19:38 - 19:43
    Então, percebe que eu estou
    definindo aqui os metadados do
  • 19:43 - 19:47
    atributo,
    ou do campo, lá no banco de dados.
  • 19:47 - 19:48
    Legal, pessoal.
  • 19:48 - 19:50
    Agora, a gente vai fazer o seguinte,
  • 19:50 - 19:53
    a gente vai executar
    nossa aplicação,
  • 19:53 - 19:54
    né?
  • 19:54 - 19:57
    Para ver se tudo continua aqui
    funcionando normalmente, tá?
  • 19:57 - 19:59
    Então,
    depois que a gente faz algumas
  • 19:59 - 20:02
    implementações,
    é legal a gente executar, né?
  • 20:02 - 20:04
    Para ter certeza que está
    tudo funcionando ainda.
  • 20:04 - 20:07
    Então, olha,
    a minha aplicação está parada, né?
  • 20:07 - 20:09
    Vou dar aqui
    um run e vamos ver
  • 20:09 - 20:12
    o que ele vai falar
    aqui para a gente.
  • 20:12 - 20:13
    Então, percebe,
  • 20:13 - 20:15
    olha só,
    que não tivemos nenhum erro.
  • 20:15 - 20:18
    A aplicação inicializou normalmente.
  • 20:18 - 20:20
    Então, isso é bom sinal.
  • 20:20 - 20:22
    Indica que as nossas configurações
  • 20:22 - 20:25
    aqui na entidade produto,
    aqui nessa classe, né?
  • 20:25 - 20:27
    Nessa entity class que a gente criou
  • 20:27 - 20:31
    o produto,
    está tudo configurado direitinho.
  • 20:31 - 20:32
    Muito bom, gente.
  • 20:32 - 20:36
    Então, é assim que a gente
    faz o mapeamento ORM, né?
  • 20:36 - 20:39
    O mapeamento objeto relacional.
  • 20:39 - 20:40
    Então, lembra que o banco de dados,
  • 20:40 - 20:43
    ele trabalha com estrutura
    relacional, né?
  • 20:43 - 20:44
    De entidades, né?
  • 20:44 - 20:46
    Tabelas.
  • 20:46 - 20:50
    E aqui do lado do Java,
    a gente trabalha com classes, né?
  • 20:50 - 20:52
    Com objetos.
  • 20:52 - 20:56
    Apesar deles se parecerem,
    eles não são exatamente o mesmo, né?
  • 20:56 - 20:58
    Então, a gente precisa
    fazer esse mapeamento.
  • 20:58 - 21:02
    Olha, aqui do lado do Java,
    a classe se chama produto.
  • 21:02 - 21:05
    Lá no banco, é o TBL produto.
  • 21:05 - 21:09
    Olha, aqui na classe produto,
    o campo data fabricação,
  • 21:09 - 21:13
    ele é o data underscore fabricação,
    lá no banco.
  • 21:13 - 21:18
    E o Spring vai conseguir
    automatizar o processo, né?
  • 21:18 - 21:23
    De pegar o objeto, montar
    uma instrução SQL, por exemplo, de
  • 21:23 - 21:26
    insert da forma correta
    e mandar pro banco.
  • 21:26 - 21:28
    Sem a gente ter
    que escrever esse SQL.
  • 21:28 - 21:28
    Por quê?
  • 21:28 - 21:31
    Porque a gente mapeou
    aqui bonitinho.
  • 21:31 - 21:31
    Entenderam?
  • 21:31 - 21:34
    Então, o Hibernate, né?
  • 21:34 - 21:36
    Essa especificação JPA, né?
  • 21:36 - 21:38
    Essa implementação JPA,
    que é o Hibernate, vai
  • 21:38 - 21:41
    fazer esse trabalho pra
    gente automaticamente.
  • 21:41 - 21:42
    Tá bom?
  • 21:42 - 21:45
    Então, percebe que o Spring,
    ele tá facilitando nossa vida.
  • 21:45 - 21:47
    Muita coisa que a gente faria
  • 21:47 - 21:50
    manualmente, a gente tá fazendo de
  • 21:50 - 21:53
    forma automática através
    das anotações, né?
  • 21:53 - 21:55
    E ganhando tempo, né?
  • 21:55 - 22:01
    E melhorando o nosso projeto
    e mantendo ele padronizado, né?
  • 22:01 - 22:06
    E garantindo que ele tenha ali
    as boas práticas de implementação.
Title:
vimeo.com/.../1123921673
Video Language:
Portuguese, Brazilian
Duration:
22:10
Roberto Severiano Junior edited Portuguese, Brazilian subtitles for vimeo.com/.../1123921673
Roberto Severiano Junior edited Portuguese, Brazilian subtitles for vimeo.com/.../1123921673

Portuguese, Brazilian subtitles

Revisions Compare revisions