MyBatis在使用单个参数进行if判断
程序员文章站
2022-04-26 14:38:53
...
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'的异常。
正确的方法是应该用“_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
完毕!
上一篇: 弹性外卖配送时间,外卖成本上涨谁买单
下一篇: 没有大粪做的臊子
推荐阅读
-
Mybatis传单个参数和
标签同时使用的问题及解决方法 -
使用Interlocked在多线程下进行原子操作,无锁无阻塞的实现线程运行状态判断
-
Java~在使用isAlive时, 将线程对象已构造参数的形式传递给Thread对象时进行start启动时, 使用this和Thread.currentThread的差异
-
在angularjs中如何使用$stateProvider的路由进行传参数
-
mybatis使用annotation在mysql,oracle上进行批量处理
-
mybatis使用annotation在mysql,oracle上进行批量处理
-
react中使用Link在不同路由之间进行参数传值
-
MyBatis在使用单个参数进行if判断
-
mybatis中使用Integer类型的参数
判断问题 -
使用Interlocked在多线程下进行原子操作,无锁无阻塞的实现线程运行状态判断