¿Recuerdas el proyecto del tercer módulo en la interfaz, donde era necesario implementar un panel de administración de rpg para la API del servidor? Si alguien recuerda, se usó un mapa como almacenamiento en el servidor. Naturalmente, en la vida real, tales almacenamientos no se utilizan, pero se utilizan bases de datos. El objetivo de este proyecto será escribir una implementación de capa de repositorio alternativa utilizando Hibernate.

Para esto necesitas:

  1. Bifurcación de un repositorio
  2. Descarga tu versión del proyecto a tu computadora.
  3. Agregue dependencias a pom.xml:
    • mysql: mysql-conector-java: 8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Haga una compilación experta (mvn clean install). Para variar, usamos Java versión 1.8.
  5. Agregue la configuración de lanzamiento a través de Idea. La implementación de este elemento se puede encontrar en la conferencia https://codegym.cc/quests/lectures/es.cgu.module3.lecture02 (elemento 4). La única diferencia es un nombre diferente para el artefacto. Si hiciste todo correctamente e iniciaste la aplicación, verás algo como esto:
  6. Ejecute el script de creación de esquemas rpg en Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Opcional _ Si desea ver qué comportamiento se espera, puede cambiar com.game.service.PlayerServiceel valor de la anotación de "db" a "memoria" en la clase en el parámetro constructor . En este caso, Spring usará el . Después de la prueba, no olvide volver a cambiar el valor de la anotación a "db" .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Organice todas las anotaciones necesarias en la clase de entidad com.game.entity.Player. La mesa debe llamarse "jugador", esquema "rpg". Para enams, use @Enumerated(EnumType.ORDINAL)además de la anotación @Column. Permítame recordarle que la longitud del campo de nombre debe tener hasta 12 caracteres, el campo de título, hasta 30 caracteres. Absolutamente todos los campos no deben ser nulos.
  9. PlayerRepositoryDBAgregue un campo final privado en la clase SessionFactory sessionFactory, inicialice este campo en el constructor de la clase. Usa las propiedades como en las tareas normales (trabajaremos con la base de datos MySQL versión 8). De interesante - agregar
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Esto le permitirá no crear una tabla manualmente (o mediante la ejecución de un script sql).
  10. Implementar todos los métodos de clase. Para variar, hagamos esto:
    • Implementar el método getAlla través deNativeQuery
    • Implementar el método getAllCounta través deNamedQuery
    • En el método beforeStop, llame al sessionFactorymétodo y close. Al tener una anotación en el método @PreDestroy, Spring llamará a este método antes de detener la aplicación, y esto le permitirá liberar válidamente todos los recursos del sistema.
    • La implementación de otros métodos depende de usted. Pero no se olvide de las transacciones y confirmaciones de métodos que de alguna manera cambian el contenido de la base de datos.
  11. Iniciar la aplicacion. Si hizo todo bien, obtendrá una aplicación que funcione. Pero no hay datos allí, así que ejecute el script init.sql (de recursos) a través del Workbench para que aparezcan. Después de eso, presione F5 en el navegador y verifique que haya implementado todos los métodos correctamente.
  12. Sería interesante ver exactamente qué consultas ejecuta Hibernate, así que agreguemos el registro de consultas. Para hacer esto, agregue la dependencia p6spy:p6spy:3.9.1 a pom.xml . En la carpeta de recursos, cree un archivo spy.properties , en el que 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
    
    Y en el constructor de la clase PlayerRepositoryDB, cambie dos opciones:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Ahora, en la salida del servidor para cada solicitud, verá 2 líneas. El primero es qué declaración se prepara, el segundo es la consulta con los parámetros insertados.

Eso es todo, el proyecto está listo, ¡felicidades!

De hecho, trabajar con Hibernate desde Spring utiliza un enfoque diferente, que cubriremos en el quinto módulo.


Project analysis.