温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MyBatis中@param注解参数类型错误异常如何解决

发布时间:2021-02-07 18:06:04 来源:亿速云 阅读:562 作者:Leah 栏目:开发技术

这篇文章给大家介绍MyBatis中@param注解参数类型错误异常如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

解决办法

我感觉可能使用用到了mybatis的关键字,所以就把threshold换了个名字,果然好了。

问题原因

某些关键词,mybatis会认为是某种类型,下面列出来一些,后面发现再补充。

size, threshold, modCount是int类型

loadFactor是float类型

补充:mybatis使用@Param的坑

在mybatis中@Param注解的作用是为参数指定一个名称,在mapper文件中使用,而不是使用mybatis的arguments[0,1…]代替。但是在非动态的mapper——mybatis根据mapper接口创建实现类,@param注解是不起作用的。

阅读mybatis的源码得知,检查@param注解的方法:

private boolean hasNamedParams(Method method) {    boolean hasNamedParams = false;    final Object[][] paramAnnos = method.getParameterAnnotations();    for (Object[] paramAnno : paramAnnos) {     for (Object aParamAnno : paramAnno) {      if (aParamAnno instanceof Param) {       hasNamedParams = true;       break;      }     }    }    return hasNamedParams;   }

此方法位于 org.apache.ibatis.binding.MapperMethod 的内部类 MethodSignature 中。

根据源码一步一步的递归:

MethodSignature的构造方法——>MapperMethod的构造方法——>MapperProxy的cachedMapperMethod 和invoke方法 ——> MapperProxyFactory中的 newInstance 方法。

@SuppressWarnings("unchecked")  protected T newInstance(MapperProxy<T> mapperProxy) { //jdk的动态代理生成mapper对象   return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy);  }  public T newInstance(SqlSession sqlSession) { //MapperProxy实现了Invocation接口   final MapperProxy<T> mapperProxy = new MapperProxy<T>(sqlSession, mapperInterface, methodCache);   return newInstance(mapperProxy);  }

在整合spring与mybatis,使用spring提供的sqlSessionTemplate进行查询时,没有从MapperRegistry的mapper缓存集合中取mapper,而是直接使用配置的sqlSessionTemplate。

所以这种清况下,@param注解是无效的。

关于MyBatis中@param注解参数类型错误异常如何解决就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI