# 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:字段类型,如INTVARCHAR
  • 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条评论
评论