侧边栏壁纸
博主头像
雲先生 博主等级

心死翼未伤,亦可去远方!

  • 累计撰写 46 篇文章
  • 累计创建 40 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
SQL

MySql数据字典导出并专转换为MD文档

Administrator
2022-11-28 / 0 评论 / 0 点赞 / 1084 阅读 / 0 字

查询字典信息

SELECT
 a.TABLE_SCHEMA AS '数据库',
 a.TABLE_NAME AS '表名',
 IFNULL(IF(length(trim(b.TABLE_COMMENT))>0,b.TABLE_COMMENT,null),'xxx') AS '表注释',
 a.COLUMN_NAME AS '字段名',
 a.COLUMN_TYPE AS '数据类型',
 a.IS_NULLABLE AS '允许为空',
 a.COLUMN_DEFAULT AS '默认值',
 a.COLUMN_KEY AS 'Key',
 a.COLUMN_COMMENT AS '字段说明'
 FROM
 information_schema.COLUMNS a
 LEFT JOIN information_schema.TABLES b ON a.TABLE_NAME = b.TABLE_NAME
 WHERE
 a.TABLE_SCHEMA = "my-common"
 and b.TABLE_SCHEMA = "my-common";

导出结果到txt文件(例如导出到/Users/zhy/Downloads/data.txt),
包含列的标题-不勾选,
字段分隔符-其他符号 |||

用Java代码读取txt转换成MD文档

public class ProcessMsqlDD {

  public static void main(String[] args) {
    try (Stream<String> lines =
                 Files.lines(Paths.get("/Users/zhy/Downloads/data.txt"), Charset.defaultCharset())) {
      TreeMap<String, TreeMap<String, List<DD>>> collect = lines
        .map(line -> {
          line = line.replace("\"", "");
          String[] split = line.split("\\|\\|\\|");
          DD dd = new DD();
          dd.setTable_schema(split[0]);
          dd.setTable_name(split[1]);
          dd.setTable_comment(split[2]);
          dd.setColumn_name(split[3]);
          dd.setColumn_type(split[4]);
          dd.setIs_nullable(split[5]);
          if(split.length > 6){
			  dd.setColumn_default(split[6]);
		  }
          if (split.length > 7) {
            dd.setColumn_key(split[7]);
          }
          if (split.length > 8) {
            dd.setColumn_comment(split[8]);
          }
          return dd;
        })
        .collect(Collectors.groupingBy
          (DD::getTable_schema, TreeMap::new,
            Collectors.groupingBy
              (DD::getTable_name, TreeMap::new,
                Collectors.toList())));
      collect.entrySet().stream()
        .forEach(key -> {
          //String name = key.getKey();
          //System.out.println("### 库:" + name.substring(name.indexOf("_") + 1));
          key.getValue().entrySet().stream()
            .forEach(key1 -> {
              System.out.println("### " + key1.getKey()+"("+ key1.getValue().get(0).getTable_comment()+")");
              System.out.println("| " + String.format("%-23s","字段名") + " | " + String.format("%-12s","数据类型") + " | " + String.format("%-4s","允许为空") + " | " + String.format("%-18s","默认值") + " | " + String.format("%-5s","Key") + " | "+String.format("%-35s","字段说明")+ " |");
              System.out.println("| ------------------------- | --------------- | ------- | -------------------- | ----- | ---------------------------------- |");
              key1.getValue().stream().forEach(x -> System.out.println(x.toString()));
            });
        });
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

@Data
class DD {
  private String table_schema;
  private String table_name;
  private String table_comment;
  private String column_name;
  private String column_type;
  private String is_nullable;
  private String column_default;
  private String column_key;
  private String column_comment;

  @Override
  public String toString() {
    return "| " + String.format("%-25s",column_name) + " | " + String.format("%-15s",column_type) + " | " + String.format("%-7s",is_nullable) + " | " + String.format("%-20s",column_default) + " | " + String.format("%-5s",column_key) + " | " + String.format("%-35s",column_comment) + " |";
  }
}
0

评论区