Generator 插件开发

来源:互联网 发布:英语专业就业前景知乎 编辑:程序博客网 时间:2024/05/16 19:51

Generator 插件开发:

简单开发实例地址:欢迎下载  http://download.csdn.net/detail/ht_00001/9514922

1 继承:org.mybatis.generator.api.PluginAdapter;

public class RepositoryPlugin extends PluginAdapter{}


2 对DAO类的修改:
重写:
public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(
IntrospectedTable introspectedTable);


3 复写创建DAO类
继承:org.mybatis.generator.codegen.AbstractJavaGenerator
public class RepositoryJavaGenerator extends AbstractJavaGenerator{}
重写:
public List<CompilationUnit> getCompilationUnits(){}
新创建DAO类
Interface inter =new Interface(new FullyQualifiedJavaType(String className));
设置类的修饰符
inter.setVisibility(JavaVisibility.PUBLIC);//public 属性
导入包
inter.addImportedType(new FullyQualifiedJavaType(String importName))

inter.addImportedType(String importName)
继承接口
inter.addSuperInterface(new FullyQualifiedJavaType(String fatherName))
实例:
package plugin;


import java.util.ArrayList;
import java.util.List;

import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.api.dom.java.JavaVisibility;
import org.mybatis.generator.codegen.AbstractJavaGenerator;

public class RepositoryJavaGenerator extends AbstractJavaGenerator {

@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
public List<CompilationUnit> getCompilationUnits() {

String pack = context.getProperty("repositoryTargetPackage");
FullyQualifiedJavaType type = new FullyQualifiedJavaType(
new StringBuffer(pack).append(".").
append(introspectedTable.getFullyQualifiedTable().getDomainObjectName()).
append("Mapper").toString());
Interface inter = new Interface(type);
inter.setVisibility(JavaVisibility.PUBLIC);
inter.addImportedType(new FullyQualifiedJavaType(introspectedTable.getBaseRecordType()));
inter.addSuperInterface(new FullyQualifiedJavaType(
new StringBuffer("BaseRepository<").
append(introspectedTable.getFullyQualifiedTable().getDomainObjectName()).
append(">").toString()
));
List answer = new ArrayList();
answer.add(inter);
return answer;
}
}

package plugin;


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

import org.mybatis.generator.api.GeneratedJavaFile;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.Document;
import org.mybatis.generator.api.dom.xml.XmlElement;

public class RepositoryPlugin extends PluginAdapter {

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

/**
* 创建dao类
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(
IntrospectedTable introspectedTable) {
RepositoryJavaGenerator repository = new RepositoryJavaGenerator();
repository.setContext(context);
repository.setIntrospectedTable(introspectedTable);
List units = repository.getCompilationUnits();
List generatedFile = new ArrayList();
GeneratedJavaFile gif;
for (Iterator iterator = units.iterator(); iterator.hasNext();generatedFile.add(gif)) {
CompilationUnit unit = (CompilationUnit) iterator.next();
gif = new GeneratedJavaFile(unit,context.getJavaModelGeneratorConfiguration().getTargetProject(),
context.getProperty("javaFileEncoding"),context.getJavaFormatter());
}
return generatedFile;
}


4 获取generator.xml 中context的property属性值
context.getProperty("name")
 
5 获取实体类的全类名
introspectedTable.getBaseRecordType()


6 获取实体类的类名
introspectedTable.getFullyQualifiedTable().getDomainObjectName()
或者
context.getTableConfigurations().get(0).getDomainObjectName()//0表示第几张表的实体类



7 对XML修改:
重写:
public boolean sqlMapDocumentGenerated(Document document,
IntrospectedTable introspectedTable);
实例:
package plugin;


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

import org.mybatis.generator.api.GeneratedJavaFile;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.Document;
import org.mybatis.generator.api.dom.xml.XmlElement;

public class RepositoryPlugin extends PluginAdapter {

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

/**
* xml的命名空间定义
*/
@Override
public boolean sqlMapDocumentGenerated(Document document,
IntrospectedTable introspectedTable) {
String pack = context.getProperty("repositoryTargetPackage");
XmlElement rootElement = document.getRootElement();
rootElement.getAttributes().clear();
rootElement.addAttribute(new Attribute("namespace",
new StringBuffer(pack).append(".").
append(introspectedTable.getFullyQualifiedTable().getDomainObjectName()).
append("Mapper").toString() ));
return super.sqlMapDocumentGenerated(document, introspectedTable);
}


8 获取根节点
XmlElement rootElement = document.getRootElement()


9 添加属性
rootElement.addAttribute(new Attribute(String name, String value))

10 清除节点的所有属性
rootElement.getAttributes().clear();

11 新增节点
rootElement.addElement(XmlElement element)


12 新增SQL的文本信息
rootElement.addElement(TextElement element)

13 获取所有的表字段
List<IntrospectedColumn> list = introspectedTable.getAllColumns();

14 获取表名
introspectedTable.getFullyQualifiedTableNameAtRuntime()


15 获取主键
List<IntrospectedColumn> list = introspectedTable.getPrimaryKeyColumns();

16 获取表字段的名称
MyBatis3FormattingUtilities.getSelectListPhrase(IntrospectedColumn introspectedColumn)

分页查询实例:
package plugin;


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

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.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities;

/**
* mySql的分也查询
* @author huang_tao
*
*/
public class SelectPagePlugin extends PluginAdapter {

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

@Override
public boolean sqlMapDocumentGenerated(Document document,
IntrospectedTable introspectedTable) {
XmlElement rootElement = document.getRootElement();
XmlElement answer = new XmlElement("select");
answer.addAttribute(new Attribute("id","selectByPage"));
answer.addAttribute(new Attribute("resultMap","BaseResultMap"));
answer.addAttribute(new Attribute("parameterType", "java.lang.Integer"));

StringBuffer sb = new StringBuffer();
Iterator<IntrospectedColumn> iter = introspectedTable.getAllColumns().iterator();
sb.append("select ");

makeXmlElement(answer,sb);

sb.append("  ");
while(iter.hasNext()){
sb.append(" "+MyBatis3FormattingUtilities.getSelectListPhrase(iter.next()));
if(iter.hasNext()){
sb.append(" ,");
}
}
makeXmlElement(answer,sb);

sb.append("from ");
makeXmlElement(answer,sb);

sb.append("  ");
sb.append(" "+introspectedTable.getFullyQualifiedTableNameAtRuntime());
makeXmlElement(answer,sb);

sb.append("order by ");
iter = introspectedTable.getPrimaryKeyColumns().iterator();
while(iter.hasNext()){
sb.append(" "+MyBatis3FormattingUtilities.getSelectListPhrase(iter.next()));
if(iter.hasNext()){
sb.append(" ,");
}
}
makeXmlElement(answer,sb);

sb.append("limit ").append("10 * (#{page,jdbcType=INTEGER}-1)").
append(" , ").append("10 * #{page,jdbcType=INTEGER}");

makeXmlElement(answer,sb);

rootElement.addElement(answer);
return super.sqlMapDocumentGenerated(document, introspectedTable);
}

private void  makeXmlElement(XmlElement answer,StringBuffer sb){
if(sb.length()>0){
answer.addElement(new TextElement(sb.toString()));
sb.setLength(0);
}
}
}


17 对实体类的修改
重写
  public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
          IntrospectedTable introspectedTable)
  添加修饰符
    context.getCommentGenerator().addFieldComment(Field file, 
    IntrospectedTable introspectedTable);
     topLevelClass.addField(Field file);
添加方法
context.getCommentGenerator().addGeneralMethodComment(Method method,
                IntrospectedTable introspectedTable);
topLevelClass.addMethod(Method method);
添加标签
method.addAnnotation("@Override")
设置属性
method.setVisibility(JavaVisibility.PUBLIC);//public 属性
添加返回值
method.setReturnType(FullyQualifiedJavaType returnType)
设置名称
method.setName("toString")
方法添加方法体
method.addBodyLine(String message)
获取所有的属性
topLevelClass.getFields()
设是否为final
method.setFinal(Boolean boolean);   //默认false
设置是否为static
method.setStatic(Boolean boolean);  //默认false
设置方法是否带锁
method.setSynchronized(Boolean boolean); //默认false
属性设置类型
field.setType(new FullyQualifiedJavaType(String));
属性设置值
field.setInitializationString(String message)

实例可见 mybatis-generator-core.jar
添加方法:org.mybatis.generator.plugins.ToStringPlugin{};
添加属性:org.mybatis.generator.plugins.SerializablePlugin
0 0
原创粉丝点击