# create-table.ftl
在create-table.ftl文件中构造一个SQL模板,使数据库支持create table
语句。
<#--创建表-->
CREATE TABLE ${tableName} (
<#list columns as col>
<#--mysql的varchar,char类型字段值默认不区分大小写,不符合常规需求,需要设置BINARY使字段值区分大小写。-->
<#assign isVarchar = col.dbType=="VARCHAR"||col.dbType=="CHAR" || col.dbType=='LONGTEXT'>
${col.name+" "}<#rt>
<#if col.autoInc!false>
BIGINT NOT NULL AUTO_INCREMENT<#t>
<#else>
${col.typeDeclaration}<#if isVarchar> BINARY</#if><#t>
<#if !col.nullable!true> NOT NULL</#if><#t>
<#if col.defaultValue??> DEFAULT ${col.defaultValue}</#if><#t>
<#if col.unique!false> UNIQUE</#if><#t>
</#if>
<#if col.comment??> COMMENT '${col.comment}'</#if><#t>
<#if !col?is_last || primaryKey??>,</#if><#lt>
</#list>
<#if primaryKey??> PRIMARY KEY (<#rt>
<#list primaryKey.parts as part>
${part.column}<#sep>, </#sep><#t>
</#list>
)<#lt>
</#if>
)<#if tableComment??> COMMENT '${tableComment}'</#if> ENGINE=InnoDB;
<#--创建索引-->
<#if indexes??>
<#list indexes as index>
CREATE<#if index.unique!false> UNIQUE</#if> INDEX ${(index.name)!(index.aname)} ON ${tableName} (<#t>
<#list index.parts as part>
${part.column}<#sep>, </#sep><#t>
</#list>
);<#lt>
</#list>
</#if>
# SQL模板参数
# tableName
需要新建的数据库表表名。
# createIfNotExists
TODO
# selectStatement
查询sql,存在此参数时说明要构造create table xxx as select ...
语句,根据查询的SQL新建数据表,并在创建表的同时写入表数据。
# likeTableName
要复制表结构的源表名称,存在此参数就表示要构造create table xxx like...
语句,此参数类似tableName参数是一个完整的表名。
# tableComment
表注释,为null时表示该表没有表注释,在Freemaker文件中该属性已经进行转义,可以通过tableComment.value
属性访问未经转义的原值。
# tableType
数据库表类型,具体类型如下所示:
TABLE
:物理表,可以select和update数据LOCAL_TEMPTABLE
:本地临时表,只在当前连接可见,当前连接物理关闭时删除GLOBAL_TEMPTABLE
:全局临时表,所有连接可见,通常是引用过它的连接关闭时自动删除
# columns
字段列表,是一个数组对象,每一个元素都是一个字段。
属性如下:
name
:数据库表字段名。comment
:字段注释,没有时返回null
。length
:字段长度scale
:小数位位数,一般用于浮点型字段。dbType
:字段类型,如INT
、VARCHAR
。typeDeclaration
:带长度的字段类型的定义,如如VARCHAR(12)
。autoInc
:是否为自增长,为true表示自增长。nullable
:能否为空,为true表示可以为空。unsigned
:是否带有符号,true表示无符号,当为false时,可以存储负数。defaultValue
:默认值,一般为一个单引号括起来的字符串或者是表达式。primaryKey
:是否为主键,为true表示是主键。
# primarKey
设置主键字段,此处为一个索引对象,属性与indexes中的索引对象一致。
# indexes
索引列表,一般为一个数组对象,每一个元素都是一个索引。
属性如下:
name
:推荐索引名,可以为空,这里是建议索引名,如果元数据是从其他的库中读取的,该属性可能是索引在源库的索引名,若该索引名无法使用,会使用下面的aname
作为新的索引名。uname
:强制索引名,可以为空,当此属性存在时创建表应直接使用这里指定的索引名。aname
:自动索引名,不可为空,当上述name
属性无法使用时会使用这里自动生成的索引名,此索引不会和其他对象的索引名冲突。unique
:是否为唯一索引。cluster
:是否为聚集索引。enable
:是否启用。columns
:索引的字段列表。name
:索引的字段名。sort
:排序情况,默认为空,可以为空、DESC或者ASC。
0条评论
评论