Generator 플러그 인 개발

11653 단어 mybatisplugingenerator
Generator 플러그 인 개발:
 
전체 인 스 턴 스:http://download.csdn.net/detail/ht_00001/9514922
 
1 상속:org.mybatis.generator.api.PluginAdapter;
public class RepositoryPlugin extends PluginAdapter{}
 
2 DAO 클래스 에 대한 수정:
다시 쓰기:
public List contextGenerateAdditionalJavaFiles(
IntrospectedTable introspectedTable);
 
3.복사 해서 DAO 클래스 만 들 기
계승:org.mybatis.generator.codegen.AbstractJavaGenerator
public class RepositoryJavaGenerator extends AbstractJavaGenerator{}
다시 쓰기:
public List 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 list = introspectedTable.getAllColumns();
 
14 표 이름 가 져 오기
introspectedTable.getFullyQualifiedTableNameAtRuntime()
 
15 메 인 키 가 져 오기
List 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

좋은 웹페이지 즐겨찾기