IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 使用DBeaver自动生成ER图 -> 正文阅读

[Java知识库]使用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图
在这里插入图片描述
点击连线,可以看到外键
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:50:24  更:2022-08-19 18:54:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:31:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码