package com.freetmp.mbg.plugin.batch;
import com.freetmp.mbg.plugin.AbstractXmbgPlugin;
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.XmlElement;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
/**
* 批量更新生成插件
* @author Pin Liu
*/
public class BatchUpdatePlugin extends AbstractXmbgPlugin {
public static final String BATCH_UPDATE = "batchUpdate";
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) {
Set<FullyQualifiedJavaType> importedTypes = new TreeSet<>();
Method method = new Method(BATCH_UPDATE);
FullyQualifiedJavaType type = new FullyQualifiedJavaType("java.util.List<" + introspectedTable.getTableConfiguration().getDomainObjectName() + ">");
method.addParameter(new Parameter(type, "list"));
method.setReturnType(FullyQualifiedJavaType.getIntInstance());
importedTypes.add(type);
interfaze.addMethod(method);
interfaze.addImportedTypes(importedTypes);
return true;
}
@Override
public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
XmlElement update = new XmlElement("update");
update.addAttribute(new Attribute("id", BATCH_UPDATE));
String parameterType = "java.util.List";
update.addAttribute(new Attribute("parameterType", parameterType));
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", ";"));
generateTextBlockAppendTableName(" update ",introspectedTable,foreach);
XmlElement dynamicElement = new XmlElement("set"); //$NON-NLS-1$
generateParameterForSet(PROPERTY_PREFIX,true,introspectedTable.getNonPrimaryKeyColumns(),dynamicElement);
foreach.addElement(dynamicElement);
generateWhereConditions(PROPERTY_PREFIX,introspectedTable.getPrimaryKeyColumns(),foreach);
update.addElement(foreach);
document.getRootElement().addElement(update);
return true;
}
}