使用DBeaver自动生成ER图

本文主要介绍了DBeaver如何操作,可以自动生成ER图,DBeaver的版本是6.2.0。表使用JPA自动生成。具体JPA的使用见JPA规范总结和整理

创建表格

创建实体类

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table(name = "company")
public class Company {
    @Id
    @Column(name = "id", columnDefinition = "varchar(64)")
    @GenericGenerator(name="idGenerator", strategy="uuid")
    @GeneratedValue(generator = "idGenerator")
    private String id;

    private String name;

    private String address;
}


@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table(name = "employee", uniqueConstraints = {@UniqueConstraint(columnNames={"department_id","company_id"})})
public class Employee {
    @Id
    @Column(name = "id", columnDefinition = "varchar(64)")
    @GenericGenerator(name="idGenerator", strategy="uuid")
    @GeneratedValue(generator = "idGenerator")
    private String id;

    @Column(name = "name", columnDefinition = "varchar(128) default null")
    private String name;

    @Column(name = "department_id", columnDefinition = "varchar(32) default null")
    private String departmentId;

    @JoinColumn(name="company_id")
    @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false)
    private Company company;
}

改配置文件自动生成表格

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database=mysql
spring.jpa.open-in-view=false

乱入一下:简单记录下别人整理的spring.jpa.open-in-view配置作用

open-in-view 是 Spring Boot 自动加载 Spring Data JPA 提供的一个配置,全称为
spring.jpa.open-in-view=true,它只有 true 和 false 两个值,默认是 true。那它到底有什么威力呢?

通过上面的源码我们可以看到,spring.jpa.open-in-view 的主要作用就是帮我们加载
OpenEntityManagerInViewInterceptor 这个类
我们可以发现,OpenEntityManagerInViewInterceptor 实现了 WebRequestInterceptor
的接口中的两个方法:

public void preHandle(WebRequest request) 方法,里面实现了在每次的 Web MVC 请求之前,通过
createEntityManager 方法创建 EntityManager 和 EntityManagerHolder 的逻辑;

public void afterCompletion(WebRequest request, @Nullable Exception
ex) 方法,里面实现了在每次 Web MVC 的请求结束之后,关闭 EntityManager 的逻辑。

我们如果继续看 createEntityManager 方法的实现,还会找到如下关键代码。 我们通过 SessionFactoryImpl
中的 createEntityManager() 方法,创建了一个 EntityManager 的实现 Session;通过拦截器创建了
EntityManager 事务处理逻辑,默认是 Join 类型(即有事务存在会加入);而 builder.openSession()
逻辑就是 new SessionImpl(sessionFactory, this)。

所以这个时候可以知道,通过 open-in-view 配置的拦截器,会帮我们的每个请求都创建一个 SessionImpl 实例;而
SessionImpl 里面存储了整个 PersistenceContext 和各种事务连接状态,可以判断出来 Session
的实例对象比较大。

并且,我们打开 spring.jap.open-in-view=true
会发现,如果一个请求处理的逻辑比较耗时,牵涉到的对象比较多,这个时候就比较考验我们对 jvm
的内存配置策略了,如果配置不好就会经常出现内存溢出的现象。因此当处理比较耗时的请求和批量处理请求的时候,需要考虑到这一点。

运行程序,自动创建表格

创建后的表格打印如下,可以看到是有外键生成的

Hibernate: create table company (id varchar(64) not null, address varchar(255), name varchar(255), primary key (id)) engine=InnoDB
Hibernate: create table employee (id varchar(64) not null, department_id varchar(32) default null, name varchar(128) default null, company_id varchar(64) not null, primary key (id)) engine=InnoDB

Hibernate: alter table employee drop index UKir8n5ax8yt8608nlq39f6aw0t
Hibernate: alter table employee add constraint UKir8n5ax8yt8608nlq39f6aw0t unique (department_id, company_id)
Hibernate: alter table employee add constraint FK5v50ed2bjh60n1gc7ifuxmgf4 foreign key (company_id) references company (id)

在这里插入图片描述
在这里插入图片描述

DBeaver中生成ER图

ctrl+左键选中需要创建ER关系图的表,右键菜单栏里点击创建新的ER图
在这里插入图片描述填写图表的名字,点击完成
在这里插入图片描述自动生成了er图
在这里插入图片描述
点击连线,可以看到外键
在这里插入图片描述

<think>嗯,用户想找能自动生成ER的工具。首先,我得回忆一下之前处理类似问题时接触过的工具。记得之前有看过几个IDEA插件和在线工具,比如PlantUML和Freedgo Design,还有一些独立的软件。 首先,用户提到的引用里提到IDEA插件,比如PlantUML和ERD Plugin,这可能对开发者比较方便,尤其是已经在用IDEA的人。然后是像Navicat Data Modeler这样的数据库管理工具,它支持逆向工程生成ER,这可能适合需要直接连接数据库的用户。 在线工具方面,Freedgo Design和dbdiagram.io都是不错的选择,特别是Freedgo Design支持导入DDL语句生成ER,这对已有数据库结构的用户来说很方便。而dbdiagram.io用简单的DSL语法,适合喜欢代码方式设计的用户。 还有开源的DBeaver,它不仅是数据库管理工具,还能生成ER,适合需要免费解决方案的用户。PowerDesigner虽然强大,但可能需要付费,适合企业级应用。 用户可能需要根据使用场景来选择。比如,如果用户习惯用IDEA,插件会更方便;如果需要在线协作,可能选dbdiagram.io;如果已有数据库,Navicat或DBeaver更合适。另外,用户可能关心工具的易用性、是否需要付费、是否支持导入导出等。需要把这些因素都考虑进去,给出全面的推荐,并附上使用步骤,帮助他们快速上手。</think>### 自动生成ER的工具推荐 #### 1. **IDEA插件工具** - **PlantUML Integration** 支持通过代码生成ER,直接在IDEA中编写PlantUML语法即可自动生成可视化表。 示例语法: ```plantuml entity User { + id [PK] username password } ``` 生成表支持导出为PNG/SVG格式[^1][^3]。 - **ERD Plugin** 专为数据库设计开发的插件,支持通过数据库连接直接逆向生成ER,适用于MySQL/PostgreSQL等常见数据库。 #### 2. **独立工具** - **Freedgo Design** 在线ER设计工具,支持通过导入SQL DDL语句自动生成ER。例如: ```sql CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(255) ); ``` 导入后即可生成对应的实体关系,支持导出为片或PDF。 - **Navicat Data Modeler** 专业数据库设计工具,支持从现有数据库逆向生成ER,提供字段类型映射、关系线自动布局等功能[^2]。 - **dbdiagram.io** 基于DSL语法的在线工具,通过简单代码定义表结构,自动生成ER。例如: ```markdown Table users { id integer [pk] name varchar } ``` 支持导出为PNG或SQL脚本。 #### 3. **数据库管理工具集成** - **DBeaver** 开源数据库工具,支持通过右键菜单“查看实体关系”直接生成ER,适用于MySQL、Oracle等数据库[^3]。 - **PowerDesigner** 企业级数据建模工具,支持从数据库逆向工程生成ER,并提供完整的字段注释和关系分析。 --- ### 使用步骤示例(以Freedgo Design为例) 1. 访问 [Freedgo Design](https://www.freedgo.com/erd-index.html) 2. 点击`Import DDL`,粘贴SQL建表语句 3. 系统自动解析并生成ER,可拖拽调整布局 4. 导出为片或分享链接 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值