docs: private MapperTemplate fromMapperClass(Class<?> mapperClass) {
          Method[] methods = mapperClass.getDeclaredMethods();
          Class<?> templateClass = null;
          Class<?> tempClass = null;
          Set<String> methodSet = new HashSet<String>();
          for (Method method : methods) {
              if (method.isAnnotationPresent(SelectProvider.class)) {
                  SelectProvider provider = method.getAnnotation(SelectProvider.class);
                  tempClass = provider.type();
                  methodSet.add(method.getName());
              } else if (method.isAnnotationPresent(InsertProvider.class)) {
                  InsertProvider provider = method.getAnnotation(InsertProvider.class);
                  tempClass = provider.type();
                  methodSet.add(method.getName());
              } else if (method.isAnnotationPresent(DeleteProvider.class)) {
                  DeleteProvider provider = method.getAnnotation(DeleteProvider.class);
                  tempClass = provider.type();
                  methodSet.add(method.getName());
              } else if (method.isAnnotationPresent(UpdateProvider.class)) {
                  UpdateProvider provider = method.getAnnotation(UpdateProvider.class);
                  tempClass = provider.type();
                  methodSet.add(method.getName());
              }
              if (templateClass == null) {
                  templateClass = tempClass;
              } else if (templateClass != tempClass) {
                  throw new MapperException("一个通用Mapper中只允许存在一个MapperTemplate子类!");
              }
          }
          if (templateClass == null || !MapperTemplate.class.isAssignableFrom(templateClass)) {
              templateClass = EmptyProvider.class;
          }
          MapperTemplate mapperTemplate = null;
          try {
              mapperTemplate = (MapperTemplate) templateClass.getConstructor(Class.class, MapperHelper.class).newInstance(mapperClass, this);
          } catch (Exception e) {
              throw new MapperException("实例化MapperTemplate对象失败:" + e.getMessage());
          }
          //注册方法
          for (String methodName : methodSet) {
              try {
                  mapperTemplate.addMethodMap(methodName, templateClass.getMethod(methodName, MappedStatement.class));
              } catch (NoSuchMethodException e) {
                  throw new MapperException(templateClass.getCanonicalName() + "中缺少" + methodName + "方法!");
              }
          }
          return mapperTemplate;
      }