1. 使用<if>
进行条件查询
假设我们有一个用户表users
,包含字段id
, name
, age
。我们要根据名字和年龄来查找用户,但这两个条件都是可选的。
<select id="findUsers" parameterType="map" resultType="User">SELECT * FROM usersWHERE 1=1<if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if>
</select>
这里使用了1=1
作为固定的where子句,以便后续可以方便地添加更多的条件而不需要担心是否要加AND
。
2. 使用<choose>
, <when>
, <otherwise>
实现多条件选择
如果我们想要根据不同的条件选择不同的查询方式,比如按名字、年龄或者两者都查,我们可以这样写:
<select id="findUsersByCondition" parameterType="map" resultType="User">SELECT * FROM users<where><choose><when test="name != null">name = #{name}</when><when test="age != null">age = #{age}</when><otherwise>1=1</otherwise></choose></where>
</select>
3. 使用<foreach>
处理集合参数
当我们需要构建一个包含多个值的IN语句时,例如查询多个ID对应的记录,可以使用<foreach>
:
<select id="findUsersByIds" parameterType="list" resultType="User">SELECT * FROM usersWHERE id IN<foreach item="id" index="index" collection="list"open="(" separator="," close=")">#{id}</foreach>
</select>
这里collection="list"
指定了传入的是一个列表,item="id"
是列表中每个元素的别名,open
和close
定义了包围符号,separator
定义了分隔符。
4. 使用<set>
更新记录
当执行update操作时,如果某些字段可能是null或不需要更新,可以使用<set>
来动态生成SET子句:
<update id="updateUser" parameterType="User">UPDATE users<set><if test="name != null">name = #{name},</if><if test="age != null">age = #{age},</if></set>WHERE id = #{id}
</update>
请注意,<set>
会自动移除最后多余的逗号。