<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 users
WHERE id IN
<foreach collection="idList" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<foreach>
标签将会迭代idList
中的整数,并将它们用于生成IN子句,从而实现根据多个ID查询用户的功能。