MyBatis在使用单个参数进行if判断的时候,如果直接使用参数本身,则会报出:There is no getter for property named ... 的异常,比如
错误的代码:
<select id="findByFid" resultType="category" parameterType="integer">
SELECT *
FROM category
<where>
<if test="fid == null">fid IS NULL</if>
<if test="fid != null">fid = #{fid}</if>
</where>
</select>
这样写就会报出:Internal error : nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'fid' in 'class java.lang.Integer'的异常。
原因:因为Mybatis有用于单个参数的判断有自己的内置对象_parameter
正确的方法是应该用“_parameter”来代替需要判断的参数:
<select id="findByFid" resultType="category" parameterType="integer">
SELECT *
FROM category
<where>
<if test="_parameter == null">fid IS NULL</if>
<if test="_parameter != null">fid = #{fid}</if>
</where>
</select>
当然,还有一种方法就是在Mapper接口中给定参数名,如:
List<Category> findByFid(Integer fid);
更改为:
List<Category> findByFid(@Param("fid") Integer fid);
这样xml中就可以使用最上面的那种写法,直接使用参数名做判断了,但是注意要去掉parameterType属性。
附送MyBatis官方中文手册:http://www.mybatis.org/mybatis-3/zh/index.html
完毕!