java代码实现自动生成数据库表er图
最近有同事看到字节跳动产品设计文档里有数据库表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图的更多相关文章
- Mybatis总结之如何自动生成数据库表结构
一般情况下,用Mybatis的时候是先设计表结构再进行实体类以及映射文件编写的,特别是用代码生成器的时候. 但有时候不想用代码生成器,也不想定义表结构,那怎么办? 这个时候就会想到Hibernate, ...
- 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- java工具类–自动将数据库表生成javabean
最近和数据库的表打交道挺多的,因为暂时做的是接口活. 在这过程中发现要把表转换成对应的javabean类型,字段少的表还行,如果不小心碰到几十个字段的他妈的写起来就有点麻烦了,万一碰到几百个的呢,那不 ...
- EntityFramework Core 2.x (ef core) 在迁移中自动生成数据库表和列说明
在项目开发中有没有用过拼音首字母做列名或者接手这样的项目? 看见xmspsqb(项目审批申请表)这种表名时是否有一种无法抑制的想肛了取名的老兄的冲动? 更坑爹的是这种数据库没有文档(或者文档老旧不堪早 ...
- 利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- oracle数据库自动生成数据库表结构文档(亲测有效)
import java.awt.Color; import java.io.FileOutputStream; import java.sql.Connection; import java.sql. ...
- EF CodeFirst关于Mysql如何自动生成数据库表
相对于sqlserver数据库,mysql的配置过程相对麻烦一些,我们从0讲起. 1.新建一个控制台应用程序 右键点击引用--管理NuGet程序包,搜索Mysql.Data.Entity并安装,安装完 ...
- .net自动生成数据库表的类
// 获取到所有的用户表.DataTable userTableName = GetTable( "select name as tablename from sysobjects wher ...
- Hibernate 自动生成数据库表
http://blog.csdn.net/u010096526/article/details/50533428
- 小技巧 EntityFrameworkCore 实现 CodeFirst 通过模型生成数据库表时自动携带模型及字段注释信息
今天分享自己在项目中用到的一个小技巧,就是使用 EntityFrameworkCore 时我们在通过代码去 Update-Database 生成数据库时如何自动将代码模型上的注释和字段上的注释携带到数 ...
随机推荐
- 【新手友好】用Pyspark和GraphX解析复杂网络数据
从零开始 在本文中,我们将详细介绍如何在Python / pyspark环境中使用graphx进行图计算.GraphX是Spark提供的图计算API,它提供了一套强大的工具,用于处理和分析大规模的图数 ...
- MySQL 及调优
存储引擎的种类 MySQL 中存在多种存储引擎,比如: InnoDB 支持事务: 支持外键: 同时支持行锁和表锁. 适用场景:经常更新的表,存在并发读写或者有事务处理的业务场景. MyISAM 支持表 ...
- 使用markdown语法做笔记,相比txt多了很多样式
- UEditor 添加在线管理图片删除功能 (转载)
第一,需要添加一个 php 文件来实现删除功能,文件添加到: ueditor\php\action_delete.php 代码内容: <?php /*---------------------- ...
- Laravel - Could not open input file: artisan 的解决方法
cd 到 laravel的目录中执行 就可以了
- MongoDB 部署副本集 + 代码中开启事务
首先,指定副本名称: vim /etc/mongod.conf replication: replSetName: shard1 在replication里面加入副本名称,多个相同副本,应该使用同样的 ...
- [转帖]OceanBase 4.2.1 LTS 发版 | 一体化数据库首个长期支持版本
2013.11.20 https://open.oceanbase.com/blog/7746655008?_gl=1*1qv10rf*_ga*Nzk3MjIxOTk0LjE3MDI2MTAxMzk. ...
- [转帖]TiDB-merge region相关问题
一.开启region merge # 控制 Region Merge 的 size 上限,当 Region Size 大于指定值时 PD 不会将其与相邻的 Region 合并 pd-ctl confi ...
- [转帖]《Linux性能优化实战》笔记(24)—— 动态追踪 DTrace
使用 perf 对系统内核线程进行分析时,内核线程依然还在正常运行中,所以这种方法也被称为动态追踪技术.动态追踪技术通过探针机制来采集内核或者应用程序的运行信息,从而可以不用修改内核和应用程序的代码就 ...
- [转帖]金仓数据库KingbaseES V8R6 中unlogged表
KingbaseESV8R6有一种表称为unlogged,在该表新建的索引也属于unlogged.和普通表的区别是,对该表进行DML操作时候不将该表的变更记录变更写入到wal文件中.在数据库异常关机或 ...