最近有同事看到字节跳动产品设计文档里有数据库表er图。就想问问又没有现成的工具也给直接生成一个er图,经查找验证发现并没有。因为现在表关系都是用的逻辑外键而非物理外键约束的,所以像navicat等工具就算生成了也没有描述关系的连接线。那么为了满足需求,这边就略微出手写了个代码实现er关系的工具。(注意:这里只有后端部分,如需更直观使用请配合前端进行页面渲染)

一:首先获取数据库的所有表名和表的字段sql代码如下:

    <!--  获取所有表名  -->
<select id="showTables" resultType="java.lang.String">
SHOW TABLES;
</select> <!--根据表名获取该表下的所有字段-->
<select id="showColumns" resultType="com.alibaba.fastjson.JSONObject">
SHOW COLUMNS FROM ${tableName};
</select>

二:mapper接口层代码如下:

    /**
* 获取所有表名
* @return 该数据库下的所有表名
*/
List<String> showTables(); /**
* 根据表名获取该表下的所有字段
* @param tableName 要获取字段的表名
* @return 该表下的所有字段
*/
List<JSONObject> showColumns(@Param("tableName") String tableName);

三:业务代码如下:(为了方便看这里省略业务层直接在controller实现)

   @Autowired
private ERMapper erMapper;
@GetMapping("/getEr")
@ApiOperation(value = "获取er关系")
public Map getEr(){
List<String> list = erMapper.showTables();
Map<String, List<String>> map = new HashMap<>();
Map<String, String> tableMap = new HashMap<>();
List<String> ts = new ArrayList<>();
for (String s : list) {
String table = s.replace("erp_", "");
ts.add(table);
tableMap.put(table, s);
}
for (String s : list) {
List<JSONObject> jsonList = erMapper.showColumns(s);
String erp_ = s.replace("erp_", "");
ArrayList<String> tList = new ArrayList<>();
for (JSONObject jsonObject : jsonList) {
String field = jsonObject.getString("Field");
if (field.endsWith("_id")){
String replaceId = field.replace("_id", "");
if (ts.contains(replaceId)){
tList.add(tableMap.get(replaceId));
}
}
}
map.put(s, tList);
log.info("s:{}", erp_);
} return map;
}

java代码实现自动生成数据库表er图的更多相关文章

  1. Mybatis总结之如何自动生成数据库表结构

    一般情况下,用Mybatis的时候是先设计表结构再进行实体类以及映射文件编写的,特别是用代码生成器的时候. 但有时候不想用代码生成器,也不想定义表结构,那怎么办? 这个时候就会想到Hibernate, ...

  2. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  3. java工具类–自动将数据库表生成javabean

    最近和数据库的表打交道挺多的,因为暂时做的是接口活. 在这过程中发现要把表转换成对应的javabean类型,字段少的表还行,如果不小心碰到几十个字段的他妈的写起来就有点麻烦了,万一碰到几百个的呢,那不 ...

  4. EntityFramework Core 2.x (ef core) 在迁移中自动生成数据库表和列说明

    在项目开发中有没有用过拼音首字母做列名或者接手这样的项目? 看见xmspsqb(项目审批申请表)这种表名时是否有一种无法抑制的想肛了取名的老兄的冲动? 更坑爹的是这种数据库没有文档(或者文档老旧不堪早 ...

  5. 利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  6. oracle数据库自动生成数据库表结构文档(亲测有效)

    import java.awt.Color; import java.io.FileOutputStream; import java.sql.Connection; import java.sql. ...

  7. EF CodeFirst关于Mysql如何自动生成数据库表

    相对于sqlserver数据库,mysql的配置过程相对麻烦一些,我们从0讲起. 1.新建一个控制台应用程序 右键点击引用--管理NuGet程序包,搜索Mysql.Data.Entity并安装,安装完 ...

  8. .net自动生成数据库表的类

    // 获取到所有的用户表.DataTable userTableName = GetTable( "select name as tablename from sysobjects wher ...

  9. Hibernate 自动生成数据库表

    http://blog.csdn.net/u010096526/article/details/50533428

  10. 小技巧 EntityFrameworkCore 实现 CodeFirst 通过模型生成数据库表时自动携带模型及字段注释信息

    今天分享自己在项目中用到的一个小技巧,就是使用 EntityFrameworkCore 时我们在通过代码去 Update-Database 生成数据库时如何自动将代码模型上的注释和字段上的注释携带到数 ...

随机推荐

  1. secure boot(三)secure boot的签名和验签方案

    简介 FIT 格式支持存储镜像的hash值,并且在加载镜像时会校验hash值.这可以保护镜像免受破坏,但是,它并不能保护镜像不被替换. 而如果对hash值使用私钥签名,在加载镜像时使用公钥验签则可以保 ...

  2. 《3D编程模式》写书-第6次记录

    大家好,这段时间我完成了对初稿的第二轮修改,已经把稿子提交给编辑了 这里是所有的的写书记录: <3D编程模式>写书记录 本轮修改主要进行了下面的修改: 修改UML描述 增加依赖关系 角色之 ...

  3. 使用cdn剥离js文件,让他们独立加载

  4. 无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网

  5. 手把手实践教你删除项目当中无用的npm包

    在公司中,我们大部分都是多人共同开发和长时间维护一个项目,但是有时候我们会发现有很多已经废弃的npm 包存在 package.json 中,我们想要删除,但是又不能盲目的删除?那么 depcheck ...

  6. NodeJS开发服务端实现文件上传下载和数据增删改查

    本文主要讲解已NodeJS作为服务器完成文件的上传下载和数据增删改查,前端框架为Vue3,UI框架为element-plus,Node版本为V16.14.2. 项目场景模拟是开发一个项目管理的系统,支 ...

  7. 昆虫科学院 AtCoder Race Ranking 2023 Autumn

    概况 为提高选手们的训练 / 比赛热情,我们(昆虫科学院)通过商讨,在 \(2023-5-25\) 仿照 AtCoder Race Ranking (WTF) 机制,设立了"昆虫科学院 At ...

  8. Idea 进行远程服务器debug操作

    本文为博主原创,转载请注明出处: 很多时候为了定位服务器的问题,不方便定位时,采用idea 远程debug 服务器环境的服务进行问题定位,主要操作步骤如下: 1. 修改服务器服务的JVM 配置,开启远 ...

  9. VSCode + GCC编译器(MinGW)开发环境中文字符乱码问题踩坑与解决办法

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  10. UofTCTF 2024 比赛记录

    这次的题目挺有意思,难度适中,*开头的代表未做出,简单记录一下解题笔记. Introduction General Information 题目 The flag format for all cha ...