03-MyBatis動態SQL

MyBatis動態SQL

MyBatis的動態SQL比較多,但是常用的也就幾個,包括if,where,set,choose.

if

if語句是條件判斷,例如判斷type不爲空,則增加type語句

<if test="type != null">type=#{type}</if>

where

在查詢語句中,我們經常需要根據給定的不同數據類型,查詢不同的語句,動態where此時正當用。

<select id="select" resultType="person">
    select * from person
    <where>
        <if test="type != null">type=#{type},</if>
        <if test="name != null">and name like #{name},</if>
    </where>
</select>
  • 如果where標籤結果不爲空,則自動在sql語句中添加where
  • 如果標籤內返回以and或者or開頭的話,and或者or會自動被剔除
  • 標籤內的最後一個,號會自動被剔除

set

<update id="update" parameterType="Person">
    update person
    <set>
        <if test="name != null">name=#{name},</if>
        <if test="pswd != null">pswd=#{pswd},</if>
        <if test="mobile != null">mobile=#{mobile},</if>
        <if test="nickname != null">nickname=#{nickname},</if>
        <if test="lastLoginTime != null">LastLoginTime=#{lastLoginTime},</if>
    </set>
    where nid=#{id}
</update>

set標籤的用法同where一致

choose

choose標籤比較像Java語句中是switch選擇語句

<select id="select" resultType="person">
    select * from person
     <where>
         <choose>
             <when test="name != null">name=#{name}</when>
             <when test="type != null">type=#{type}</when>
             <otherwise>id={id}</otherwise>
         </choose>
     </where>
</select>
  • choose相當於switch語句;
  • when相當於case;
  • otherwise相當於default;
  • 三者需要配合使用,完全一個完整的選擇語句

總結

動態SQL其實很簡單,就是基本的語句拼接,也可以在代碼中直接自己寫邏輯完成。MyBatis的動態SQL只是幫我們簡化了這個流程而已。這種東西,唯手熟爾!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章