Generator 플러그 인 개발
전체 인 스 턴 스:http://download.csdn.net/detail/ht_00001/9514922
1 상속:org.mybatis.generator.api.PluginAdapter;
public class RepositoryPlugin extends PluginAdapter{}
2 DAO 클래스 에 대한 수정:
다시 쓰기:
public List
IntrospectedTable introspectedTable);
3.복사 해서 DAO 클래스 만 들 기
계승:org.mybatis.generator.codegen.AbstractJavaGenerator
public class RepositoryJavaGenerator extends AbstractJavaGenerator{}
다시 쓰기:
public List
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
14 표 이름 가 져 오기
introspectedTable.getFullyQualifiedTableNameAtRuntime()
15 메 인 키 가 져 오기
List
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL/마이바티스 | 동적 쿼리 사용A라는 서비스에 해당하는 테이블을 조인하고 조회하는 데 사용됩니다. 나중에 공통화를 위해 B 및 C 서비스도 추가됩니다. A, B, C 서비스는 모두 단일 쿼리에서 작동할 수 있도록 공통화되어야 합니다. 테이블에 각...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.