@Override
  public void addElements(XmlElement parentElement) {
    XmlElement answer = new XmlElement("update"); // $NON-NLS-1$

    answer.addAttribute(
        new Attribute(
            "id", //$NON-NLS-1$
            introspectedTable.getUpdateByExampleStatementId()));

    answer.addAttribute(new Attribute("parameterType", "map")); // $NON-NLS-1$ //$NON-NLS-2$

    context.getCommentGenerator().addComment(answer);

    StringBuilder sb = new StringBuilder();
    sb.append("update "); // $NON-NLS-1$
    sb.append(introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime());
    answer.addElement(new TextElement(sb.toString()));

    // set up for first column
    sb.setLength(0);
    sb.append("set "); // $NON-NLS-1$

    Iterator<IntrospectedColumn> iter = introspectedTable.getNonBLOBColumns().iterator();
    while (iter.hasNext()) {
      IntrospectedColumn introspectedColumn = iter.next();

      sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(introspectedColumn));
      sb.append(" = "); // $NON-NLS-1$
      sb.append(
          MyBatis3FormattingUtilities.getParameterClause(
              introspectedColumn, "record.")); // $NON-NLS-1$

      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);
      }
    }

    answer.addElement(getUpdateByExampleIncludeElement());

    if (context
        .getPlugins()
        .sqlMapUpdateByExampleWithoutBLOBsElementGenerated(answer, introspectedTable)) {
      parentElement.addElement(answer);
    }
  }
  @Override
  public void addElements(XmlElement parentElement) {
    XmlElement answer = new XmlElement("update"); // $NON-NLS-1$

    answer.addAttribute(
        new Attribute("id", introspectedTable.getUpdateByPrimaryKeyStatementId())); // $NON-NLS-1$
    answer.addAttribute(
        new Attribute(
            "parameterType", //$NON-NLS-1$
            introspectedTable.getBaseRecordType()));

    context.getCommentGenerator().addComment(answer);

    StringBuilder sb = new StringBuilder();
    sb.append("update "); // $NON-NLS-1$
    sb.append(introspectedTable.getFullyQualifiedTableNameAtRuntime());
    answer.addElement(new TextElement(sb.toString()));

    // set up for first column
    sb.setLength(0);
    sb.append("set "); // $NON-NLS-1$

    Iterator<IntrospectedColumn> iter;
    if (isSimple) {
      iter = introspectedTable.getNonPrimaryKeyColumns().iterator();
    } else {
      iter = introspectedTable.getBaseColumns().iterator();
    }
    while (iter.hasNext()) {
      IntrospectedColumn introspectedColumn = iter.next();

      sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
      sb.append(" = "); // $NON-NLS-1$
      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 "); // $NON-NLS-1$
      } else {
        sb.append("where "); // $NON-NLS-1$
        and = true;
      }

      sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));
      sb.append(" = "); // $NON-NLS-1$
      sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
      answer.addElement(new TextElement(sb.toString()));
    }

    if (context
        .getPlugins()
        .sqlMapUpdateByPrimaryKeyWithoutBLOBsElementGenerated(answer, introspectedTable)) {
      parentElement.addElement(answer);
    }
  }