Visor 应用之一 通过ER 设计生成数据库脚本和实体对象
前言
Visor(http://www.visor.com.cn) 是一个基于HTML5 Canvas 开发的IDE 框架和设计开发平台,有关Visor的设计架构和技术应用,在以后的文章里会逐渐跟大家分享,今天主要是分享一下它的数据库设计功能和SQL生成功能。在众多的软件项目里面,权限管理基本上都是必备的,看到有网友甚至为权限管理单独做了一套框架,目的都是为了很快的应用到不同的项目里面,减少开发的成本。本人也做过很多类似的工作,不论多好的框架都只能解决80%的用户,总有20%的用户会让你花80%的精力重复做过的事情,下边就说说在Visor 中如何完成数据库设计,并且通过模板生成数据库DDL SQL 和实体对象。
1. 建模设计,在Visor 里面,现在提供三种设计器,流程设计,ER设计和JPA实体设计,只有ER设计里面完成的ER图可以生成数据库需要的DDL SQL。
2. 设计模板
在文档菜单里面可以下载建模生成的数据表对象关系数据文件,数据文件是JSON格式的,然后用你熟悉的模板语言去生成想要的SQL代码和实体代码,在项目有严格规范的情况下,可以生成更多的对象,如DAO,Service,resultful api 等。可以说一劳永逸。 在Visor里面,默认使用的是Jsrender ,而且已经提供了生成ORACLE,SQL Server 和MYSQL 对应的DDL的模板。完成建模以后,点击相应的模板,可以下载对应数据库的DDL SQL文件. 里面会包含唯一索引和非空约束, 如果你要在数据库里面建立更多的约束和索引,这还需要手动完成。但是这些对象是否要创建在数据库里都还有争议。
{ "tables": [ { "name": "Users", "text": "Users", "auditable": false, "prefix": "", "abbreviation": "", "annotation": "", "cachable": false, "namespace": "", "strategy": "seqence", "sequenceName": "", "owner": "", "fields": [ { "name": "id", "text": "id", "abbreviation": "", "datatype": "number", , "ispk": true, "isfk": false, "reftable": "", "refield": "", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , }, { "name": "name", "text": "name", "abbreviation": "", "datatype": "varchar", , "ispk": false, "isfk": false, "reftable": "", "refield": "", "nullable": true, "unique": false, "annotation": "", "defaultvalue": "", , , }, { "name": "email", "text": "email", "abbreviation": "", "datatype": "varchar", , "ispk": false, "isfk": false, "reftable": "", "refield": "", "nullable": true, "unique": false, "annotation": "", "defaultvalue": "", , , }, { "name": "password", "text": "password", "abbreviation": "", "datatype": "varchar", , "ispk": false, "isfk": false, "reftable": "", "refield": "", "nullable": true, "unique": false, "annotation": "", "defaultvalue": "", , , }, { "name": "active", "text": "active", "abbreviation": "", "datatype": "boolean", , "ispk": false, "isfk": false, "reftable": "", "refield": "", "nullable": true, "unique": false, "annotation": "", "defaultvalue": "", , , } ], "pks": [ { "name": "id", "text": "id", "abbreviation": "", "datatype": "number", , "ispk": true, "isfk": false, "reftable": "", "refield": "", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , } ] }, { "name": "Roles", "text": "Roles", "auditable": false, "prefix": "", "abbreviation": "", "annotation": "", "cachable": false, "namespace": "", "strategy": "seqence", "sequenceName": "", "owner": "", "fields": [ { "name": "id", "text": "id", "abbreviation": "", "datatype": "number", , "ispk": true, "isfk": false, "reftable": "", "refield": "", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , }, { "name": "name", "text": "name", "abbreviation": "", "datatype": "varchar", , "ispk": false, "isfk": false, "reftable": "", "refield": "", "nullable": true, "unique": false, "annotation": "", "defaultvalue": "", , , }, { "name": "description", "text": "description", "abbreviation": "", "datatype": "varchar", , "ispk": false, "isfk": false, "reftable": "", "refield": "", "nullable": true, "unique": false, "annotation": "", "defaultvalue": "", , , } ], "pks": [ { "name": "id", "text": "id", "abbreviation": "", "datatype": "number", , "ispk": true, "isfk": false, "reftable": "", "refield": "", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , } ] }, { "name": "User_Role", "text": "User_Role", "auditable": false, "prefix": "", "abbreviation": "", "annotation": "", "cachable": false, "namespace": "", "strategy": "seqence", "sequenceName": "", "owner": "", "fields": [ { "name": "User_id", "text": "id", "abbreviation": "", "datatype": "number", , "ispk": true, "isfk": true, "reftable": "Users", "refield": "id", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , }, { "name": "Role_id", "text": "id", "abbreviation": "", "datatype": "number", , "ispk": true, "isfk": true, "reftable": "Roles", "refield": "id", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , } ], "pks": [ { "name": "User_id", "text": "id", "abbreviation": "", "datatype": "number", , "ispk": true, "isfk": true, "reftable": "Users", "refield": "id", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , }, { "name": "Role_id", "text": "id", "abbreviation": "", "datatype": "number", , "ispk": true, "isfk": true, "reftable": "Roles", "refield": "id", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , } ] }, { "name": "privileges", "text": "table1", "auditable": false, "prefix": "", "abbreviation": "", "annotation": "", "cachable": false, "namespace": "", "strategy": "seqence", "sequenceName": "", "owner": "", "fields": [ { "name": "id", "text": "id", "abbreviation": "", "datatype": "varchar", , "ispk": true, "isfk": false, "reftable": "", "refield": "", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , }, { "name": "name", "text": "name", "abbreviation": "", "datatype": "varchar", , "ispk": false, "isfk": false, "reftable": "", "refield": "", "nullable": true, "unique": false, "annotation": "", "defaultvalue": "", , , }, { "name": "description", "text": "description", "abbreviation": "", "datatype": "varchar", , "ispk": false, "isfk": false, "reftable": "", "refield": "", "nullable": true, "unique": false, "annotation": "", "defaultvalue": "", , , } ], "pks": [ { "name": "id", "text": "id", "abbreviation": "", "datatype": "varchar", , "ispk": true, "isfk": false, "reftable": "", "refield": "", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , } ] }, { "name": "Role_Privilege", "text": "table1", "auditable": false, "prefix": "", "abbreviation": "", "annotation": "", "cachable": false, "namespace": "", "strategy": "seqence", "sequenceName": "", "owner": "", "fields": [ { "name": "Roles_id", "text": "id", "abbreviation": "", "datatype": "number", , "ispk": true, "isfk": true, "reftable": "Roles", "refield": "id", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , }, { "name": "privilege_id", "text": "id", "abbreviation": "", "datatype": "varchar", , "ispk": true, "isfk": true, "reftable": "privilege", "refield": "id", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , } ], "pks": [ { "name": "Roles_id", "text": "id", "abbreviation": "", "datatype": "number", , "ispk": true, "isfk": true, "reftable": "Roles", "refield": "id", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , }, { "name": "privilege_id", "text": "id", "abbreviation": "", "datatype": "varchar", , "ispk": true, "isfk": true, "reftable": "privilege", "refield": "id", "nullable": false, "unique": true, "annotation": "", "defaultvalue": "", , , } ] } ], "connections": [ { "name": "R1", "identifying": true, "nullable": false, "source_owner": "", "source_prefix": "", "source": "Users", "target_owner": "", "target_prefix": "", "target": "User_Role", "elements": [ { "key": "id", "value": "User_id" } ] }, { "name": "R2", "identifying": true, "nullable": false, "source_owner": "", "source_prefix": "", "source": "Roles", "target_owner": "", "target_prefix": "", "target": "User_Role", "elements": [ { "key": "id", "value": "Role_id" } ] }, { "name": "R3", "identifying": true, "nullable": false, "source_owner": "", "source_prefix": "", "source": "Roles", "target_owner": "", "target_prefix": "", "target": "Role_Privilege", "elements": [ { "key": "id", "value": "Roles_id" } ] }, { "name": "R4", "identifying": true, "nullable": false, "source_owner": "", "source_prefix": "", "source": "privileges", "target_owner": "", "target_prefix": "", "target": "Role_Privilege", "elements": [ { "key": "id", "value": "privilege_id" } ] } ], "option": { "datetime": "2015-05-25T04:32:51.916Z" } }
3. 完善建模设计和模板
项目需求会不停的改变,不同项目也有可能会应用不同的技术和语言。而我们要做的只是完善建模和制作新的模板。 而那些重复的工作,就让Visor 替你去完成吧。
Visor 应用之一 通过ER 设计生成数据库脚本和实体对象的更多相关文章
- 在EA中用ER图生成数据库
ER图 E-R图也称实体-联系图(Entity Relationship Diagram).提供了表示实体类型.属性和联系的方法.用来描写叙述现实世界的概念模型. 实体就是看的见摸得着或者能被人感知接 ...
- powerdesigner 生成数据库脚本
PowerDesigner导出所有SQL脚本 操作:Database=>Generate Database PowerDesigner怎么导出建表sql脚本 1 按照数据库类型,切换数据库. D ...
- ABP增加记录EFCore 生成数据库脚本日志到新的txt文件
由于EFCore并没直接生成脚本到txt文件,故而自己画了点时间把实现记录下来,方便给大家参考. 0.安装Microsoft.Extensions.Logging.Debug,我这里是2.1.1版本. ...
- IDEA快速生成数据库表的实体类
IDEA连接数据库 IDEA右边侧栏有个DataSource,可以通过这个来连接数据库,我们先成功连接数据库 点击进入后填写数据库进行连接,注意记得一定要去Test Connection 确保正常连接 ...
- idea生成springboot jpa的实体对象
在idea的database里面添加上数据库 File-->Project Structure Modules--->点击加号----->选择JPA 选择确认之后再主面板上就会出现 ...
- PowerDesigner生成SQL脚本时,对象带有双引号的问题解决
在pdm查看脚本时,发现表名和字段名带有双引号: 1.create table"cfg_user_card_account" ( 2. "user_card_acco ...
- MyBatis数据库字段和实体对象属性名不一致的解决方案
数据库和对象的属性名不一致是很常见的问题,这个时候依从表字段到对象属性名的按名称匹配映射已经搞不定这个了,下面是几种解决方案. 1. 开启驼峰转换 如果数据库中的字段名与对象只是简单的不一致的话,比如 ...
- NHibernate中,查询SqlServer数据库多个实体对象
关于datetime类型使用: Oracle: "and tb.EffectiveDate >= to_date(?,'yyyy-mm')" Sql: "an ...
- NetCore使用使用Scaffold-DbContext命令生成数据库表实体类
一.为了模拟项目,本处创建了一个NetCore的Web项目.打算在Models文件夹下生成数据库表的实体类. 二.在程序包管理控制台,输入“Scaffold-DbContext "Serve ...
随机推荐
- a error of misunderstanding
Last summer vacation, a classmate contacted with me and we finished a intelligent car project with i ...
- 一次U盘拯救的经历
U盘拷资料,突然就弹出框框,复制终止了,然后U盘里面的只是编程可读的了. 倒是没有啥重要的资料,就是只有这一个U盘了,平时传资料都靠它,不能就这么垮了啊,于是就来了一次拯救行动. 一共有三个步骤 第一 ...
- IE9 打不开界面也不报错,只有打开控制台才会显示 - console
IE9下,打开界面不报错也不展示数据,打开控制台时就能加载出数据,有可能是代码中有console
- java文章显示内容部分(将html转成纯文本)
public static String splitAndFilterString(String input, int length) { if (input == null || input.tri ...
- The integer promotion.
Usual Arithmetic Conversion: The integer promotions are performed on both operands. Then the followi ...
- PHP 知识结构
- 贪心算法(Greedy Algorithm)
参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...
- Java源文件编译成功但是运行时加载不到文件
最近系统重装了一些,Java等环境变量都需要重新配置,配置好以后编写了一个Java源文件编译了一下,通过Javac编译源文件,编译成功,但是再通过Java运行时没找到报出找不到加载文件或者加载文件不存 ...
- java.lang.Class<T> -- 反射机制
1反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...
- ssh框架的工作原理
struts2的工作原理 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextClea ...