您的位置:首页 > 移动开发

Mybatis跳坑:Mapper注入单个基本类型参数失败There is no getter for property named

2018-02-10 19:10 1376 查看

问题描述

后台执行sql操作时报错:

<pre>javax.servlet.ServletException: org.mybatis.spring.MyBatisSystemException:
nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for
property named 'colunmnId' in 'class java.lang.Integer'
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:391)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
....


问题分析

产生现象:select查询语句使用 parameter = string (基本数据类型)参数,嵌套在if动态sql标签上,导致此处无法注入参数。





该报错导致后台在sql语句执行时无法注入前端传来的参数。

解决办法

将if动态sql语句标签中的参数名替换成”_parameter” 即可



分析错误原因(刨根问底)

我们去分析源码,在动态sql语句注入的部分,mybatis执行DynamicSqlSource类中的getBoundSql方法,其中对前端传过来的参数进行包装。见下面的new DynamicContext(configuration, parameterObject);



紧接着我们进入此构造函数去看里面的实现:会发现mybatis将参数以”_parameter”命名装载在一个ContextMapz对象当中,所以我们使用”_parameter”去调用参数是OK的。



啰嗦

源码分析到这里显然是不够的,但是再往下深入理解就要涉及到mybatis的运行原理了,这并不在跳出此坑的范围之内,大家感兴趣可以自己去阅读源码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Mybatis
相关文章推荐