mybatis xml文件中传入参数和if结合使用时要注意的地方
mybatis中如果用了if那么传进来的参数不能直接单独传入,要封装到map或bo中传入,要么去了if
(if test表达式是从实体的get方法获取的,单传的参数没有实体就没有get方法)
mybatis xml文件中传入参数和if结合使用时要注意的地方:
这里直接传入int但是又用了if所以出错
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'customerKey' in 'class java.lang.Integer'
<select id="getYJSL" parameterType="Integer" resultType="int">
SELECT count(*) yjsl
FROM tb_con_obj A, TB_CON_ORD B
WHERE A.CONOBJ_KEY = B.CONOBJ_KEY
AND A.IS_CONFERPRICE = 'Y'
AND B.ORDER_STATUS = 'A'
AND A.CONOBJ_STATUS <![CDATA[<>]]> 'E'
<if test="customerKey !=null and customerKey!='' ">
AND (B.CUSTOMER_KEY = #{customerKey} or a.customer_key = #{customerKey})
</if>
</select>
====
使用SpringMVC+Mybatis框架写项目的时候,在mapper里面的sql语句处出现了这个错误
<if test="agoTime != null">
and updateTime > #{agoTime}
</if>
原因是:
如果将and语句中的#{属性}写在if语句中,mybatis会去对象中从它的get方法中取值,而我之前是直接传递的值,并没有封装对象。
解决办法:
将属性封装到一个对象中,设置其get方法即可