// Path: src/main/java/org/mybatis/generator/api/dom/java/Interface.java
// public class Interface extends InnerInterface implements CompilationUnit {
//     
//     private Set<FullyQualifiedJavaType> importedTypes;
// 
//     private Set<String> staticImports;
// 
//     private List<String> fileCommentLines;
// 
//     public Interface(FullyQualifiedJavaType type) {
//         super(type);
//         importedTypes = new TreeSet<FullyQualifiedJavaType>();
//         fileCommentLines = new ArrayList<String>();
//         staticImports = new TreeSet<String>();
//     }
// 
//     public Interface(String type) {
//         this(new FullyQualifiedJavaType(type));
//     }
// 
//     @Override
//     public Set<FullyQualifiedJavaType> getImportedTypes() {
//         return importedTypes;
//     }
// 
//     @Override
//     public void addImportedType(FullyQualifiedJavaType importedType) {
//         if (importedType.isExplicitlyImported()
//                 && !importedType.getPackageName().equals(getType().getPackageName())) {
//             importedTypes.add(importedType);
//         }
//     }
// 
//     @Override
//     public String getFormattedContent() {
// 
//         return getFormattedContent(0, this);
//     }
// 
//     @Override
//     public String getFormattedContent(int indentLevel, CompilationUnit compilationUnit) {
//         StringBuilder sb = new StringBuilder();
// 
//         for (String commentLine : fileCommentLines) {
//             sb.append(commentLine);
//             newLine(sb);
//         }
// 
//         if (stringHasValue(getType().getPackageName())) {
//             sb.append("package "); //$NON-NLS-1$
//             sb.append(getType().getPackageName());
//             sb.append(';');
//             newLine(sb);
//             newLine(sb);
//         }
// 
//         for (String staticImport : staticImports) {
//             sb.append("import static "); //$NON-NLS-1$
//             sb.append(staticImport);
//             sb.append(';');
//             newLine(sb);
//         }
// 
//         if (staticImports.size() > 0) {
//             newLine(sb);
//         }
// 
//         Set<String> importStrings = calculateImports(importedTypes);
//         for (String importString : importStrings) {
//             sb.append(importString);
//             newLine(sb);
//         }
// 
//         if (importStrings.size() > 0) {
//             newLine(sb);
//         }
// 
//         sb.append(super.getFormattedContent(0, this));
// 
//         return sb.toString();
//     }
// 
//     @Override
//     public void addFileCommentLine(String commentLine) {
//         fileCommentLines.add(commentLine);
//     }
// 
//     @Override
//     public List<String> getFileCommentLines() {
//         return fileCommentLines;
//     }
// 
//     @Override
//     public void addImportedTypes(Set<FullyQualifiedJavaType> importedTypes) {
//         this.importedTypes.addAll(importedTypes);
//     }
// 
//     @Override
//     public Set<String> getStaticImports() {
//         return staticImports;
//     }
// 
//     @Override
//     public void addStaticImport(String staticImport) {
//         staticImports.add(staticImport);
//     }
// 
//     @Override
//     public void addStaticImports(Set<String> staticImports) {
//         this.staticImports.addAll(staticImports);
//     }
// }
// 
// Path: src/main/java/org/mybatis/generator/codegen/mybatis3/xmlmapper/MixedMapperGenerator.java
// public class MixedMapperGenerator extends XMLMapperGenerator {
// 
//     @Override
//     protected void addSelectByPrimaryKeyElement(XmlElement parentElement) {
//     }
// 
//     @Override
//     protected void addDeleteByPrimaryKeyElement(XmlElement parentElement) {
//     }
// 
//     @Override
//     protected void addInsertElement(XmlElement parentElement) {
//     }
// 
//     @Override
//     protected void addUpdateByPrimaryKeyWithBLOBsElement(
//             XmlElement parentElement) {
//     }
// 
//     @Override
//     protected void addUpdateByPrimaryKeyWithoutBLOBsElement(
//             XmlElement parentElement) {
//     }
// }


import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.codegen.AbstractXmlGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.AbstractJavaMapperMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated.AnnotatedDeleteByPrimaryKeyMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated.AnnotatedInsertMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated.AnnotatedSelectByPrimaryKeyMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated.AnnotatedUpdateByPrimaryKeyWithBLOBsMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated.AnnotatedUpdateByPrimaryKeyWithoutBLOBsMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.xmlmapper.MixedMapperGenerator;

    @Override
    protected void addSelectByPrimaryKeyMethod(Interface interfaze) {
        if (introspectedTable.getRules().generateSelectByPrimaryKey()) {
            AbstractJavaMapperMethodGenerator methodGenerator =
                    new AnnotatedSelectByPrimaryKeyMethodGenerator(true, false);
            initializeAndExecuteGenerator(methodGenerator, interfaze);
        }
    }

    @Override
    protected void addUpdateByPrimaryKeyWithBLOBsMethod(Interface interfaze) {
        if (introspectedTable.getRules().generateUpdateByPrimaryKeyWithBLOBs()) {
            AbstractJavaMapperMethodGenerator methodGenerator =
                    new AnnotatedUpdateByPrimaryKeyWithBLOBsMethodGenerator();
            initializeAndExecuteGenerator(methodGenerator, interfaze);
        }
    }

    @Override
    protected void addUpdateByPrimaryKeyWithoutBLOBsMethod(Interface interfaze) {
        if (introspectedTable.getRules().generateUpdateByPrimaryKeyWithoutBLOBs()) {
            AbstractJavaMapperMethodGenerator methodGenerator =
                    new AnnotatedUpdateByPrimaryKeyWithoutBLOBsMethodGenerator(false);
            initializeAndExecuteGenerator(methodGenerator, interfaze);
        }
    }

    @Override
    public AbstractXmlGenerator getMatchedXMLGenerator() {
// Path: src/main/java/org/mybatis/generator/api/dom/java/Interface.java
// public class Interface extends InnerInterface implements CompilationUnit {
//     
//     private Set<FullyQualifiedJavaType> importedTypes;
// 
//     private Set<String> staticImports;
// 
//     private List<String> fileCommentLines;
// 
//     public Interface(FullyQualifiedJavaType type) {
//         super(type);
//         importedTypes = new TreeSet<FullyQualifiedJavaType>();
//         fileCommentLines = new ArrayList<String>();
//         staticImports = new TreeSet<String>();
//     }
// 
//     public Interface(String type) {
//         this(new FullyQualifiedJavaType(type));
//     }
// 
//     @Override
//     public Set<FullyQualifiedJavaType> getImportedTypes() {
//         return importedTypes;
//     }
// 
//     @Override
//     public void addImportedType(FullyQualifiedJavaType importedType) {
//         if (importedType.isExplicitlyImported()
//                 && !importedType.getPackageName().equals(getType().getPackageName())) {
//             importedTypes.add(importedType);
//         }
//     }
// 
//     @Override
//     public String getFormattedContent() {
// 
//         return getFormattedContent(0, this);
//     }
// 
//     @Override
//     public String getFormattedContent(int indentLevel, CompilationUnit compilationUnit) {
//         StringBuilder sb = new StringBuilder();
// 
//         for (String commentLine : fileCommentLines) {
//             sb.append(commentLine);
//             newLine(sb);
//         }
// 
//         if (stringHasValue(getType().getPackageName())) {
//             sb.append("package "); //$NON-NLS-1$
//             sb.append(getType().getPackageName());
//             sb.append(';');
//             newLine(sb);
//             newLine(sb);
//         }
// 
//         for (String staticImport : staticImports) {
//             sb.append("import static "); //$NON-NLS-1$
//             sb.append(staticImport);
//             sb.append(';');
//             newLine(sb);
//         }
// 
//         if (staticImports.size() > 0) {
//             newLine(sb);
//         }
// 
//         Set<String> importStrings = calculateImports(importedTypes);
//         for (String importString : importStrings) {
//             sb.append(importString);
//             newLine(sb);
//         }
// 
//         if (importStrings.size() > 0) {
//             newLine(sb);
//         }
// 
//         sb.append(super.getFormattedContent(0, this));
// 
//         return sb.toString();
//     }
// 
//     @Override
//     public void addFileCommentLine(String commentLine) {
//         fileCommentLines.add(commentLine);
//     }
// 
//     @Override
//     public List<String> getFileCommentLines() {
//         return fileCommentLines;
//     }
// 
//     @Override
//     public void addImportedTypes(Set<FullyQualifiedJavaType> importedTypes) {
//         this.importedTypes.addAll(importedTypes);
//     }
// 
//     @Override
//     public Set<String> getStaticImports() {
//         return staticImports;
//     }
// 
//     @Override
//     public void addStaticImport(String staticImport) {
//         staticImports.add(staticImport);
//     }
// 
//     @Override
//     public void addStaticImports(Set<String> staticImports) {
//         this.staticImports.addAll(staticImports);
//     }
// }
// 
// Path: src/main/java/org/mybatis/generator/codegen/mybatis3/xmlmapper/MixedMapperGenerator.java
// public class MixedMapperGenerator extends XMLMapperGenerator {
// 
//     @Override
//     protected void addSelectByPrimaryKeyElement(XmlElement parentElement) {
//     }
// 
//     @Override
//     protected void addDeleteByPrimaryKeyElement(XmlElement parentElement) {
//     }
// 
//     @Override
//     protected void addInsertElement(XmlElement parentElement) {
//     }
// 
//     @Override
//     protected void addUpdateByPrimaryKeyWithBLOBsElement(
//             XmlElement parentElement) {
//     }
// 
//     @Override
//     protected void addUpdateByPrimaryKeyWithoutBLOBsElement(
//             XmlElement parentElement) {
//     }
// }


// Path: src/main/java/org/mybatis/generator/codegen/mybatis3/javamapper/MixedClientGenerator.java
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.codegen.AbstractXmlGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.AbstractJavaMapperMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated.AnnotatedDeleteByPrimaryKeyMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated.AnnotatedInsertMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated.AnnotatedSelectByPrimaryKeyMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated.AnnotatedUpdateByPrimaryKeyWithBLOBsMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.javamapper.elements.annotated.AnnotatedUpdateByPrimaryKeyWithoutBLOBsMethodGenerator;
import org.mybatis.generator.codegen.mybatis3.xmlmapper.MixedMapperGenerator;


    @Override
    protected void addSelectByPrimaryKeyMethod(Interface interfaze) {
        if (introspectedTable.getRules().generateSelectByPrimaryKey()) {
            AbstractJavaMapperMethodGenerator methodGenerator =
                    new AnnotatedSelectByPrimaryKeyMethodGenerator(true, false);
            initializeAndExecuteGenerator(methodGenerator, interfaze);
        }
    }

    @Override
    protected void addUpdateByPrimaryKeyWithBLOBsMethod(Interface interfaze) {
        if (introspectedTable.getRules().generateUpdateByPrimaryKeyWithBLOBs()) {
            AbstractJavaMapperMethodGenerator methodGenerator =
                    new AnnotatedUpdateByPrimaryKeyWithBLOBsMethodGenerator();
            initializeAndExecuteGenerator(methodGenerator, interfaze);
        }
    }

    @Override
    protected void addUpdateByPrimaryKeyWithoutBLOBsMethod(Interface interfaze) {
        if (introspectedTable.getRules().generateUpdateByPrimaryKeyWithoutBLOBs()) {
            AbstractJavaMapperMethodGenerator methodGenerator =
                    new AnnotatedUpdateByPrimaryKeyWithoutBLOBsMethodGenerator(false);
            initializeAndExecuteGenerator(methodGenerator, interfaze);
        }
    }

    @Override
    public AbstractXmlGenerator getMatchedXMLGenerator() {
        return new MixedMapperGenerator();