mybatis使用InsertProvider注解报错解决过程
目前项目在使用mybatis,并且是使用注解的方式。在使用InsertProvider注解的时候报了一下的错误:org.apache.ibatis.builder.BuilderException: Could not find value method on SQL annotation. Cause: org.apache.ibatis.builder.BuilderException: Error creating SqlSource for SqlProvider. Method........
注解是如下这个样子的
@InsertProvider(method = "insertlist",type=SqlProvider.class)
public int insertInnerTable(List list,String dbTable);
思路是要写一个通用的插入一个集合的方法,但是在执行的时候就报了上面的错误。在网上查资料未果。于是只能自己动手,丰衣足食了。一步步跟断点,跟到mybatis了报错的方法中,发现了如下的代码
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);
}
注意标黄的位置,终于发现导致错误的罪魁祸首了,原来是这里限制了参数的个数,不能操作两个参数的啊。
于是将方法以及注解改为如下形式
@InsertProvider(method = "insert",type=SqlProvider.class)
public int insert(SqlContext sqlContext);
在SqlProvider中对应的方法为
public String insert(SqlContext sqlContext){
........
}
至此问题解决
阅读更多- MyBatis注解的巧妙使用---@InsertProvider,@UpdateProvider,@DeleteProvider和@SelectProvider
- MyBatis注解开发-@Insert和@InsertProvider
- mybatis使用过程遇到的一些问题及解决方法
- mybatis 使用dblink 执行insert 报ora-22816 returning 子句不支持的功能问题解决方法
- 使用maven的mybatis-generator生成实例和mapping过程以及可能出现问题解决
- mybatis3.3@sqlprovider注解使用的一点点坑
- mybatis使用注解往postgresql数据库表insert数据[主键自增]的写法
- mybatis使用@SelectProvider构建动态语句,多个参数(不使用@param注解情况下),3.4.2版本之后报错 BindingException: Parameter 'arg0'
- MyBatis注解开发-@Insert和@InsertProvider
- 记录一次bug解决过程:mybatis中$和#的使用
- mybatis中关于使用注解来完成动态SQL拼接的解决办法
- BizTalk Server 2006使用过程中常见的问题及其解决办法
- OGR使用过程中的相关问题及解决 C#
- Eclipse RCP使用Spring时遇到的问题及解决过程
- flex4 + spring + blazeds , 使用anonation(注解)机制,利用push技术的实现例子和过程。
- Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决
- h2 使用过程中 Lock file modified in the future 问题的解决
- SQL SERVER问题解决:已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: 命名管道提供程序, error: 0 - 管道的另一端上无任何进程。)
- 在SharePoint 2010 中使用REST时提示:未能加载类型System.Data.Services.Providers.IDataServiceUpdateProvider的解决办法