文章目錄
- `<if>`標簽
- `<where>`標簽
- `<foreach>`標簽
<if>
標簽
<if>
標簽允許我們在SQL語句中添加條件判斷。
<if test="condition"><!-- 當條件滿足時執行的SQL語句 -->
</if>
其中,test
屬性是一個表達式,如果它的值為true,就會執行標簽內的SQL語句,否則會忽略。
<select id="findUsers" parameterType="map" resultType="User">SELECT * FROM users<where><if test="username != null">AND username = #{username}</if><if test="age != null">AND age = #{age}</if></where>
</select>
<where>
標簽用于包裹<if>
條件,如果username
和age
參數不為null,相應的條件語句會被包含在最終的SQL查詢中。
<where>
標簽
<where>
標簽用于將多個條件連接在一起,它會自動處理條件之間的邏輯關系(AND或OR),并且會在必要時去除不必要的AND或OR。
<select id="findUsers" parameterType="map" resultType="User">SELECT * FROM users<where><if test="username != null">AND username = #{username}</if><if test="age != null">AND age = #{age}</if></where>
</select>
如果username
和age
都不為null,最終生成的SQL語句會是合理的,不會出現多余的AND關鍵字。
<foreach>
標簽
<foreach>
標簽允許我們迭代一個集合,并在SQL語句中使用集合中的元素。
<foreach collection="collection" item="item" open="(" separator="," close=")"><!-- SQL語句中使用#{item}來引用集合中的元素 -->
</foreach>
其中,collection
屬性是要迭代的集合,item
屬性是集合中的每個元素,open
屬性是在迭代開始時添加的字符串,separator
屬性是在每個元素之間添加的分隔符,close
屬性是在迭代結束時添加的字符串。
<select id="findUsersByIdList" parameterType="map" resultType="User">SELECT * FROM usersWHERE id IN<foreach collection="idList" item="id" open="(" separator="," close=")">#{id}</foreach>
</select>
<foreach>
標簽將會迭代idList
中的整數,并將它們用于生成IN子句,從而實現根據多個ID查詢用戶的功能。