SoftwareTree/JDX_ReverseEngineeringJSONExample

GitHub: SoftwareTree/JDX_ReverseEngineeringJSONExample

JDX ORM框架的逆向工程工具,可从MySQL数据库表自动生成JSON容器类和ORM映射规范。

Stars: 0 | Forks: 0

# JDX 逆向工程 JSON 示例 版权所有 © 2026 Software Tree, LLC。保留所有权利。 ## 概述 本仓库展示了 **JDX ORM** 框架的逆向工程能力,该框架可以从现有的关系数据库架构自动生成 Java 类定义和映射规范。生成的模型类同时兼容 **JDX ORM** 和 **Gilhari ORM**,适用于各种部署场景,包括独立应用程序、微服务以及 MCP(Model Context Protocol)服务器。 本示例使用 **MySQL Sakila 示例数据库**(MySQL 参考数据库)。为了演示如何将关系模式的一个子集逆向工程为 JSON 对象数据模型,模板中指定了三个表:`film`、`film_actor` 和 `film_category`。该工具会检查这些表,检测它们的列、数据类型、可空标志和关系,并生成使用 JDX ORM 和基于 JSON 的对象处理这些表所需的一切。 ## 项目结构 ``` JDX_ReverseEngineeringJSONExample/ ├── config/ │ ├── mysql_sakila_example_template.config # Template file: input to the reverse engineering tool │ ├── mysql_sakila_example_template_config.revjdx # Generated ORM mapping file (output) │ └── JDXDemo.config # Configuration for the JDXDemo GUI ├── Film.java # Generated JSON container class for the film table (output) ├── Film_Actor.java # Generated JSON container class for the film_actor table (output) ├── Film_Category.java # Generated JSON container class for the film_category table (output) ├── bin/ # Compiled .class files (generated after compilation) ├── sources.txt # List of .java files for compilation (auto-generated by compile scripts) ├── compile.bat # Windows: compile the generated Java source files ├── compile.sh # Mac/Linux: compile the generated Java source files ├── setEnvironment.bat # Windows: sets classpath environment variable ├── setEnvironment.sh # Mac/Linux: sets classpath environment variable ├── JDXReverseEngineer.bat # Windows: run the reverse engineering tool ├── JDXReverseEngineer.sh # Mac/Linux: run the reverse engineering tool ├── JDXDemo.bat # Windows: launch the JDXDemo GUI application ├── JDXDemo.sh # Mac/Linux: launch the JDXDemo GUI application └── README.md # This file ``` ## 前提条件 ### 系统要求 - **Java 开发工具包(JDK):** 8 或更高版本 - **操作系统:** Windows(适用于 `.bat` 文件)或 Linux/macOS(适用于 `.sh` 等效文件) - **数据库:** 安装了 Sakila 示例数据库的 MySQL ### 软件设置 1. **JDX ORM SDK 或 Gilhari SDK 安装:** 确保您的系统上已安装 JDX ORM SDK 或 Gilhari SDK。 2. **环境变量(`JX_HOME`):** 将 `JX_HOME` 环境变量设置为您的 JDX ORM 或 Gilhari SDK 顶级安装目录: set JX_HOME=C:\path\to\jdx_or_gilhari_home 3. **MySQL JDBC 驱动程序:** 本示例使用 MySQL Connector/J。请更新 `setEnvironment.bat` 中的路径以匹配您的本地 MySQL JDBC 驱动程序位置。当前配置引用: %JX_HOME%\external_libs\\mysql-connector-j-8.0.33.jar 请根据您的环境需要调整此路径。 4. **数据库配置:** 使用您的 MySQL 连接详情更新 `config/mysql_sakila_example_template.config`: - `JDX_DATABASE` URL 和凭据 - `JDBC_DRIVER` 路径(如果与默认值不同) ## 入门 ### 步骤 1:配置数据库连接 编辑 `config/mysql_sakila_example_template.config` 并更新连接字符串: ``` JDX_DATABASE JDX:jdbc:mysql://localhost:3306/sakila;USER=your_username;PASSWORD=your_password;JDX_DBTYPE=MYSQL;DEBUG_LEVEL=5 JDBC_DRIVER com.mysql.jdbc.Driver ``` ### 步骤 2:运行逆向工程工具 执行逆向工程工具以生成类和映射规范: **Windows:** ``` JDXReverseEngineer.bat ``` **Mac/Linux:** ``` chmod +x JDXReverseEngineer.sh # first time only ./JDXReverseEngineer.sh ``` 此命令将: - 读取模板配置文件(`mysql_sakila_example_template.config`) - 连接您的 MySQL 数据库 - 分析指定的表(`film`、`film_actor`、`film_category`) - 生成 Java 模型类 - 创建逆向工程的映射文件(`.revjdx`) ### 步骤 3:编译生成的类 使用提供的批处理脚本编译逆向工程的类: **Windows:** ``` compile.bat ``` **Mac/Linux:** ``` chmod +x compile.sh # first time only ./compile.sh ``` 这两个脚本会自动发现项目目录中的所有 `.java` 文件,将它们写入 `sources.txt`,然后编译到 `bin/`。 它们在类路径中包含必要的 JDX 和外部库。 ### 步骤 4:使用 JDXDemo GUI 探索 启动交互式演示应用程序以探索生成的类并执行 ORM 操作: **Windows:** ``` JDXDemo.bat ``` **Mac/Linux:** ``` chmod +x JDXDemo.sh # first time only ./JDXDemo.sh ``` JDXDemo GUI 允许您: - 查看生成的模型类(例如 `Film`、`Film_Actor` 和 `Film_Category`) - 测试对模型类的数据库查询和操作 - 检查实体之间的关系 - 验证映射规范 ## 配置文件 ### 模板配置(`mysql_sakila_example_template.config`) 此文件定义逆向工程参数: ``` JDX_DATABASE # Database connection string with JDBC URL JDBC_DRIVER # JDBC driver class name JDX_OBJECT_MODEL_PACKAGE # Package name for generated classes JDX_SUPERCLASS_NAME # Superclass for generated model classes JDX_GENERATE_ACCESSOR_METHODS # Whether to generate getter/setter methods JDX_GENERATE_JSON_MAPPINGS # Enable JSON mapping specification generation CLASS [ClassName] TABLE [TableName] # Specify tables to reverse-engineer ``` **关键配置选项:** - `JDX_SUPERCLASS_NAME com.softwaretree.jdx.JDX_JSONObject`:生成的(容器)类继承自 `JDX_JSONObject`,使它们具有 JSON 能力 - `JDX_GENERATE_JSON_MAPPINGS TRUE`:为容器(支持 JSON 的)类生成声明式映射规范 - `JDX_GENERATE_ACCESSOR_METHODS FALSE`:直接字段访问而非 getter/setter 方法(根据需要调整) ### 生成的逆向工程映射(`mysql_sakila_example_template.config.revjdx`) `.revjdx` 文件包含由逆向工程工具创建的完整映射规范,包括: - **虚拟属性:** 映射的数据库列及其 Java 类型 - **主键:** 从表定义派生出的主键属性 - **关系:** 从架构推断的一对一、一对多关系 - **空值处理:** 可空列的 SQLMAP 声明 - **集合类:** 关系的数组或集合定义 示例摘录: ``` CLASS .Film TABLE film VIRTUAL_ATTRIB film_id ATTRIB_TYPE short VIRTUAL_ATTRIB title ATTRIB_TYPE java.lang.String VIRTUAL_ATTRIB description ATTRIB_TYPE java.lang.String PRIMARY_KEY film_id RELATIONSHIP listFilm_Category REFERENCES .ListFilm_Category BYVALUE WITH film_id SQLMAP FOR description NULLABLE ; ``` ### JDXDemo 配置(`config/JDXDemo.config`) 指定在 JDXDemo 应用程序中使用的逆向工程类和映射文件: ``` JDX_ORMFile config/mysql_sakila_example_template.config.revjdx Classes com.softwaretree.jdxmysqlsakilaexample.reversed.json.model.Film ... ``` ## 生成的模型类(容器领域模型) 当 `JDX_GENERATE_JSON_MAPPINGS` 设置为 `TRUE` 时,逆向工程过程会生成简单的 shell(容器)类,这些类对应于基于配置的数据库表的关联实体的领域特定 JSON 对象模型类。 ### 容器领域模型架构 **JDX_JSONObject 基类:** 生成的容器类继承自 `JDX_JSONObject`,它是用作处理领域特定 JSON 对象持久化的基础超类。此超类提供了全面的 ORM 功能,因此容器类保持精简和专注。 **容器领域模型类:** 生成的容器类(例如 `Film.java`、`Film_Category.java`、`Film_Actor.java`)是极简的 shell 类,它们: - 只定义两个构造函数(通常是一个无参构造函数和一个带参构造函数) - 将所有持久化、序列化和 ORM 处理委托给 `JDX_JSONObject` 超类 - 在架构定义(在 `.revjdx` 映射文件中)和容器实现之间保持清晰的分离 **领域特定 JSON 对象:** JDX 和 Gilhari 不需要领域特定 JSON 对象模型类的显式编程定义(例如 ES6 风格的 JavaScript 类)。相反,框架使用这些容器领域模型类的实例以及声明式 ORM 规范(`.revjdx` 文件)来处理所有 JSON 对象数据。这种方法可以实现: - 架构驱动的领域模型管理 - 复杂嵌套 JSON 结构的一致处理 - 关系型和 JSON 表示之间的无缝映射 ### 生成的类 #### Film.java(电影) 表示 `film` 表的容器类,提供包含电影信息(标题、描述、上映年份、租金等)以及与电影分类关系的 JSON 对象的包装器。实际的数据结构和持久化行为在映射规范中定义。 #### Film_Category.java(电影分类) 表示 `film_category` 表的容器类,作为在 JSON 领域模型中将电影链接到分类的中间实体。 #### Film_Actor.java(电影演员) 表示 `film_actor` 表的容器类,作为在 JSON 领域模型中将电影链接到演员的中间实体。 ### 典型的容器类结构 生成的容器类通常如下所示: ``` public class FilmActor extends JDX_JSONObject { // No-argument constructor public FilmActor() { super(); } // Parameterized constructor public FilmActor(String initialJsonData) { super(initialJsonData); } } ``` 容器类是有意保持最小化的,因为所有属性映射、关系处理、JSON 序列化、持久化逻辑和 ORM 操作都由 `JDX_JSONObject` 超类根据声明式映射规范管理。 ## 生成后自定义 逆向工程后,您可以增强生成的类和映射: ### 修改生成的类 - 向生成的类添加自定义业务逻辑或方法 - 在保留 ORM 功能的同时覆盖默认行为 - 添加验证逻辑或计算属性 - 根据需要实现其他接口 ### 调整映射规范 - 删除不必要的属性或关系 - 使属性名称比原始列名称更有意义。例如,将晦涩的表列名 'cid' 映射到语义上有意义的属性名 'customer_id': ``` VIRTUAL_ATTRIB customer_id ATTRIB_TYPE int SQLMAP FOR customer_id COLUMN_NAME cid ``` - 修改属性类型或空值处理 - 调整集合类型或关系基数 - 添加自定义获取策略或延迟加载提示 **重要提示:** 修改映射文件时,请保留 `.revjdx` 扩展名并保持正确的语法。请参阅 JDX 用户手册以获取详细的映射规范文档。 ## 使用场景 ### 独立应用程序 将生成的类与 JDX ORM 一起用于传统桌面或服务器应用程序。 ### 微服务(Gilhari) 将相同的模型类与 Gilhari ORM 一起部署用于微服务架构,受益于容器化部署和面向服务的设计。 ### MCP 服务器 通过 Gilhari 将生成的类集成到 MCP(Model Context Protocol)服务器中,以实现标准化的模型服务和组合场景。 ## 故障排除 ### 连接问题 - 验证 MySQL 正在运行并在指定的主机和端口可访问 - 检查模板配置中的数据库据 - 确保 MySQL JDBC 驱动程序 JAR 在类路径中 ### 编译错误 - 验证 `JX_HOME` 设置正确 - 检查所有必需的 JAR 文件是否在类路径中 - 确保 `sources.txt` 列出了正确的源文件路径 ### 类加载问题 - 验证 `JDX_OBJECT_MODEL_PACKAGE` 中的包名与生成的类匹配 - 确保编译后的类在 `bin/` 目录中 - 检查 `config/` 目录是否在类路径中 ### 关系映射问题 - 验证数据库架构中存在外键约束 - 检查配置中的表名与数据库表名完全匹配 - 检查生成的 `.revjdx` 文件中的 RELATIONSHIP 定义是否正确 ## 平台特定注意事项 - 如果需要不同的 JDBC 驱动程序,请更新 `setEnvironment.bat` / `setEnvironment.sh`。 ## 高级主题 ### 自定义包名 修改模板配置中的 `JDX_OBJECT_MODEL_PACKAGE` 以将生成的类组织到您首选的包结构中。 ### 使用不同的超类 更改 `JDX_SUPERCLASS_NAME` 以使用自定义基类,但请确保它与 JDX ORM 要求兼容。 ### 逆向工程其他表 在模板配置中添加更多 `CLASS ... TABLE ...` 声明以逆向工程其他数据库表。 ### 增量更新 在架构更改后再次运行逆向工程工具。`.revjdx` 文件将使用更新的映射重新生成。 ## 参考资料 如需全面信息,请参阅以下资源: - **JDX 用户手册:** 参阅"逆向工程"部分以获取详细文档 - **Sakila 数据库:** MySQL 提供了关于 Sakila 示例数据库的综合文档 - **JDX 配置参考:** 官方文档中所有配置选项的详细说明 - **Gilhari ORM 文档:** 使用 Gilhari ORM 部署生成的类的指南 ## 关于 `sources.txt` 的说明 此目录中的 `sources.txt` 文件包含来自开发人员机器的绝对路径,不应直接使用。`compile.bat` 和 `compile.sh` 脚本会在每次编译运行前通过发现当前目录中的 `.java` 文件自动重新生成它。 ## 导入到 Eclipse 逆向工程和编译后,可以使用 *File → Import → Import Existing Projects into Workspace* 将此项目作为现有的 Java 项目导入 **Eclipse IDE**。 ## 支持与贡献 如有问题、意见或建议: - 查阅官方 JDX 和 Gilhari 文档 - 查看本仓库中的配置示例 - 联系开发团队或社区支持 ## 许可证与归属 本示例作为 JDX ORM 和 Gilhari 框架的一部分提供。请参阅 JDX/Gilhari 许可条款以了解使用限制和要求。 Sakila 示例数据库由 MySQL 提供,可在 New BSD 许可证下获取。 **最后更新:** 2026 年 4 月 **JDX 版本:** 05.08(如逆向工程文件中所示)
标签:Gilhari ORM, Homebrew安装, Java类生成, JDX ORM, JSON, JSON对象模型, JS文件枚举, MCP服务器, ORM映射, Sakila数据库, VIRTUAL_ATTRIB, Waymore结果处理, 代码生成, 关系型数据库, 反向工程, 域名枚举, 容器类, 数据库schema, 数据持久层, 映射规范, 模型定义, 渗透测试工具