ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Dolt 与 Hibernate ORM 兼容性验证:基于 Maven 的 Hibernate 冒烟测试(ORM Smoke Test)实战指南

Dolt 与 Hibernate ORM 兼容性验证:基于 Maven 的 Hibernate 冒烟测试(ORM Smoke Test)实战指南 数据库关系型数据库后端CLI【免费下载链接】doltDolt – Git for Data项目地址https://gitcode.com/GitHub_Trending/do/dolt点击查看免费下载本文以 Dolt 仓库中的integration-tests/orm-tests/hibernate冒烟测试工程为主体系统讲解如何用 Java Hibernate MySQL JDBC 驱动对 Dolt 的 sql-server 模式进行 CRUD 兼容性验证。读完本文你将掌握该测试工程的连接配置机制、实体与 CRUD 代码结构、Maven 运行步骤以及它如何被 bats/Docker 流水线自动执行。测试工程的定位ORM 兼容性验证体系中的一环Dolt 是一个兼容 MySQL 协议的数据库其 sql-server 模式对外暴露标准的 MySQL 网络协议因此理论上任何支持 MySQL 的 ORM 框架Hibernate、Prisma、TypeORM、MikroORM、Peewee 等都能接入。为了持续验证这一兼容性仓库在integration-tests/orm-tests/下维护了一套 ORM 客户端测试正如 integration-tests/orm-tests/README.md 所述这些测试验证各种支持 MySQL 的 ORM 库与 Dolt 的兼容性理想情况下复用 ORM 自带的官方测试套件但在部分场景下先从一个更小的冒烟测试smoke test起步快速获得初步覆盖。本文聚焦其中的 Hibernate 冒烟测试工程即 integration-tests/orm-tests/hibernate/README.md 所描述的DoltHibernateSmokeTest测试形态一个由 Maven 管理的 Java 工程使用 MySQL JDBC 驱动连接 Dolt sql-server测试内容向数据库插入记录、打印变更前数据、更新与删除行、再次打印变更后数据结果语义全程无错误则以退出码 0 结束任何异常都会被记录并以非零退出码退出——这一语义让测试可被 CI 脚本直接断言。工程结构与关键文件一览DoltHibernateSmokeTest是一个标准的 Maven 单模块工程其目录结构如下integration-tests/orm-tests/hibernate/DoltHibernateSmokeTest/ ├── pom.xml └── src/ └── main/ ├── java/com/dolt/hibernate/ │ ├── Test.java # 主入口执行 CRUD 全流程 │ ├── Util.java # 构建 Hibernate SessionFactory │ └── model/Student.java # JPA 实体类 └── resources/ └── hibernate.cfg.xml # Hibernate 核心配置四个文件各司其职文件职责pom.xml声明 Hibernate、MySQL 驱动依赖与 Maven 插件编译、exechibernate.cfg.xml配置方言、驱动类、SQL 日志开关、实体映射Util.java从环境变量读取连接信息并构建 SessionFactoryTest.java冒烟测试主程序串起增删改查依赖与构建配置Hibernate 6 MySQL Connector/J 8pom.xml 是理解该工程运行环境的关键其要点如下properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding maven.compiler.release11/maven.compiler.release /properties dependencies !-- Hibernate -- dependency groupIdorg.hibernate.orm/groupId artifactIdhibernate-core/artifactId version6.6.55.Final/version /dependency !-- MySQL -- dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version8.2.0/version /dependency /dependenciesJava 版本通过maven.compiler.release锁定为 Java 11并由maven-compiler-plugin版本 3.10.1配合--release参数强制执行Hibernate 版本org.hibernate.orm:hibernate-core6.6.55.Final。Hibernate 6 使用jakarta.persistence命名空间后文的Student.java即为佐证这也意味着实体类是基于 Jakarta Persistence 规范编写的JDBC 驱动com.mysql:mysql-connector-j8.2.0即 MySQL Connector/J 8.x 系列其驱动类为com.mysql.cj.jdbc.Driver与 hibernate.cfg.xml 中的配置一致运行插件exec-maven-plugin版本 3.1.0将主类指定为com.dolt.hibernate.Test这是mvn exec:java能直接启动测试的机制来源。数据库连接配置hibernate.cfg.xml 与环境变量覆盖原文档明确指出数据库设置位于hibernate.cfg.xml并默认连接运行在默认端口上的 Dolt sql-server用户名为dolt、无密码、数据库名为dolt。实际工程中的 hibernate.cfg.xml 内容如下?xml version1.0 encodingutf-8? !DOCTYPE hibernate-configuration SYSTEM http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd hibernate-configuration session-factory property namehibernate.dialectorg.hibernate.dialect.MySQLDialect/property property namehibernate.connection.driver_classcom.mysql.cj.jdbc.Driver/property property nameshow_sqltrue/property property nameformat_sqlfalse/property mapping classcom.dolt.hibernate.model.Student/ /session-factory /hibernate-configuration逐项解读hibernate.dialect指定为org.hibernate.dialect.MySQLDialect让 Hibernate 按 MySQL 方言生成 SQL分页、类型映射、标识符生成策略等hibernate.connection.driver_classcom.mysql.cj.jdbc.Driver即 MySQL Connector/J 8.x 的驱动类show_sql/format_sql控制是否在控制台输出生成的 SQL 及是否格式化冒烟测试中开启show_sqltrue便于直接观察 Hibernate 发给 Dolt 的语句mapping class注册 JPA 实体com.dolt.hibernate.model.Student。需要特别注意的是连接 URL、用户名、密码并不写死在此 XML 中而是由 Util.java 在运行时从环境变量读取并覆盖Configuration config new Configuration(); config.setProperty(hibernate.connection.url, jdbc: System.getenv(DB_URL)); config.setProperty(hibernate.connection.username, System.getenv(DB_USER)); config.setProperty(hibernate.connection.password, System.getenv(DB_PASSWORD)); sessionFactory config.configure().buildSessionFactory();实现细节config.configure()会先加载 classpath 下的hibernate.cfg.xml提供方言、驱动、SQL 日志与实体映射等静态配置随后以编程方式setProperty覆盖 URL/用户名/密码三项连接参数连接 URL 由环境变量DB_URL拼上前缀jdbc:得到。参考 bats 测试中的构造方式见下文其形态如jdbc:mysql://127.0.0.1:PORT/REPO_NAME即最终完整的 JDBC URL 为jdbc:mysql://host:port/dbnameDB_USER对应连接用户名DB_PASSWORD对应密码静态块中若buildSessionFactory()抛错会打印 Session Factory could not be created. 并抛出ExceptionInInitializerError使进程以失败状态终止——这符合冒烟测试遇错即失败的语义。这一环境变量注入连接参数的设计使同一个工程可以被 bats 测试、Docker 流水线以不同的端口、用户和数据库复用而无需改动 XML。实体与 CRUD 主流程Test.java 全链路剖析JPA 实体StudentStudent.java 是一个标准 Jakarta Persistence 实体Entity Table(name STUDENT) public class Student implements Serializable { Id GeneratedValue(strategy GenerationType.IDENTITY) private int id; Column(name FIRST_NAME, nullable false) private String firstName; Column(name LAST_NAME, nullable false) private String lastName; Column(name SECTION, nullable false) private String section; // getter / setter / hashCode / equals / toString ... }要点Table(name STUDENT)映射到数据库表STUDENT注意 bats 测试中手工建表用的正是全大写的表名STUDENT与全大写的列名FIRST_NAME、LAST_NAME、SECTION见下文自动化运行一节GeneratedValue(strategy GenerationType.IDENTITY)使用自增主键对应 Dolt/MySQL 的AUTO_INCREMENTColumn(nullable false)声明三列非空与建表语句中的NOT NULL约束一致实现Serializable、hashCode、equals与toString是 Hibernate 实体管理一级缓存、脏检查的常规要求。主入口CRUD 冒烟流程Test.java 的main方法串起完整流程其操作与输出与文档描述完全对应插入Save调用saveStudent依次写入 4 名学生Sam、Joshua、Peter、Billsession.save()返回自增 id变更前读取Read beforegetAllStudents用 HQLFROM Student s ORDER BY s.firstName ASC查询全部记录并打印 List of all persisted students 更新UpdateupdateStudent(studentId4, ARTS)取出 id4 的学生把 section 改为 ARTS。代码中特意注释了//session.update(student)无需手动调用——因为在事务提交commit时 Hibernate 的脏检查会自动把对受管实体persistent object的修改刷写flush到数据库删除DeletedeleteStudent(studentId2)删除 Joshua 那条记录变更后读取Read after再次查询并打印 List of all remained persisted students 。每个方法都遵循标准的 Hibernate 事务模板openSession()→beginTransaction()→ 执行操作 →commit()→close()。这份代码本身就是如何用 Hibernate 对 Dolt 做增删改查的最小可运行示例插入、带排序查询、按主键加载并修改、按主键加载并删除。运行步骤四步完成冒烟测试原文档给出的运行方式如下进入工程目录后依次执行cd DoltHibernateSmokeTest mvn clean install mvn clean package mvn exec:java前置条件系统需已安装 Maven原文档提示参考 Maven 官方安装文档同时需要一个正在运行、可连接的 Dolt sql-server且按前文所述准备好DB_URL、DB_USER、DB_PASSWORD环境变量mvn clean install清理并构建、安装到本地仓库含编译与测试阶段工程本身无单元测试mvn clean package清理并打包成 jar生成target/产物mvn exec:java由 exec-maven-plugin 启动com.dolt.hibernate.Test主类输出上述 CRUD 全流程日志。关于默认端口与 Dolt sql-server原文档说该配置默认命中默认端口上的 Dolt sql-server。从 Dolt 服务端源码看Dolt sql-server 的默认端口即为 MySQL 惯例端口 3306——go/libraries/doltcore/servercfg/serverconfig.go 中定义了DefaultPort 3306并在无显式配置时使用该默认值。也就是说若不通过环境变量覆盖连接将落在本机 3306 端口实际运行时如 bats 流水线通常会为每个测试实例分配一个动态端口并通过DB_URL注入。启动 Dolt sql-server 的一般方式是在仓库目录下运行dolt sql-server亦可通过dolt sql-server --port port指定端口。自动化执行bats 测试与 Docker 流水线该冒烟测试并非只能手动运行它已被纳入仓库的自动化测试体系。bats 测试用例在 integration-tests/orm-tests/orm-tests.bats 中Hibernate 冒烟测试对应如下用例test Hibernate smoke test { # need to create tables for it before running the test mysql -D $DB_NAME -e create table STUDENT (id INT NOT NULL auto_increment PRIMARY KEY, first_name VARCHAR(30) NOT NULL, last_name VARCHAR(30) NOT NULL, section VARCHAR(30) NOT NULL); cd $BATS_TEST_DIRNAME/hibernate/DoltHibernateSmokeTest mvn clean install mvn clean package mvn exec:java }关键细节先建表再跑测试因为该工程不使用 Hibernate 的hbm2ddl自动建表而是要求数据库预先存在STUDENT表其 DDL 为id INT NOT NULL auto_increment PRIMARY KEY 三个VARCHAR(30) NOT NULL列与实体映射完全对齐连接注入bats 的setup()中会启动一个 Dolt sql-serverstart_sql_server_with_args_no_port绑定 0.0.0.0 与随机端口并导出DB_HOST、DB_PORT、DB_USERroot、DB_PASSWORD、DB_NAME再通过export_DB_URL组装出DB_URLmysql://${DB_USER}:${DB_PASSWORD}${DB_HOST}:${DB_PORT}/${DB_NAME}——这些正是Util.java所依赖的三个环境变量由此完成每轮测试一个独立数据库实例的隔离失败语义Test.main中任何未捕获异常都会导致非零退出码bats 会据此判定用例失败。Docker 一键运行仓库层面还提供了统一的 Docker 化运行方式见 integration-tests/orm-tests/README.mddocker build -t orm-tests -f dolt/integration-tests/orm-tests/Dockerfile . docker run orm-tests:latest该 Dockerfile 采用多阶段构建先在dolt_build阶段编译出dolt二进制再在 ORM 测试运行时阶段复用缓存产物从而加速首次镜像构建、并在仅改动 ORM 测试时命中缓存。镜像内通过 orm-tests-entrypoint.sh 先完成 Dolt 全局配置关闭 metrics、设置 user.name/user.email再调用bats /orm-tests/orm-tests.bats批量执行包括 Hibernate 在内的全部 ORM 用例。若需基于本地源码构建 go-mysql-server 等 Dolt 依赖可在 Dockerfile 的dolt_build阶段的build/目录中追加COPY指令并同步在本地dolt/的go.mod中维护replace指令。预期输出与结果判定成功运行时程序会依次打印List of all persisted students Persisted Student :[Student 记录列表按 first_name 升序] List of all remained persisted students Persisted Student :[删除与更新后的剩余记录列表]由于show_sqltrue标准输出中还会伴随 Hibernate 生成的 SQLINSERT、SELECT、UPDATE、DELETE。验证要点插入4 条记录全部落库且拿到自增 id变更前查询返回 4 条排序生效更新id4 的 section 变为 ARTS且无需显式session.update()事务提交即生效删除id2 的记录消失最终只剩 3 条退出码全流程无异常则进程以 0 退出可被脚本/CI 直接断言出现任何连接失败、SQL 错误或映射异常时异常被记录且进程以非零码退出。小结DoltHibernateSmokeTest是一个麻雀虽小、五脏俱全的兼容性验证样本它以 Hibernate 6 MySQL Connector/J 8 连接 Dolt 的 sql-server通过hibernate.cfg.xml提供方言与驱动配置、通过环境变量注入连接参数用Student实体与Test主类完成插入、查询、更新、删除的完整闭环。它既可以被mvn clean install / clean package / exec:java手工驱动也被 orm-tests.bats 与 Docker 流水线自动执行是研究Dolt 如何兼容 Java 生态 ORM以及如何自建 ORM 冒烟测试的一份可直接复用的参考工程。赞分享数据库关系型数据库后端CLI【免费下载链接】doltDolt – Git for Data项目地址https://gitcode.com/GitHub_Trending/do/dolt点击查看免费下载相关推荐Dolt 与 Mikro-ORM 兼容性实战基于冒烟测试项目验证 TypeScript ORM 接入 DoltDolt 与 Mikro ORM 兼容性实战基于冒烟测试项目验证 TypeScript ORM 接入 Dolt 导读 Dolt 是一个支持 MySQL 协议的数据库关系型数据库后端CLIHibernate ORM 测试用例编写指南Hibernate ORM 测试用例编写指南 前言 在开发过程中编写有效的测试用例对于确保代码质量和快速定位问题至关重要。本文将详细介绍如何为Hibernat后端数据库ORMHibernate ORM ActionQueue JMH 基准测试完全指南Graph 队列与集合操作捆绑的性能验证Hibernate ORM ActionQueue JMH 基准测试完全指南Graph 队列与集合操作捆绑的性能验证 导读 本文是 Hibernate ORM桌面应用上一篇trackerslist 完全实用指南用每日更新的公共 Tracker 列表快速解决 BT 下载速度慢下一篇大麦网抢票脚本 DamaiHelper开票瞬间自动下单5 分钟跑通创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表