Mysql 脚本转换为drawio ER 脚本

news2024/11/14 12:05:58

Navicat 导出数据库脚本

在这里插入图片描述

通过代码转换脚本

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * SQL 脚本转换为 drawio ER 脚本
 */
public class SQLToMermaid {

    public static void main(String[] args) {
        String inputFilePath = "/Users/admin/Desktop/xxx.sql"; // 输入文件路径
        String outputFilePath = "/Users/admin/Desktop/xxx.txt"; // 输出文件路径

        System.out.println("Reading from: " + inputFilePath);
        System.out.println("Writing to: " + outputFilePath);

        try (BufferedReader br = new BufferedReader(new FileReader(inputFilePath));
             FileWriter fw = new FileWriter(outputFilePath)) {

            StringBuilder sqlContent = new StringBuilder();
            String line;

            // 读取整个文件内容
            while ((line = br.readLine()) != null) {
                sqlContent.append(line).append("\n");
            }

            String sql = sqlContent.toString();

            // 正则表达式
            Pattern tablePattern = Pattern.compile("CREATE TABLE `(\\w+)` \\((.*?)\\) ENGINE.*?COMMENT='(.*?)';",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

            // 匹配
            Matcher tableMatcher = tablePattern.matcher(sql);


            while (tableMatcher.find()) {
                String tableName = tableMatcher.group(1);
                String tableComment = tableMatcher.group(3);
                fw.write(tableName + "(" + tableComment + ")\n");

                String columnDefinitions = tableMatcher.group(2);
                String[] columns = columnDefinitions.split(",(?=\\s*`)");

                for (String column : columns) {
                    Pattern columnPattern = Pattern.compile(
                            "`(\\w+)`\\s+\\w+.*?COMMENT\\s+'(.*?)'",
                            Pattern.DOTALL
                    );
                    Matcher columnMatcher = columnPattern.matcher(column);

                    if (columnMatcher.find()) {
                        String columnName = columnMatcher.group(1);
                        String columnComment = columnMatcher.group(2);
                        fw.write("    " + columnName + ": " + columnComment + "\n");
                    }
                }

                fw.write("\n"); // 表之间空一行
            }

            System.out.println("Output written to " + outputFilePath);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

得到的脚本:

custom(自定义表)
    id: 主键id
    name: 名称
    module: 引用类型1:报事类型模板2:报事详情
    ref_id: 关联表id
    type: 
    is_required: 是否必填
    subsidiary_rule_str: 附属规则json串
    is_del: 是否删除
    sort_code: 排序编码
    create_time: 创建时间
    creator_uid: 创建人id
    modified_time: 修改时间
    modified_uid: 修改人id

identity(模板通知规则关联执行人)
    id: 主键
    ref_id: type区分关联键0工单类型id 1 SLA配置id
    type: 关联类型 0工单类型执行1工单类型分派2SLA配置
    label_id: 类型标签type = 0: 0抄送;
    step: 步骤0非步骤 1,2,3,4,5升级步骤
    identity_type: 身份类型 0角色1人员
    identity_id: 身份id 

脚本导入drawio

在这里插入图片描述
得到了表:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArkTS和TypeScript区别

一、对象字面量须标注类型 const point {x: 100,y: 100 }console.log(point) 运行之后会输出 { x: 100, y: 100 } 以上TS代码片段展示了没有类型的场景。如果编译器不知道变量point的确切类型,由于对象布局不能确定,编译器无法深度地优化这段代码&am…

gradle全局配置

搭建spring boot3.x开发环境的先决条件,咱们已经完成了JDK17安装与配置,然后就是项目构建工具,我们使用现在很流行的gradle,进行下全局配置,以方便和加速后续spring boot项目构建。 配置一个GRADLE_USER_HOME环境变量&…

【密码学】密码协议的安全性

密码协议是用来在不安全的网络环境中建立安全通信通道的方法。虽然密码协议中仅有很少的几组消息传输,但其中每条消息的组成都是经过巧妙的设计,而这些协议之间有着复杂的相互作用和制约。 若如果协议涉及上出现漏洞,那么协议将存在验证的安全…

【JAVA多线程】AQS,JAVA并发包的核心

目录 1.概述 1.1.什么是AQS 1.2.AQS和BlockQueue的区别 1.3.AQS的结构 2.源码分析 2.1.CLH队列 2.2.模板方法的实现 2.2.1.独占模式 1.获取资源 2.释放资源 2.2.2.共享模式 1.概述 1.1.什么是AQS AQS非常非常重要,可以说是JAVA并发包(java.…

MES是什么?MES系统主要包括哪些功能?

一、MES系统是什么? MES是(Manufacturing Execution System)的缩写,中文名称叫做制造企业生产过程执行管理系统,是一套整体的面向制造企业车间执行层生产信息化管理的解决方案。MES系统经历了若干个发展阶段&#xff…

PHP简单零售收银台系统源码小程序

🛒轻松上手!简单零售收银台系统,让经营更省心💸 🚀 开篇:告别繁琐,拥抱高效收银新时代 嘿,小店主们!👋 还在为每天繁琐的收银工作头疼吗?是时候…

探索腾讯云AI代码助手:智能编程的新时代

智能编程的新时代 前言开发环境介绍腾讯云 AI 代码助手使用实例生成文档解释代码生成测试修复代码人工智能技术对话 智能编程获得的帮助与提升对腾讯云AI代码助手的建议结语 前言 hello,大家好我是恒川,今天我来给大家安利一款非常好用的AI 代码助手&…

JVM(面试用)

目录 一、JVM运行时数据区 二、JVM类加载 类加载过程 1、加载(loading) 2、验证(Verification) 3、准备(Perparation) 4、解析(Resolution) 5、初始化(Initializ…

Linux 驱动开发究竟在开发什么?

文章目录 1 Linux 驱动开发架构图2 更具体的例子:LED 驱动程序2.1 硬件层(Hardware Layer)2.2 固件层(Firmware Layer)2.3 驱动程序层(Driver Layer)2.4 操作系统内核(Kernel Layer&…

【全国大学生电子设计竞赛】2021年A题

🥰🥰全国大学生电子设计大赛学习资料专栏已开启,限时免费,速速收藏~

2024年睿抗机器人开发者大赛(RAICOM)国赛题解

目录 RC-u1 大家一起查作弊 分数 15 RC-u2 谁进线下了?II 分数 20 RC-u3 势均力敌 分数 25 RC-u4 City 不 City 分数 30 RC-u5 贪心消消乐 分数 30 RC-u1 大家一起查作弊 分数 15 简单模拟题,对于多行读入使用while(getline(cin…

切割 Nginx 日志

目录 方式一:自定义脚本 方式二:logrotate crontab 讲解 centos 容器安装 crontab centos 容器 systemctl 命令执行异常 切割理由:假设一个网站访问量特别大,每天 access_log 文件有 2 个 G,如果想从文件中查找…

基于QCustomPlot实现色条(ColorBar)

一、简介 通过QCustomPlot实现ColorBar&#xff0c;直观显示各个位置的异常情况。实现效果如下&#xff0c; 二、源码 CPColorBar.hpp // CPColorBar.hpp #pragma once #include "qcustomplot.h"#include <QHash>class QCP_LIB_DECL CPColorBarData { pub…

使用 MRI 构建的大脑连接网络预测帕金森病萎缩进展模式| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Brain Connectivity Networks Constructed Using MRI for Predicting Patterns of Atrophy Progression in Parkinson Disease 使用 MRI 构建的大脑连接网络预测帕金森病萎缩进展模式 Background 背景 Whether connectome mapping of structural and across …

全志T527-TP9930-Camera

一、简介 1、TP9930 TP9930 驱动模块主要实现将 4 路的 Camera 的数据转换为 BT656/BT1120 数据&#xff0c;从而实现在 T527 端来对数据进行处理和送显。 2、BT656/BT1120简介 BT656主要是针对PAL/NTSC等标清视频。随着高清视频的发展需要&#xff0c;又推出了BT1120标准&…

AI + Coding:可以有多少种玩法?

在当今快速发展的科技时代&#xff0c;人工智能&#xff08;AI&#xff09;和编程已经成为不可分割的两大领域。AI赋予了计算机更多的智能&#xff0c;使其能够处理复杂的数据、执行高级任务&#xff0c;而编程是实现这一切的基础。当AI与编程结合在一起时&#xff0c;会带来无…

图片懒加载与预加载(原生)

1、懒加载。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head>…

【开端】JAVA Mono<Void>向前端返回没有登陆或登录超时 暂无权限访问信息组装

一、绪论 JAVA接口返回信息ServerHttpResponse response 等登录接口token过期时需要给前端返回相关状态码和状态信息 二、Mono<Void>向前端返回没有登陆或登录超时 暂无权限访问信息组装 返回Mono对象 public abstract class Mono<T> implements CorePublisher…

2024最新Mysql事务原理与优化最佳实践

概述 我们的数据库一般都会并发执行多个事务&#xff0c;多个事务可能会并发的对相同的一批数据进行增删改查操作&#xff0c;可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题&#xff0c;为了解决多事务并发问题&…

在java中通过subString方法来截取字符串中的文本

1、subString&#xff08;&#xff09;常规用法可以通过下标来进行获取&#xff0c;在java中是从0开始&#xff0c;前包括后不包括。 String str “Hello Java World!”; 用法一: substring(int beginIndex) 返回从起始位置&#xff08;beginIndex&#xff09;至字符串末尾…