使用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图_第1张图片
使用DBeaver自动生成ER图_第2张图片

DBeaver中生成ER图

ctrl+左键选中需要创建ER关系图的表,右键菜单栏里点击创建新的ER图
使用DBeaver自动生成ER图_第3张图片填写图表的名字,点击完成
使用DBeaver自动生成ER图_第4张图片自动生成了er图
使用DBeaver自动生成ER图_第5张图片
点击连线,可以看到外键
使用DBeaver自动生成ER图_第6张图片

你可能感兴趣的:(工具使用,java,spring,spring,boot)