enhanced.mybaits.generator.codegen.xmlmapper.EnhanceUpdateByPrimaryKeyElementGenerator Maven / Gradle / Ivy
package enhanced.mybaits.generator.codegen.xmlmapper;
import enhanced.mybaits.generator.enums.EnhanceSqlIdEnum;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.dom.OutputUtilities;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.codegen.mybatis3.ListUtilities;
import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;
import java.util.Iterator;
/**
* 增强的更新指定主键的记录生成器
*
* @author 徐明龙 XuMingLong
*/
public class EnhanceUpdateByPrimaryKeyElementGenerator extends EnhanceAbstractXmlElementGenerator {
public EnhanceUpdateByPrimaryKeyElementGenerator() {
super();
}
/**
* 生成更新指定主键的记录节点
*
* @author 徐明龙 XuMingLong
* @param parentElement 父节点
*/
@Override
public void addElements(XmlElement parentElement) {
XmlElement answer = new XmlElement("update");
answer.addAttribute(new Attribute("id", EnhanceSqlIdEnum.UPDATE_BY_PRIMARY_KEY.getValue()));
answer.addAttribute(new Attribute("parameterType", getBaseRecordName()));
context.getCommentGenerator().addComment(answer);
StringBuilder sb = new StringBuilder();
sb.append("update ");
sb.append(introspectedTable.getFullyQualifiedTableNameAtRuntime());
answer.addElement(new TextElement(sb.toString()));
// set up for first column
sb.setLength(0);
sb.append("set ");
Iterator iter =
ListUtilities.removeGeneratedAlwaysColumns(introspectedTable.getNonPrimaryKeyColumns()).iterator();
while (iter.hasNext()) {
IntrospectedColumn introspectedColumn = iter.next();
sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
sb.append(" = ");
sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
if (iter.hasNext()) {
sb.append(',');
}
answer.addElement(new TextElement(sb.toString()));
// set up for the next column
if (iter.hasNext()) {
sb.setLength(0);
OutputUtilities.xmlIndent(sb, 1);
}
}
boolean and = false;
for (IntrospectedColumn introspectedColumn : introspectedTable.getPrimaryKeyColumns()) {
sb.setLength(0);
if (and) {
sb.append(" and ");
} else {
sb.append("where ");
and = true;
}
sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
sb.append(" = ");
sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
answer.addElement(new TextElement(sb.toString()));
}
if (context.getPlugins().sqlMapUpdateByPrimaryKeyWithoutBLOBsElementGenerated(answer, introspectedTable)) {
parentElement.addElement(answer);
}
}
}