Jeff Butler写的mybatis generator虽然许久未更新,不过带来的便利是巨大的。
可以在pom.xml中获取源码,然后转成maven工程,自行修改源码。
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.1</version>
</dependency>
扩展Base_Column_List
给每个字段增加表明,并设置别名.
<sql id="Base_Column_List_Udf">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Thu Oct 20 09:54:13 CST 2016.
-->
ccsDataDictionary.id id_ccsDataDictionary, ccsDataDictionary.display_field display_field_ccsDataDictionary,
ccsDataDictionary.value_field value_field_ccsDataDictionary, ccsDataDictionary.type type_ccsDataDictionary,
ccsDataDictionary.status status_ccsDataDictionary, ccsDataDictionary.description description_ccsDataDictionary,
ccsDataDictionary.creator creator_ccsDataDictionary, ccsDataDictionary.create_time create_time_ccsDataDictionary,
ccsDataDictionary.updator updator_ccsDataDictionary, ccsDataDictionary.update_time update_time_ccsDataDictionary
</sql>
第一步
在org.mybatis.generator.internal.rules.Rules
中增加接口
boolean generateUdfBaseColumnList();
在org.mybatis.generator.internal.rules.BaseRules
重载generateUdfBaseColumnList
/**
* @author dzm
*/
@Override
public boolean generateUdfBaseColumnList() {
return true;
}
在org.mybatis.generator.internal.rules.RulesDelegate
中添加
/**
* @author dzm
*/
@Override
public boolean generateUdfBaseColumnList() {
return rules.generateUdfBaseColumnList();
}
第二步
在org.mybatis.generator.api.IntrospectedTable
中InternalAttribute枚举中添加ATTR_BASE_COLUMN_LIST_ID_UDF
在org.mybatis.generator.api.IntrospectedTable
中添加方法
/**
* @author dzm
* @param s
*/
public void setBaseColumnListIdUdf(String s) {
internalAttributes.put(InternalAttribute.ATTR_BASE_COLUMN_LIST_ID_UDF, s);
}
/**
* @author dzm
* @return
*/
public String getUdfBaseColumnListId(){
return internalAttributes.get(InternalAttribute.ATTR_BASE_COLUMN_LIST_ID_UDF);
}
第三步
在org.mybatis.generator.codegen.mybatis3.xmlmapper.elements
包下,新建类
public class UdfBaseColumnListElementGenerator extends AbstractXmlElementGenerator{
public UdfBaseColumnListElementGenerator() {
super();
}
@Override
public void addElements(XmlElement parentElement) {
String tableAlias = StringUtility.underlineToCame(introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime());
XmlElement answer = new XmlElement("sql"); //$NON-NLS-1$
answer.addAttribute(new Attribute("id", //$NON-NLS-1$
introspectedTable.getUdfBaseColumnListId()));
context.getCommentGenerator().addComment(answer);
StringBuilder sb = new StringBuilder();
Iterator<IntrospectedColumn> iter = introspectedTable
.getNonBLOBColumns().iterator();
String column = null;
while (iter.hasNext()) {
column = MyBatis3FormattingUtilities.getSelectListPhrase(iter.next());
sb.append(tableAlias).append(".").append(column).append(" ").append(column).append("_").append(tableAlias);
if (iter.hasNext()) {
sb.append(", "); //$NON-NLS-1$
}
if (sb.length() > 80) {
answer.addElement(new TextElement(sb.toString()));
sb.setLength(0);
}
}
if (sb.length() > 0) {
answer.addElement((new TextElement(sb.toString())));
}
if (context.getPlugins().sqlMapBaseColumnListElementGenerated(
answer, introspectedTable)) {
parentElement.addElement(answer);
}
}
}
在org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator
中添加方法
/**
* 增加自定义的BaseColumnList
* @param parentElement
*/
protected void addUdfBaseColumnListElement(XmlElement parentElement){
if (introspectedTable.getRules().generateUdfBaseColumnList()){
AbstractXmlElementGenerator elementGenerator = new UdfBaseColumnListElementGenerator();
initializeAndExecuteGenerator(elementGenerator, parentElement);
}
}
在getSqlMapElement
方法中添加
addUdfBaseColumnListElement(answer);
第四步
将新的插件重新编译,并替换eclipse插件,或者maven的jar。
将打好的包,替换下图的三个jar,同一个包重命名三次即可。
插件源码可以参考:mybatis_generator_extend