Mybatis單個參數的if判斷(針對異常:There is no getter for property..)

咱們都知道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

相關文章
相關標籤/搜索