Lembra do projeto do terceiro módulo do frontend, onde foi necessário implementar um painel admin rpg para a API do servidor? Se alguém se lembra, um mapa foi usado como armazenamento no servidor. Naturalmente, na vida real, esses armazenamentos não são usados, mas bancos de dados são usados. O objetivo deste projeto será escrever uma implementação de camada de repositório alternativa usando Hibernate.

Para isso você precisa:

  1. Fork de um repositório
  2. Baixe sua versão do projeto para o seu computador.
  3. Adicione dependências ao pom.xml:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Faça uma compilação maven (instalação limpa mvn). Para variar, usamos o Java versão 1.8.
  5. Adicionar configuração de inicialização via Idea. A implementação deste item pode ser encontrada na palestra https://codegym.cc/quests/lectures/cgu.module3.lecture02 (item 4). A única diferença é um nome diferente para o artefato. Se você fez tudo certo e lançou o aplicativo, verá algo assim:
  6. Execute o script de criação do esquema rpg no Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Opcional . Se quiser ver qual comportamento é esperado, você pode alterar com.game.service.PlayerServiceo valor de anotação de “db” para “memory” na classe no parâmetro do construtor . Nesse caso, o Spring usará o . Após o teste, não esqueça de alterar o valor da anotação de volta para "db" .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Organize todas as anotações necessárias na classe de entidade com.game.entity.Player. A tabela deve ser nomeada "jogador", esquema "rpg". Para enams, use @Enumerated(EnumType.ORDINAL)além da anotação @Column. Deixe-me lembrá-lo de que o comprimento do campo de nome deve ser de até 12 caracteres, o campo de título - de até 30 caracteres. Absolutamente todos os campos não devem ser nulos.
  9. PlayerRepositoryDBAdicione um campo final privado na classe SessionFactory sessionFactory, inicialize esse campo no construtor da classe. Use as propriedades como em tarefas normais (trabalharemos com o banco de dados MySQL versão 8). De interessante - adicionar
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Isso permitirá que você não crie uma tabela manualmente (ou através da execução de um script sql).
  10. Implemente todos os métodos de classe. Para variar, vamos fazer assim:
    • Implemente o método getAllatravésNativeQuery
    • Implemente o método getAllCountatravésNamedQuery
    • No método beforeStop, chame o sessionFactorymétodo y close. Por ter uma anotação no método @PreDestroy, o Spring chamará esse método antes de parar o aplicativo, e isso permitirá que você libere todos os recursos do sistema de forma válida.
    • A implementação de outros métodos depende de você. Mas não se esqueça das transações e commits para métodos que de alguma forma alteram o conteúdo do banco de dados.
  11. Inicie o aplicativo. Se você fez tudo certo, obterá um aplicativo funcional. Mas não há dados lá, então execute o script init.sql (de recursos) através do Workbench para que eles apareçam. Depois disso, pressione F5 no navegador e verifique se você implementou todos os métodos corretamente.
  12. Seria interessante ver exatamente quais consultas o Hibernate executa, então vamos adicionar o log de consulta. Para fazer isso, adicione a dependência p6spy:p6spy:3.9.1 a pom.xml . Na pasta de recursos, crie um arquivo spy.properties , no qual especifique:
    driverlist=com.mysql.cj.jdbc.Driver
    dateformat=yyyy-MM-dd hh:mm:ss a
    appender=com.p6spy.engine.spy.appender.StdoutLogger
    logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
    
    E no construtor da classe PlayerRepositoryDB, altere duas opções:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Agora, na saída do servidor para cada solicitação, você verá 2 linhas. A primeira é qual declaração é preparada, a segunda é a consulta com os parâmetros inseridos.

Isso é tudo, o projeto está pronto, parabéns!

Na verdade, trabalhar com o Hibernate do Spring usa uma abordagem diferente, que abordaremos no quinto módulo.


Análise de projetos.