# merge.ftl

在merge.ftl文件中构造一个SQL模板,使数据库支持一个将表或SQL查询结果插入或更新到目标表的merge into语句以及一个将特定values插入或更新到目标表的merge into语句。

INSERT<#if !(updateFields??)> IGNORE</#if> INTO ${tableName}<#if insertFields??> (${insertFields})</#if>
<#--来源是数据表-->
<#if usingTable??>
	SELECT ${insertValues} FROM ${usingTable} ${usingAlias}<#lt>
<#elseif updateFields??><#--来源是sql,且有update列表,因为update列表中需要别名,需要包一层sql-->
	SELECT ${insertValues} FROM (<#lt>
	${usingSql}<#lt>
	) ${usingAlias}<#lt>
<#else>
	${usingSql}<#lt>
</#if>
<#--有update-->
<#if updateFields??>ON DUPLICATE KEY UPDATE ${updateFields}</#if>

提示

  1. 若数据库不支持merge into语句,可以配置为类似功能的insert into语句。
  2. 若不配置此模板,将默认使用标准的merge into语句。

# SQL模板参数

  • tableName:目标数据表表名。
  • tableAlias:目标数据表的别名。
  • insertFields:插入的字段名列表,此参数不为空。直接引用此参数会输出经过逗号分割的字段名,如field1,field2...
  • insertValues:insertFields字段列表对应的值,引用此参数时的输出格式同insertFields
  • updateFields:当数据已存在时执行的更新,直接引用此参数可以输出对应的字段名和值,如field1=value1,field2=value2...;如果不存在此参数,表示忽略已存在的数据。
  • usingTable:数据来源表表名,若此参数存在,表示需要将此表的数据合并到目标表,要求表中的字段名与目标表保持一致。
  • usingSql:执行merge的数据来源sql,若usingTable为空,则取这个值的参数。
  • usingAlias:数据来源表或者sql的别名,此参数不为空。
是否有帮助?
0条评论
评论