`
cjm0000000
  • 浏览: 32167 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Mybatis statement-builders文档的坑

阅读更多

前几天把Mybatis升级到3.2.2,发现动态SQL的SqlBuilder/SelectBuilder这几个类应经被弃用,取而代之的是一个叫AbstractSQL的抽象类,打开看源码(什么注释都没有。。。);翻了半天官方文档,发现他有个默认的实现SQL类,新的Mybatis可以通过SQL类来构造动态SQL,详情请见官方文档:

http://mybatis.github.io/mybatis-3/statement-builders.html

 

在参考他的文档的时候,遇到一个奇怪的问题(我参考的是下面这段):

// With conditionals (note the final parameters, required for the anonymous inner class to access them)
public String selectPersonLike(final String id, final String firstName, final String lastName) {
  return new SQL() {{
    SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME");
    FROM("PERSON P");
    if (id != null) {
      WHERE("P.ID like ${id}");
    }
    if (firstName != null) {
      WHERE("P.FIRST_NAME like ${firstName}");
    }
    if (lastName != null) {
      WHERE("P.LAST_NAME like ${lastName}");
    }
    ORDER_BY("P.LAST_NAME");
  }}.toString();
}

 

在我运行这段代码的时候,会报错:org.apache.ibatis.builder.BuilderException

 

通过翻看源码org.apache.ibatis.builder.annotation.ProviderSqlSource

 

终于知道了答案:

 

 public ProviderSqlSource(Configuration config, Object provider) {
    String providerMethodName = null;
    try {
      this.sqlSourceParser = new SqlSourceBuilder(config);
      this.providerType = (Class<?>) provider.getClass().getMethod("type").invoke(provider);
      providerMethodName = (String) provider.getClass().getMethod("method").invoke(provider);

      for (Method m : this.providerType.getMethods()) {
        if (providerMethodName.equals(m.getName())) {
          if (m.getParameterTypes().length < 2
              && m.getReturnType() == String.class) {
            this.providerMethod = m;
            this.providerTakesParameterObject = m.getParameterTypes().length == 1;
          }
        }
      }
    } catch (Exception e) {
      throw new BuilderException("Error creating SqlSource for SqlProvider.  Cause: " + e, e);
    }
    if (this.providerMethod == null) {
      throw new BuilderException("Error creating SqlSource for SqlProvider. Method '"
          + providerMethodName + "' not found in SqlProvider '" + this.providerType.getName() + "'.");
    }
  }

 上面代码10-11行指出:方法返回值必须是String,而且参数只能是0或者一个。于是把上面的一窜参数改成:final Map<String, Object> paramMap,测试通过,mybatis会自动把参数封装到Map里面去。

 

官方文档真是坑爹,希望后面的伙伴们少走弯路。

 

本文出自ITEYE BLOG,转载请注明出处:

http://qurey.iteye.com/blog/1944785

分享到:
评论

相关推荐

    mybatis-spring-2.0.0-API文档-中文版.zip

    赠送原API文档:mybatis-spring-2.0.0-javadoc.jar; 赠送源代码:mybatis-spring-2.0.0-sources.jar; 赠送Maven依赖信息文件:mybatis-spring-2.0.0.pom; 包含翻译后的API文档:mybatis-spring-2.0.0-javadoc-API...

    mybatis-plus-annotation-3.5.1-API文档-中文版.zip

    赠送原API文档:mybatis-plus-annotation-3.5.1-javadoc.jar; 赠送源代码:mybatis-plus-annotation-3.5.1-sources.jar; 赠送Maven依赖信息文件:mybatis-plus-annotation-3.5.1.pom; 包含翻译后的API文档:...

    mybatis-plus-extension-3.5.1-API文档-中英对照版.zip

    赠送原API文档:mybatis-plus-extension-3.5.1-javadoc.jar; 赠送源代码:mybatis-plus-extension-3.5.1-sources.jar; 赠送Maven依赖信息文件:mybatis-plus-extension-3.5.1.pom; 包含翻译后的API文档:mybatis-...

    MyBatis-Plus入门+MyBatis-Plus文档手册 中文pdf高清版.rar

    mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中...《MyBatis-Plus入门文档》主要介绍了MyBatis-Plus入门使用,以及关于mybatis-plus的更多介绍及特性,感兴趣的可以下载学习一下

    mybatis-plus-boot-starter-3.5.1-API文档-中文版.zip

    赠送原API文档:mybatis-plus-boot-starter-3.5.1-javadoc.jar; 赠送源代码:mybatis-plus-boot-starter-3.5.1-sources.jar; 赠送Maven依赖信息文件:mybatis-plus-boot-starter-3.5.1.pom; 包含翻译后的API文档...

    mybatis-plus-core-3.1.0-API文档-中英对照版.zip

    赠送原API文档:mybatis-plus-core-3.1.0-javadoc.jar; 赠送源代码:mybatis-plus-core-3.1.0-sources.jar; 赠送Maven依赖信息文件:mybatis-plus-core-3.1.0.pom; 包含翻译后的API文档:mybatis-plus-core-3.1.0...

    mybatis-plus-annotation-3.1.0-API文档-中文版.zip

    赠送原API文档:mybatis-plus-annotation-3.1.0-javadoc.jar; 赠送源代码:mybatis-plus-annotation-3.1.0-sources.jar; 赠送Maven依赖信息文件:mybatis-plus-annotation-3.1.0.pom; 包含翻译后的API文档:...

    mybatis-plus-boot-starter-3.1.0-API文档-中文版.zip

    赠送原API文档:mybatis-plus-boot-starter-3.1.0-javadoc.jar; 赠送源代码:mybatis-plus-boot-starter-3.1.0-sources.jar; 赠送Maven依赖信息文件:mybatis-plus-boot-starter-3.1.0.pom; 包含翻译后的API文档...

    mybatis-generator-core-1.3.7-API文档-中文版.zip

    赠送原API文档:mybatis-generator-core-1.3.7-javadoc.jar; 赠送源代码:mybatis-generator-core-1.3.7-sources.jar; 赠送Maven依赖信息文件:mybatis-generator-core-1.3.7.pom; 包含翻译后的API文档:mybatis-...

    mybatis-plus-boot-starter-3.5.1-API文档-中英对照版.zip

    赠送原API文档:mybatis-plus-boot-starter-3.5.1-javadoc.jar; 赠送源代码:mybatis-plus-boot-starter-3.5.1-sources.jar; 赠送Maven依赖信息文件:mybatis-plus-boot-starter-3.5.1.pom; 包含翻译后的API文档...

    mybatis-spring-boot-autoconfigure-1.3.2-API文档-中英对照版.zip

    赠送原API文档:mybatis-spring-boot-autoconfigure-1.3.2-javadoc.jar; 赠送源代码:mybatis-spring-boot-autoconfigure-1.3.2-sources.jar; 赠送Maven依赖信息文件:mybatis-spring-boot-autoconfigure-1.3.2....

    MyBatis-Plus 的官方示例(mybatis-plus-samples-master.zip)

    本工程为 MyBatis-Plus 的官方示例,项目结构如下: mybatis-plus-sample-quickstart: 快速开始示例 mybatis-plus-sample-quickstart-springmvc: 快速开始示例(Spring MVC版本) mybatis-plus-sample-reduce-...

    mybatis-generator-core-1.3.5-API文档-中文版.zip

    赠送原API文档:mybatis-generator-core-1.3.5-javadoc.jar; 赠送源代码:mybatis-generator-core-1.3.5-sources.jar; 包含翻译后的API文档:mybatis-generator-core-1.3.5-javadoc-API文档-中文(简体)版.zip ...

    mybatis-paginator-1.2.15-API文档-中文版.zip

    赠送原API文档:mybatis-paginator-1.2.15-javadoc.jar; 赠送源代码:mybatis-paginator-1.2.15-sources.jar; 赠送Maven依赖信息文件:mybatis-paginator-1.2.15.pom; 包含翻译后的API文档:mybatis-paginator-...

    mybatis-spring-boot-autoconfigure-1.3.2-API文档-中文版.zip

    赠送原API文档:mybatis-spring-boot-autoconfigure-1.3.2-javadoc.jar; 赠送源代码:mybatis-spring-boot-autoconfigure-1.3.2-sources.jar; 赠送Maven依赖信息文件:mybatis-spring-boot-autoconfigure-1.3.2....

    mybatis-spring-2.0.5-API文档-中英对照版.zip

    赠送原API文档:mybatis-spring-2.0.5-javadoc.jar; 赠送源代码:mybatis-spring-2.0.5-sources.jar; 赠送Maven依赖信息文件:mybatis-spring-2.0.5.pom; 包含翻译后的API文档:mybatis-spring-2.0.5-javadoc-API...

    mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip

    mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip ...

    mybatis-spring-2.0.3-API文档-中文版.zip

    赠送原API文档:mybatis-spring-2.0.3-javadoc.jar; 赠送源代码:mybatis-spring-2.0.3-sources.jar; 赠送Maven依赖信息文件:mybatis-spring-2.0.3.pom; 包含翻译后的API文档:mybatis-spring-2.0.3-javadoc-API...

    mybatis-plus-extension-3.1.0-API文档-中文版.zip

    赠送原API文档:mybatis-plus-extension-3.1.0-javadoc.jar; 赠送源代码:mybatis-plus-extension-3.1.0-sources.jar; 赠送Maven依赖信息文件:mybatis-plus-extension-3.1.0.pom; 包含翻译后的API文档:mybatis-...

    mybatis-generator-core-1.3.7-API文档-中英对照版.zip

    赠送原API文档:mybatis-generator-core-1.3.7-javadoc.jar; 赠送源代码:mybatis-generator-core-1.3.7-sources.jar; 赠送Maven依赖信息文件:mybatis-generator-core-1.3.7.pom; 包含翻译后的API文档:mybatis-...

Global site tag (gtag.js) - Google Analytics