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只是幫我們簡化了這個流程而已。這種東西,唯手熟爾!