@Override
  public void addInterfaceElements(Interface interfaze) {
    Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
    Method method = new Method();

    FullyQualifiedJavaType returnType = FullyQualifiedJavaType.getNewListInstance();
    importedTypes.add(returnType);
    FullyQualifiedJavaType listType;
    listType = new FullyQualifiedJavaType(introspectedTable.getBaseRecordType());

    importedTypes.add(listType);
    returnType.addTypeArgument(listType);
    method.setReturnType(returnType);
    method.setVisibility(JavaVisibility.PUBLIC);
    method.setName(introspectedTable.getSelectSelectiveStatementId());

    FullyQualifiedJavaType parameterType = introspectedTable.getRules().calculateAllFieldsClass();

    importedTypes.add(parameterType);
    method.addParameter(new Parameter(parameterType, "record")); // $NON-NLS-1$

    context.getCommentGenerator().addGeneralMethodComment(method, introspectedTable);

    addMapperAnnotations(interfaze, method);

    if (context
        .getPlugins()
        .clientSelectSelectiveMethodGenerated(method, interfaze, introspectedTable)) {
      interfaze.addImportedTypes(importedTypes);
      interfaze.addMethod(method);
    }
  }
  @Override
  public void addInterfaceElements(Interface interfaze) {
    Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
    Method method = getMethodShell(importedTypes);

    if (context
        .getPlugins()
        .clientUpdateByPrimaryKeyWithBLOBsMethodGenerated(method, interfaze, introspectedTable)) {
      interfaze.addImportedTypes(importedTypes);
      interfaze.addMethod(method);
    }
  }
  @Override
  public void addInterfaceElements(Interface interfaze) {
    if (getExampleMethodVisibility() == JavaVisibility.PUBLIC) {
      Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
      Method method = getMethodShell(importedTypes);

      if (context
          .getPlugins()
          .clientSelectByExampleWithoutBLOBsMethodGenerated(method, interfaze, introspectedTable)) {
        interfaze.addImportedTypes(importedTypes);
        interfaze.addMethod(method);
      }
    }
  }
  @Override
  public void addInterfaceElements(Interface interfaze) {
    Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
    FullyQualifiedJavaType type = new FullyQualifiedJavaType(introspectedTable.getExampleType());
    importedTypes.add(type);
    importedTypes.add(FullyQualifiedJavaType.getNewListInstance());

    Method method = new Method();
    method.setVisibility(JavaVisibility.PUBLIC);

    FullyQualifiedJavaType returnType = FullyQualifiedJavaType.getNewListInstance();
    FullyQualifiedJavaType listType;
    if (introspectedTable.getRules().generateBaseRecordClass()) {
      listType = new FullyQualifiedJavaType(introspectedTable.getBaseRecordType());
    } else if (introspectedTable.getRules().generatePrimaryKeyClass()) {
      listType = new FullyQualifiedJavaType(introspectedTable.getPrimaryKeyType());
    } else {
      throw new RuntimeException(getString("RuntimeError.12")); // $NON-NLS-1$
    }

    importedTypes.add(listType);
    returnType.addTypeArgument(listType);
    method.setReturnType(returnType);

    method.setName(introspectedTable.getSelectByExampleStatementId());
    method.addParameter(new Parameter(type, "example")); // $NON-NLS-1$

    context.getCommentGenerator().addGeneralMethodComment(method, introspectedTable);

    addMapperAnnotations(interfaze, method);

    if (context
        .getPlugins()
        .clientSelectByExampleWithoutBLOBsMethodGenerated(method, interfaze, introspectedTable)) {
      interfaze.addImportedTypes(importedTypes);
      interfaze.addMethod(method);
    }
  }
  @Override
  public void addInterfaceElements(Interface interfaze) {
    Set<FullyQualifiedJavaType> importedTypes = new TreeSet<FullyQualifiedJavaType>();
    FullyQualifiedJavaType type = new FullyQualifiedJavaType(introspectedTable.getExampleType());
    importedTypes.add(type);

    Method method = new Method();
    method.setVisibility(JavaVisibility.PUBLIC);
    method.setReturnType(FullyQualifiedJavaType.getIntInstance());
    method.setName(introspectedTable.getDeleteByExampleStatementId());
    method.addParameter(new Parameter(type, "condition")); // $NON-NLS-1$

    context.getCommentGenerator().addGeneralMethodComment(method, introspectedTable);

    addMapperAnnotations(interfaze, method);

    if (context
        .getPlugins()
        .clientDeleteByExampleMethodGenerated(method, interfaze, introspectedTable)) {
      interfaze.addImportedTypes(importedTypes);
      interfaze.addMethod(method);
    }
  }
  /**
   * 添加接口
   *
   * @param tableName
   * @param files
   */
  protected void addService(
      Interface interface1,
      IntrospectedTable introspectedTable,
      String tableName,
      List<GeneratedJavaFile> files) {

    interface1.setVisibility(JavaVisibility.PUBLIC);

    // 添加方法
    Method method = countByExample(introspectedTable, tableName);
    method.removeAllBodyLines();
    interface1.addMethod(method);

    method = selectByPrimaryKey(introspectedTable, tableName);
    method.removeAllBodyLines();
    interface1.addMethod(method);

    method = selectByExample(introspectedTable, tableName);
    method.removeAllBodyLines();
    interface1.addMethod(method);

    if (enableDeleteByPrimaryKey) {
      method = getOtherInteger("deleteByPrimaryKey", introspectedTable, tableName, 2);
      method.removeAllBodyLines();
      interface1.addMethod(method);
    }
    if (enableUpdateByPrimaryKeySelective) {
      method = getOtherInteger("updateByPrimaryKeySelective", introspectedTable, tableName, 1);
      method.removeAllBodyLines();
      interface1.addMethod(method);
    }
    if (enableUpdateByPrimaryKey) {
      method = getOtherInteger("updateByPrimaryKey", introspectedTable, tableName, 1);
      method.removeAllBodyLines();
      interface1.addMethod(method);
    }
    if (enableDeleteByExample) {
      method = getOtherInteger("deleteByExample", introspectedTable, tableName, 3);
      method.removeAllBodyLines();
      interface1.addMethod(method);
    }
    if (enableUpdateByExampleSelective) {
      method = getOtherInteger("updateByExampleSelective", introspectedTable, tableName, 4);
      method.removeAllBodyLines();
      interface1.addMethod(method);
    }
    if (enableUpdateByExample) {
      method = getOtherInteger("updateByExample", introspectedTable, tableName, 4);
      method.removeAllBodyLines();
      interface1.addMethod(method);
    }
    if (enableInsert) {
      method = getOtherInsertboolean("insert", introspectedTable, tableName);
      method.removeAllBodyLines();
      interface1.addMethod(method);
    }
    if (enableInsertSelective) {
      method = getOtherInsertboolean("insertSelective", introspectedTable, tableName);
      method.removeAllBodyLines();
      interface1.addMethod(method);
    }

    GeneratedJavaFile file =
        new GeneratedJavaFile(
            interface1,
            project,
            context.getProperty(PropertyRegistry.CONTEXT_JAVA_FILE_ENCODING),
            context.getJavaFormatter());
    files.add(file);
  }