中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis中where標簽與if標簽怎么結合使用

發布時間:2023-03-09 14:44:07 來源:億速云 閱讀:111 作者:iii 欄目:開發技術

這篇文章主要介紹“Mybatis中where標簽與if標簽怎么結合使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Mybatis中where標簽與if標簽怎么結合使用”文章能幫助大家解決問題。

使用<where>標簽

select篩選出視圖對象的參數,用于給前端返回頁面參數使用。

	<sql id="selectFileVo">
        select file_id,
               uuid,
               file_name,
               file_url,
               status,
               create_time,
               update_time
        from file
    </sql>

以下代碼格式是正確,我們先觀察下and或者or的位置。

    <select id="selectFileList" parameterType="File" resultMap="FileResult">
        <include refid="selectFileVo"/>
        <where>
            <if test="fileName != null  and fileName != ''">
                and file_name like concat('%', #{fileName}, '%')
            </if>
            <if test="status != null  and status != ''">
                and status = #{status}
            </if>
            <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''">
                and create_time between #{params.beginCreateTime} and #{params.endCreateTime}
            </if>
        </where>
    </select>

再看一下錯誤的寫法;

    <select id="selectFileList" parameterType="File" resultMap="FileResult">
        <include refid="selectFileVo"/>
        <where>
            <if test="fileName != null  and fileName != ''">
                file_name like concat('%', #{fileName}, '%') and
            </if>
            <if test="status != null  and status != ''">
                status = #{status} and 
            </if>
            <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''">
                create_time between #{params.beginCreateTime} and #{params.endCreateTime}
            </if>
        </where>
    </select>

這時候運行該代碼,當beginCreateTimeendCreateTime為空時,我們會發現報錯SQL執行異常,原因是where多了一個and

總結

<if>標簽判斷失敗后, <where> 標簽關鍵字可以自動去除掉庫表字段賦值前面的and,不會去掉語句后面的and關鍵字,即<where> 標簽只會去掉<if> 標簽語句中的最開始的and關鍵字。所以上面的寫法(and寫在后面)是不符合mybatis規范的。

不使用<where>標簽

當不使用<where>標簽時,正確的寫法可以參考以下代碼:

<select id="selectFileList" parameterType="File" resultMap="FileResult">
        <include refid="selectFileVo"/>
        where 1=1 
        <if test="fileName != null  and fileName != ''">
            and file_name like concat('%', #{fileName}, '%')
        </if>
        <if test="status != null  and status != ''">
            and status = #{status}
        </if>
        <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''">
            and create_time between #{params.beginCreateTime} and #{params.endCreateTime}
        </if>
    </select>

此時我們發現and是寫在前面的,同時增加了1=1條件。

如果我們去掉1=1條件,同時去掉第一個<if>標簽的and

<select id="selectFileList" parameterType="File" resultMap="FileResult">
        <include refid="selectFileVo"/>
        where 
        <if test="fileName != null  and fileName != ''">
            file_name like concat('%', #{fileName}, '%')
        </if>
        <if test="status != null  and status != ''">
            and status = #{status}
        </if>
        <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''">
            and create_time between #{params.beginCreateTime} and #{params.endCreateTime}
        </if>
    </select>

這種情況下,當fileName為空時,sql語句中會出現where and這種錯誤的語法,最終導致sql執行異常。所以正確的代碼中,使用1=1條件,當fileName為空時,sql語句就會變成where 1=1 ,后面接不接and都能正確執行。

在不使用<where>標簽的情況下,and寫在后面,在where條件最后增加1=1判斷,原理和上面一樣,這里就不再贅述了。

關于“Mybatis中where標簽與if標簽怎么結合使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汝阳县| 措勤县| 嘉黎县| 南阳市| 略阳县| 宁强县| 湘乡市| 泰州市| 三河市| 同德县| 昂仁县| 湄潭县| 丹寨县| 郴州市| 太保市| 宝兴县| 安义县| 保定市| 稻城县| 安新县| 金沙县| 徐水县| 海安县| 蒙城县| 常宁市| 海南省| 荣昌县| 剑河县| 益阳市| 邵东县| 南昌市| 齐齐哈尔市| 樟树市| 泰安市| 绥滨县| 吕梁市| 平谷区| 兴安盟| 桓仁| 罗田县| 寿宁县|