咱們都知道mybatis在進行參數判斷的時候,直接能夠用 就能夠了,以下:java
一、常規代碼sql
<sql id="query_items_id"> <if test="id != null"> id = #{VALUE} </if> </sql> <select id="findItemsById" parameterType="com.zd.pojo.ItemsCustom" resultType="com.zd.pojo.ItemsCustom"> SELECT * FROM items <where> <include refid="query_items_id"/> </where> </select>
可是單個參數和多參數的判斷有個不一樣點,當咱們的入參爲entity實體,或者map的時候,使用if 參數判斷沒任何問題。apache
可是當咱們的入參爲java.lang.Integer 或者 java.lang.String的時候,這時候就須要注意一些事情了mybatis
具體代碼以下(我們看着代碼說,先展現錯誤代碼):code
二、錯誤代碼xml
<sql id="query_items_id"> <if test="id != null"> id = #{VALUE} </if> </sql> <select id="findItemsById" parameterType="int" resultType="com.zd.pojo.ItemsCustom"> SELECT * FROM items <where> <include refid="query_items_id"/> </where> </select>
上述代碼存在一些問題,首先入參是java.lang.Integer, 而不是map或者實體的入參方式,對於這類單個入參而後用if判斷的,mybatis有本身的內置對象,對象
若是你在if判斷裏面 寫的是你的入參的對象名,那就報異常:Internal error : nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'langId' in 'class java.lang.Integer'get
三、正確代碼:it
這裏就涉及到mybatis的內置對象_parameter,單個參數判斷的時候,就不像一、 2那樣直接用參數對象名判斷了。還有就是數據類型最好加上io