# chiner-java **Repository Path**: 963552657/chiner-java ## Basic Information - **Project Name**: chiner-java - **Description**: 元数建模的Java功能部分,元数建模是一款丰富数据库生态,独立于具体数据库之外的,数据库关系模型设计平台。 - **Primary Language**: Unknown - **License**: MulanPubL-2.0 - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 363 - **Created**: 2026-06-05 - **Last Updated**: 2026-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # chiner-java [元数建模(chiner)](https://gitee.com/robergroup/chiner) 工具的后端 Java 处理模块。以独立 CLI 应用(fat JAR)形式运行,由 Electron 前端通过子进程调用,负责数据库逆向解析、DDL 解析、文档生成等重型计算任务。 ## 环境要求 - JDK 1.8+ - Maven 3.x ## 构建 ```bash # 构建 fat JAR,输出至 target/pdmaner-java.jar mvn clean package -DskipTests ``` ### 本地 JDBC 驱动(首次构建前处理) `jdbc/` 目录下包含三个无法从公共 Maven 仓库获取的驱动,pom.xml 以 `system` scope 引入,会自动打入 fat JAR。 | 驱动 | 文件 | |------|------| | GBase | `jdbc/gbasedbtjdbc_3.3.0.jar` | | Kingbase | `jdbc/kingbase8-8.6.0.jar` | | OpenGauss | `jdbc/opengauss-jdbc-3.0.0.jar` | Kingbase 驱动需手动安装到本地 Maven 仓库: ```bash mvn install:install-file \ -Dfile=jdbc/kingbase8-8.6.0.jar \ -DgroupId=com.kingbase \ -DartifactId=kingbase8 \ -Dversion=8.6.0 \ -Dpackaging=jar ``` ## 使用方式 所有命令均需指定 `out=<路径>` 参数,执行结果以 JSON 格式写入该文件,不输出到 stdout。 ```bash java -jar target/pdmaner-java.jar [key=value ...] out= ``` ### 支持的命令 | 命令名 | 说明 | |--------|------| | `PingLoadDriverClass` | 测试 JDBC 驱动加载 | | `DBReverseGetAllTablesList` | 从数据库获取全部表清单 | | `DBReverseGetTableDDL` | 逆向解析,获取指定数据表 DDL | | `ParseDDLToTableImpl` | 通过 ANTLR4 解析 DDL(旧路径) | | `DDLParseImpl` | 通过 ANTLR4 解析 DDL 文件(当前路径) | | `ParsePDMFile` | 解析 PowerDesigner `.pdm` XML 文件 | | `ParseExcelFileImpl` | 解析 Excel 数据字典模板 | | `ParseStandardFieldExcelImpl` | 解析标准字段库 Excel | | `GenDocx` | 从 `.pdma.json` 生成 Word 文档 | | `GenExcelImpl` | 从 `.pdma.json` 生成 Excel 文档 | | `GenStandardFieldExcelImpl` | 生成标准字段库 Excel | | `HttpParser` | 获取并解析 HTTP 内容 | ### 示例 **逆向解析数据库表** ```bash java -jar target/pdmaner-java.jar DBReverseGetTableDDL \ driver_class_name=com.kingbase8.Driver \ url=jdbc:kingbase8://10.0.0.1:54321/mydb \ username=system \ password=system \ tables=TABLE_A,TABLE_B \ out=/path/to/output.json ``` **解析 DDL 文件** ```bash java -jar target/pdmaner-java.jar DDLParseImpl \ ddlFile=/path/to/schema.sql \ out=/path/to/output.json ``` **生成 Word 文档** ```bash java -jar target/pdmaner-java.jar GenDocx \ sinerFile=/path/to/project.pdma.json \ docxTpl=/path/to/template.docx \ imgDir=/path/to/images \ imgExt=.png \ outFile=/path/to/output.docx \ out=/path/to/result.json ``` **解析 Excel 数据字典** ```bash java -jar target/pdmaner-java.jar ParseExcelFileImpl \ excelFile=/path/to/数据表结构模板.xlsx \ out=/path/to/output.json ``` ## 支持的数据库 MySQL、Oracle、SQL Server、PostgreSQL、DB2、达梦(DM)、人大金仓(Kingbase)、GBase、OpenGauss、瀚高(HighGo)、ODPS(MaxCompute)、SQLite、H2、Hive ## Word 文档生成配置 生成 Word 文档时,空值的显示行为可通过 `src/main/resources/docx-config.properties` 配置,修改后需重新构建 JAR。 | 配置项 | 默认值 | 说明 | |--------|--------|------| | `field.len.default` | `-` | 字段长度为 null 时的显示值 | | `field.primaryKey.true.display` | `√` | 是主键时的显示值 | | `field.primaryKey.false.display` | `否` | 非主键时的显示值 | | `field.notNull.true.display` | `√` | 非空时的显示值 | | `field.notNull.false.display` | `否` | 允许为空时的显示值 | | `field.defaultValue.default` | `-` | 默认值为空时的显示值 | Word 模板中使用 `{{lenName}}` 显示字段长度(而非 `{{len}}`),详见 [docx-config说明.md](docx-config说明.md)。 ## 测试 ```bash # 运行全部测试(需数据库连接的用例会失败,属正常) mvn test # 运行单个测试类 mvn test -Dtest=DDLParseTest # 运行单个测试方法 mvn test -Dtest=ApplicationTest#parseGroupExcelFile ``` `src/test/java/cn/com/chiner/dbtype/` 下的测试均需真实数据库连接,属于手动集成测试。使用 `BaseStatic.DIR_RESOURCES` 的测试,需先修改 `src/test/java/cn/com/chiner/BaseStatic.java` 中的硬编码路径。 ## 架构说明 ### 入口与命令分发 `Application.main()` 是唯一入口。读取 `args[0]` 作为命令名,在静态 `commandRegister` HashMap 中查找对应 Class,通过反射实例化后调用 `exec(Map)`,结果序列化为 JSON 写入 `out` 文件。 新增命令:在 `command/impl/` 中实现 `Command` 接口,在 `Application.java` 的 HashMap 中注册一行即可。 ### 命令类层次结构 ``` Command(接口) └── AbstractDBCommand(抽象类,统一处理 JDBC 初始化/连接) ├── DBReverseGetAllTablesListImpl ├── DBReverseGetTableDDLImpl ├── ParseDDLToTableImpl └── PingLoadDriverClassImpl Command(非 DB 命令,直接实现接口) ├── DDLParseImpl ├── ParsePDMFileImpl ├── ParseExcelFileImpl ├── ParseStandardFieldExcelImpl ├── GenDocxImpl ├── GenExcelImpl ├── GenStandardFieldExcelImpl └── HttpParserImpl ``` ### DDL 解析流水线 ``` DDLParseImpl → SqlProcessor(预处理职责链)→ ANTLR4 解析器 → CustomListener → TableEntity 列表 ``` 预处理职责链(`antlr4/chain/`)依次执行:空字符串标准化 → 去除 schema/USE 语句 → 去除 DROP 语句 → 去除注释 → 去除属性指令。 ### 主要依赖 | 依赖 | 版本 | 用途 | |------|------|------| | ANTLR4 | 4.13.1 | DDL 解析 | | poi-tl | 1.10.0 | Word 模板渲染 | | Apache POI | — | Excel 读写 | | dom4j | 2.1.3 | PDM 文件(XML)解析 | | Druid | 1.2.16 | JDBC 连接管理 | | Hutool | 5.8.18 | 通用工具库 | | Jackson | 2.9.6 | JSON 序列化 | ## 许可证 本项目采用[木兰公共许可证 第2版(Mulan PubL v2)](LICENSE)。 ``` Copyright (c) chiner 本软件依据 Mulan PubL v2 授权。 您可以使用本软件并依据 Mulan PubL v2 条款进行复制、使用、修改、分发。 许可证副本地址:http://license.coscl.org.cn/MulanPubL-2.0 本软件依"现状"提供,不附带任何明示或暗示的担保。 ``` ### 使用注意事项 **允许的行为** - 免费复制、使用、修改本软件 - 以源码或可执行形式再分发,包括商业用途 - 贡献者自动授予您永久、全球、免费的版权许可与专利许可 **分发时的义务** - 必须随附本许可证副本,并保留原始版权、商标、专利及免责声明 - 分发修改后的衍生作品时,必须同时提供对应源代码(或提供有效期不少于三年的源码获取方式) - **不授予商标许可**,不得使用贡献者的品牌名称、商标或服务标识 **专利保护条款** - 若您或您的关联实体就本软件发起专利诉讼,贡献者授予您的专利许可**自诉讼发起之日起自动终止** **与 AGPLv3 结合使用** - 本软件可与 AGPLv3 授权的作品结合,形成的衍生作品可选择以 AGPLv3 发布,但须同时附带本许可证副本 **免责声明** - 本软件"按现状"提供,贡献者不承担任何明示或默示担保责任,亦不对因使用本软件引发的任何直接或间接损失负责 **语言效力** - 许可证中英文版本具有同等法律效力,如有歧义,**以中文版为准**