MyBatis是一個基于java的持久層框架,支持普通SQL查詢,存儲過程及高級映射。它避免了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的封裝。并且可以使用簡單的XML或注解來配置和映射原生信息。
MyBatis最強大的功能之一就是動態SQL語句功能,傳統JDBC的方法在進行組合復雜的SQL語句的時候,需要去拼接,難免會出現一不留神少了個空格、逗號導致程序錯誤。MyBatis的動態SQL功能正好解決了這個問題,通過在XML文件里配置,可以非常靈活的組合SQL語句,提高開發效率。
1.if標簽
if標簽可以用在很多類型的SQL語句中,下面先看一個很簡單的例子。
<select id="UserAll"resultType="user">
select * from user username=#{username}
</select>
如果我們傳入的值是null,這條語句就很可能報錯或者查詢結果為空。因此我們需要加入if標簽先進行判斷,如果值為null或者空字符串時,不會將此條件加入查詢語句中,增加了靈活性。
<select id="UserAll"resultType="user">
select * from user where
<if test=" username!= null and username!= '' ">
username = #{username}
</if>
</select>
2.if+set更新語句
當update語句中沒有使用if標簽時,如果有一個參數為null,都會導致修改之后這個參數為空或報錯。
當在update語句中使用if標簽時,如果前面的if沒有執行,則或導致逗號多余錯誤。使用set標簽可以將動態的配置SET標簽,去除追加到條件末尾的任何不相關的逗號。
使用if+set標簽執行修改后,如果某個字段為null則不會更新這個字段。
<update id="updateUser"parameterType="com.lzyim.entity.User">
update user
<set>
<if test="name != null">username = #{ username},</if>
<if test="password != null">password =#{password},</if>
</set>
where id = #{id}
</update>