Skip to content

Instantly share code, notes, and snippets.

@harawata
Created April 1, 2016 16:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save harawata/d29e49f2c75c5500ae0acf19b6a7d090 to your computer and use it in GitHub Desktop.
Save harawata/d29e49f2c75c5500ae0acf19b6a7d090 to your computer and use it in GitHub Desktop.
An example mybatis generator plugin that appends ${alias} to Base_Column_List
import java.util.List;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
public class AddAliasToBaseColumnListPlugin extends PluginAdapter {
public boolean validate(List<String> arg0) {
return true;
}
@Override
public boolean sqlMapBaseColumnListElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
StringBuilder sb = new StringBuilder();
int lastIndex = element.getElements().size() - 1;
String[] columns = element.getElements().get(lastIndex).getFormattedContent(0).split(", ");
for (String column : columns) {
if (sb.length() > 0) {
sb.append(", ");
}
sb.append("${alias}").append(column);
}
element.getElements().set(lastIndex, new TextElement(sb.toString()));
return true;
}
}
@ilkomiliev
Copy link

package org.mybatis.generator.plugins.aliasedbasecolumn;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.Document;
import org.mybatis.generator.api.dom.xml.Element;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.codegen.ibatis2.sqlmap.elements.BaseColumnListElementGenerator;

import java.util.Iterator;
import java.util.List;


public class AddAliasToBaseColumnListPlugin extends PluginAdapter {

    @Override
    public boolean validate(List<String> list) {
        return true;
    }

    @Override
    public boolean sqlMapDocumentGenerated(Document document,
                                           IntrospectedTable introspectedTable) {

        BaseColumnListElementGenerator baseColumnListElementGenerator = new BaseColumnListElementGenerator();
        baseColumnListElementGenerator.setContext(getContext());
        Iterator<IntrospectedColumn> iter = introspectedTable.getNonBLOBColumns().iterator();
        while (iter.hasNext()) {
            IntrospectedColumn column = iter.next();
            column.setTableAlias("${alias}");
        }
        baseColumnListElementGenerator.setIntrospectedTable(introspectedTable);
        baseColumnListElementGenerator.addElements(document.getRootElement());

        int lastIndex = document.getRootElement().getElements().size() - 1;
        Element element = document.getRootElement().getElements().get(lastIndex);
        Attribute attrAliased = null;
        Iterator<Attribute> attributes = ((XmlElement) element).getAttributes().iterator();
        while (attributes.hasNext()) {
            Attribute attribute = attributes.next();
            if (attribute.getName().equalsIgnoreCase("id")) {
                attrAliased = new Attribute(attribute.getName(), attribute.getValue() + "_Aliased");
                attributes.remove();
                break;
            }
        }
        if (attrAliased != null) {
            ((XmlElement) element).addAttribute(attrAliased);
        }
        return true;
    }
}

@ilkomiliev
Copy link

that's what I've ended with - second element Base_Column_List_Aliased - improvements highly appreciated, because it is my first plugin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment