您好,登錄后才能下訂單哦!
這篇文章主要介紹“MyBatis動態<if>標簽如何使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“MyBatis動態<if>標簽如何使用”文章能幫助大家解決問題。
查詢參數Param如下。
public class Param { private int id; private String level; private int times; private String timestamp; // 省略get和set }
語句如下。
<select id="queryEvents" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE id=#{id} <if test="level != null and level != ''"> AND e_level=#{level} </if> </select>
上述是判斷字符串是否為空(null或者空串),不為空時,為WHERE子句添加額外的條件。
通過<if>標簽判斷字符串是否為空,是<if>標簽使用頻率最高的用法,但是有時也會通過<if>標簽來判斷字符串的值,這里有多種寫法,下面給出正確寫法,推薦寫法和錯誤寫法。
正確寫法1
<select id="queryEvents" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE id=#{id} <if test="level == 'secondary'"> AND e_times>10 </if> </select>
注意''單引號中一定需要是多個字符,如果只有一個字符,會報錯。
正確寫法2
<select id="queryEvents" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE id=#{id} <if test="level == 'secondary'.toString()"> AND e_times>10 </if> </select>
這種寫法不限制''單引號中的字符個數,一個或多個都可以。
推薦寫法
<select id="queryEvents" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE id=#{id} <if test='level == "secondary"'> AND e_times>10 </if> </select>
推薦外層用單引號,內層用雙引號的寫法,能少踩很多坑。
特別注意:錯誤寫法
<select id="queryEvents" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE id=#{id} <if test="level == 'A'"> AND e_times>10 </if> </select>
這種寫法會報錯,因為像'A'這種單個字符的情況會被判定為字符,所以MyBatis認為字符串在與字符做比較,從而報錯。但是如果是'AA'或者'A'.toString() 這種,就會被判定為字符串,就正常。
查詢參數Param如下。
public class Param { private int id; private String level; private int times; private String timestamp; // 省略get和set }
語句如下。
<select id="queryEvents3" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE e_level=#{level} <if test="times != null"> AND e_times>#{times} </if> </select>
通過<if>標簽也可以對數字判空,同時<if>標簽也可以判斷數字的值,這里有多種寫法,下面給出正確寫法,推薦寫法和錯誤寫法。
正確寫法1
<select id="queryEvents2" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE e_level=#{level} <if test="times > '10'"> AND e_times>#{times} </if> </select>
注意''單引號中一定需要是多個數字。
正確寫法2
<select id="queryEvents2" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE e_level=#{level} <if test="times > '0'.toString()"> AND e_times>#{times} </if> </select>
這種寫法不限制''單引號中的數字個數,一個或多個都可以。
正確寫法3
<select id="queryEvents" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE e_level=#{level} <if test="times > 0"> AND e_times>#{times} </if> </select>
判斷條件可以直接寫數字。
推薦寫法
<select id="queryEvents2" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE e_level=#{level} <if test='times > "0"'> AND e_times>#{times} </if> </select>
推薦外層用單引號,內層用雙引號的寫法,能少踩很多坑。
錯誤寫法
<select id="queryEvents" resultMap="eventResultMap"> SELECT id, e_name, e_times, e_level FROM event WHERE e_level=#{level} <if test="times > '0'"> AND e_times>#{times} </if> </select>
'0'這種單個數字會被判定為字符,而字符'0'的ASCII值是48,所以times為49及以上時,才滿足times > '0',所以這里有坑,切記。
關于“MyBatis動態<if>標簽如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。