docs: public void setSqlSource(MappedStatement ms) throws Exception {
          if (this.mapperClass == getMapperClass(ms.getId())) {
              throw new MapperException("请不要配置或扫描通用Mapper接口类：" + this.mapperClass);
          }
          Method method = methodMap.get(getMethodName(ms));
          try {
              //第一种，直接操作ms，不需要返回值
              if (method.getReturnType() == Void.TYPE) {
                  method.invoke(this, ms);
              }
              //第二种，返回SqlNode
              else if (SqlNode.class.isAssignableFrom(method.getReturnType())) {
                  SqlNode sqlNode = (SqlNode) method.invoke(this, ms);
                  DynamicSqlSource dynamicSqlSource = new DynamicSqlSource(ms.getConfiguration(), sqlNode);
                  setSqlSource(ms, dynamicSqlSource);
              }
              //第三种，返回xml形式的sql字符串
              else if (String.class.equals(method.getReturnType())) {
                  String xmlSql = (String) method.invoke(this, ms);
                  SqlSource sqlSource = createSqlSource(ms, xmlSql);
                  //替换原有的SqlSource
                  setSqlSource(ms, sqlSource);
              } else {
                  throw new MapperException("自定义Mapper方法返回类型错误,可选的返回类型为void,SqlNode,String三种!");
              }
          } catch (IllegalAccessException e) {
              throw new MapperException(e);
          } catch (InvocationTargetException e) {
              throw new MapperException(e.getTargetException() != null ? e.getTargetException() : e);
          }
      }