package com.freetmp.mbg.plugin.batch; import com.freetmp.mbg.plugin.AbstractXmbgPlugin; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.*; import org.mybatis.generator.api.dom.xml.Attribute; import org.mybatis.generator.api.dom.xml.Document; import org.mybatis.generator.api.dom.xml.TextElement; import org.mybatis.generator.api.dom.xml.XmlElement; import org.mybatis.generator.config.GeneratedKey; import java.util.List; /** * 批量插入生成插件 * * @author Pin Liu */ public class BatchInsertPlugin extends AbstractXmbgPlugin { public static final String BATCH_INSERT = "batchInsert"; public static final String PROPERTY_PREFIX = "item."; @Override public boolean validate(List<String> warnings) { return true; } @Override public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { String objectName = introspectedTable.getTableConfiguration().getDomainObjectName(); Method method = new Method(BATCH_INSERT); FullyQualifiedJavaType type = new FullyQualifiedJavaType("java.util.List<" + objectName + ">"); method.addParameter(new Parameter(type, "list")); method.setReturnType(FullyQualifiedJavaType.getIntInstance()); interfaze.addMethod(method); return true; } @Override public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) { XmlElement answer = new XmlElement("insert"); //$NON-NLS-1$ answer.addAttribute(new Attribute("id", BATCH_INSERT)); //$NON-NLS-1$ FullyQualifiedJavaType parameterType = new FullyQualifiedJavaType("java.util.List"); answer.addAttribute(new Attribute("parameterType", parameterType.getFullyQualifiedName())); // 批处理中无法主键生成 /** GeneratedKey gk = introspectedTable.getGeneratedKey(); if (gk != null) { IntrospectedColumn introspectedColumn = introspectedTable.getColumn(gk.getColumn()); // if the column is null, then it's a configuration error. The // warning has already been reported if (introspectedColumn != null) { if (gk.isJdbcStandard()) { answer.addAttribute(new Attribute("useGeneratedKeys", "true")); answer.addAttribute(new Attribute("keyProperty", introspectedColumn.getJavaProperty())); } else { answer.addElement(getSelectKey(introspectedColumn, gk)); } } }*/ generateTextBlockAppendTableName("insert into ", introspectedTable,answer); generateActualColumnNamesWithParenthesis(introspectedTable.getNonBLOBColumns(),answer); generateTextBlock(" values ", answer); XmlElement foreach = new XmlElement("foreach"); foreach.addAttribute(new Attribute("collection", "list")); foreach.addAttribute(new Attribute("item", "item")); foreach.addAttribute(new Attribute("index", "index")); foreach.addAttribute(new Attribute("separator", ",")); generateParametersSeparateByCommaWithParenthesis(PROPERTY_PREFIX,introspectedTable.getNonBLOBColumns(),foreach); answer.addElement(foreach); document.getRootElement().addElement(answer); return true; } protected XmlElement getSelectKey(IntrospectedColumn introspectedColumn, GeneratedKey generatedKey) { String identityColumnType = introspectedColumn .getFullyQualifiedJavaType().getFullyQualifiedName(); XmlElement answer = new XmlElement("selectKey"); //$NON-NLS-1$ answer.addAttribute(new Attribute("resultType", identityColumnType)); //$NON-NLS-1$ answer.addAttribute(new Attribute("keyProperty", introspectedColumn.getJavaProperty())); //$NON-NLS-1$ answer.addAttribute(new Attribute("order", //$NON-NLS-1$ generatedKey.getMyBatis3Order())); answer.addElement(new TextElement(generatedKey.getRuntimeSqlStatement())); return answer; } }