mybatis出现了*There is no getter for property named '*' in 'class j

今天用mybatis突然出现了 There is no getter for property named ‘code’ in ‘class java.lang.String 的错误。我一看我的接口和XML文件写的没有问题啊。后来才发现有的版本的mybatis不能直接传String.

之前的代码:

  1. //接口
  2. public String getNameByCode (String code);
  3. //XML
  4. <select id="isCargoBillNoExist" resultType="String" parameterType="String">
  5. select name from strue where 1=1
  6. <if test="code != null && code !=''" >
  7. and code = #{code,jdbcType=VARCHAR}
  8. if>
  9. select>

然后执行报: There is no getter for property named ‘code’ in class java.lang.String。

原因:Mybatis默认采用OGNL解析参数,所以会自动采用对象树的形式取 string.xxx 值,如果没在在方法中定义,则会抛异常报错。

正确的应该这样

第一种:修改接口 添加@Param(value=”code”)

  1. //接口
  2. public String getNameByCode (@Param(value="code")String code);
  3. //XML
  4. <select id="isCargoBillNoExist" resultType="String" parameterType="String">
  5. select name from strue where 1=1
  6. <if test="code != null && code !=''" >
  7. and code = #{code,jdbcType=VARCHAR}
  8. if>
  9. select>

第二种:修改XML 用“_code”的形式

  1. //接口
  2. public String getNameByCode (String code);
  3. //XML
  4. <select id="isCargoBillNoExist" resultType="String" parameterType="String">
  5. select name from strue where 1=1
  6. <if test="_code != null && _code !=''" >
  7. and code = #{_code,jdbcType=VARCHAR}
  8. if>
  9. select>