1. 程式人生 > >mybatis報錯 There is no getter for property named 'xx' in 'class java.lang.String

mybatis報錯 There is no getter for property named 'xx' in 'class java.lang.String

今天在寫程式碼的時候突然遇到這等怪事,用了<if>或者<when>之類的判斷語句,就導致報錯:

 There is no getter for property named 'xx' in 'class java.lang.String

不明白到底怎麼回事,去網上找到有人的解決方案是:

發現不能將引數設為bean裡的名稱,如果傳入型別為String型別,則引數需統一修改為[_parameter],修改後的sql語句如下(不管你的引數是什麼,都要改成"_parameter")

<select id="selectCategoryList" parametertype="java.lang.String" resulttype="MstCategoryBean">
SELECT
category_id AScategoryId,
category_name AScategoryName,
view_orderby ASviewOrderby
FROM
mst_category
WHERE
del_flg =0

and
parent_category_id = #{_parameter}

</select>

當然也有人分析原因,是if或when標籤是針對JAVABEAN或者MAP的,String不能用標籤,因此建議去掉if或when標籤,但也是不可行的。

上面改成_parameter的做法,我雖然沒嘗試,但發現其他網友也遇到了除String的,如Integer的相同的問題:

There is no getter for property named 'id' in 'class java.lang.Integer

這樣估計就上述方法就不可以了吧,我暫時沒試。

不過我的方法是在Mapper介面的方法引數上使用@Param註解指定具體的引數名:

package com.xxxx.xxx.mapper;
@MapperScan
public interface XxxxMapper{
   public void selectUser(

@Param("userName")String userName);
}

<select id="selectUser" resulttype="xxx.xxx.xxx.User">
SELECT
user_idASuserId,
user_nameASuserName,
user_orderbyASuserOrderby
FROM
t_user
WHERE
del_flg =0

<if test="userName!=null  and userName!=''">
and
user_name = #{userName}
</if>
</select>