package com.freetmp.mbg.plugin.upsert; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.xml.Attribute; import org.mybatis.generator.api.dom.xml.XmlElement; /** * Created by LiuPin on 2015/5/19. */ public class OracleUpsertPlugin extends AbstractUpsertPlugin { @Override protected void generateSqlMapContent(IntrospectedTable introspectedTable, XmlElement parent) { generateTextBlockAppendTableName("merge into ", introspectedTable, parent); generateTextBlock(" using dual on ( ", parent); XmlElement include = new XmlElement("include"); include.addAttribute(new Attribute("refid", IDENTIFIERS_ARRAY_CONDITIONS)); parent.addElement(include); generateTextBlock(" ) ", parent); generateTextBlock(" when matched then update set", parent); generateParameterForSet(PROPERTY_PREFIX, introspectedTable.getAllColumns(), parent); generateTextBlock(" when not matched then insert ", parent); generateActualColumnNamesWithParenthesis(introspectedTable.getAllColumns(), parent); generateTextBlock(" values ", parent); generateParametersSeparateByCommaWithParenthesis(PROPERTY_PREFIX, introspectedTable.getAllColumns(), parent); } @Override protected void generateSqlMapContentSelective(IntrospectedTable introspectedTable, XmlElement parent) { generateTextBlockAppendTableName("merge into ", introspectedTable, parent); generateTextBlock(" using dual on ( ", parent); XmlElement include = new XmlElement("include"); include.addAttribute(new Attribute("refid", IDENTIFIERS_ARRAY_CONDITIONS)); parent.addElement(include); generateTextBlock(" ) ", parent); generateTextBlock(" when matched then update set ", parent); generateParameterForSet(PROPERTY_PREFIX, true, introspectedTable.getAllColumns(), parent); generateTextBlock(" when not matched then insert ", parent); generateActualColumnNamesWithParenthesis(PROPERTY_PREFIX, true, introspectedTable.getAllColumns(), parent); generateTextBlock(" values ", parent); generateParametersSeparateByCommaWithParenthesis(PROPERTY_PREFIX, true, introspectedTable.getAllColumns(), parent); } }