Mybatis跳坑:Mapper注入單個基本類型參數失敗There is no getter for property named


問題描述

后台執行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標簽上,導致此處無法注入參數。
接收參數類型
if動態sql注入
該報錯導致后台在sql語句執行時無法注入前端傳來的參數。

解決辦法

將if動態sql語句標簽中的參數名替換成”_parameter” 即可
這里寫圖片描述

分析錯誤原因(刨根問底)

我們去分析源碼,在動態sql語句注入的部分,mybatis執行DynamicSqlSource類中的getBoundSql方法,其中對前端傳過來的參數進行包裝。見下面的new DynamicContext(configuration, parameterObject);
這里寫圖片描述

緊接着我們進入此構造函數去看里面的實現:會發現mybatis將參數以”_parameter”命名裝載在一個ContextMapz對象當中,所以我們使用”_parameter”去調用參數是OK的。
這里寫圖片描述

啰嗦

源碼分析到這里顯然是不夠的,但是再往下深入理解就要涉及到mybatis的運行原理了,這並不在跳出此坑的范圍之內,大家感興趣可以自己去閱讀源碼。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com