还记得前端第三个模块的项目吗,它需要为服务器 API 实现一个 rpg 管理面板?如果有人记得,地图被用作服务器上的存储。自然,在现实生活中,不会使用这样的存储,而是使用数据库。这个项目的目标是使用 Hibernate 编写一个替代的存储层实现。

为此你需要:

  1. 从存储库中分叉
  2. 将您的项目版本下载到您的计算机。
  3. 在 pom.xml 中添加依赖:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate:hibernate-core-jakarta:5.6.11.Final
  4. 进行 Maven 构建(mvn 全新安装)。为了进行更改,我们使用 Java 1.8 版。
  5. 通过 Idea 添加启动配置。此项的实现可以在讲座https://codegym.cc/quests/lectures/cgu.module3.lecture02(第4项)中找到。唯一的区别是工件的名称不同。如果一切正常并启动应用程序,您将看到如下内容:
  6. 在 Workbench 中运行 rpg 模式创建脚本:
    CREATE SCHEMA `rpg` ;
    
  7. 可选。如果您想查看预期的行为,可以在构造函数参数的类中将com.game.service.PlayerService注释值从“db”@Qualifier更改为“memory”。在这种情况下,Spring 将使用. 测试后,不要忘记将注释值改回"db"IPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. 在实体类中安排所有必要的注解com.game.entity.Player。该表应命名为“player”,模式为“rpg”。@Enumerated(EnumType.ORDINAL)对于 enams,除了注释之外还使用@Column。让我提醒您,名称字段的长度最多应为 12 个字符,标题字段最多应为 30 个字符。绝对所有字段都不能为空。
  9. 在类中PlayerRepositoryDB添加一个private final字段SessionFactory sessionFactory,在类构造函数中初始化这个字段。像在正常任务中一样使用属性(我们将使用 MySQL 数据库版本 8)。从有趣-添加
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    这将允许您不手动创建表(或通过执行 sql 脚本)。
  10. 实现所有类方法。为了改变,让我们这样做:
    • 实现方法getAll通过NativeQuery
    • 实现方法getAllCount通过NamedQuery
    • 在方法中beforeStop,调用 ysessionFactory方法close。通过对该方法进行注释@PreDestroy,Spring 将在停止应用程序之前调用该方法,这将允许您有效地释放所有系统资源。
    • 其他方法的实现由您决定。但是不要忘记以某种方式更改数据库内容的方法的事务和提交。
  11. 启动应用程序。如果您做的一切都正确,您将获得一个可以工作的应用程序。但是那里没有数据,所以通过 Workbench运行init.sql脚本(来自资源)以便它们出现。之后,在浏览器中按 F5 并检查您是否已正确实现所有方法。
  12. 确切地了解 Hibernate 执行了哪些查询会很有趣,所以让我们添加查询日志记录。为此,将p6spy:p6spy:3.9.1依赖项添加到 pom.xml 。在资源文件夹中,创建一个文件spy.properties,其中指定:
    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
    
    在 PlayerRepositoryDB 类的构造函数中,更改两个选项:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    现在,在每个请求的服务器输出中,您将看到 2 行。第一个是准备什么语句,第二个是带有插入参数的查询。

就这样,项目准备好了,恭喜!

事实上,从 Spring 使用 Hibernate 使用不同的方法,我们将在第五个模块中介绍。


项目分析。