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 ...
随机推荐
- jquery tmpl 详解
官方解释对该插件的说明:将匹配的第一个元素作为模板,render指定的数据,签名如下: .tmpl([data,][options]) 其中参数data的用途很明显:用于render的数据,可以是任意 ...
- PostGIS导入导出SHP文件常用命令
SHP导入POSTGIS数据库 引用 直接导入数据库 shp2pgsql -I -s 2437 -W GBK shop_point.shp public.ntable | psql -U postg ...
- SQL查出异常数据(ORA-01722: 无效数字)
-- Created on 2015/4/29 by MENGHU DECLARE -- Local variables here I INTEGER; BEGIN FOR OPEN_DATA IN ...
- Babel 学习
一,为了更明白地使用Babel, 先了解Babel 的发展过程. 现在Babel的版本是6, 相对于以前的版本, 它做了重大更新: 1, 模块化:所有的内部组件都变成了单独的包.打开Babel在Git ...
- VIM小技巧
1.复制多行 vi编辑器中的整行(多行)复制与粘贴就非常必要了. 1.复制 1)单行复制 在命令模式下,将光标移动到将要复制的行处,按"yy"进行复制: 2)多行复制 在命令模式下 ...
- 在控制台启动服务器时出现:对于服务器soa1_wls, 与计算机oim1相关联的节点管理器无法访问。
问题:在控制台启动服务器时出现:对于服务器soa1_wls, 与计算机oim1相关联的节点管理器无法访问.原因:nodemanager没有启起来解决方法: 一.对于managedServer于admi ...
- java aes_cbc_256 加密解密
在之前我们在openssl上和ios上分别测试了 AES256位cbc模式的加密和解密 今天用java提供的api来测试一下:进而确定一下在PC,iOS,安卓上三个平台下的加密解密数据: 1. 首先通 ...
- 发生tcp丢包(拥堵、超时)重传
可以根据wireshark的Seq序列号和Ack序列号来进行详细分析. 可见,网络丢包(可能是网络拥堵.也有可能是骨干网上有"防火墙"故意随机丢包,因为这个服务器的IP放在国外)对 ...
- 移动端重构实战系列2——line list
这个line list的名字是我自己起的(大概的意思是单行列表),要实现的东西为sheral的line list,对应的scss组件为_line-list.scss,下图为line-list的一个缩影 ...
- ie8下背景图片平铺问题
IE9+及其他浏览器实现背景图片平铺可能需要一个属性就可以background-size:100%/cover; 但是ie8下background-size是不兼容的,因此我们需要用到滤镜,来解决背景 ...