[MyBatis系列③]动态SQL
在MyBatis中,动态SQL是基于OGNL表达式的,可以在XML映射文件内部动态生成SQL语句。主要元素有:
<if>
: 根据条件是否满足执行相应的SQL片段。<choose>
,<when>
,<otherwise>
: 相当于Java中的switch
语句。<where>
: 自动处理前导的AND
或OR
。<set>
: 自动处理后面的逗号问题,常用于更新语句。<foreach>
: 主要用于处理数组、集合的循环操作。
以下是使用这些元素的示例代码:
<mapper namespace="com.example.mapper.UserMapper">
<!-- 查询用户 -->
<select id="findUserByCondition" parameterType="map" resultType="User">
SELECT * FROM user
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>
<!-- 更新用户 -->
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<if test="username != null">
username = #{username},
</if>
<if test="email != null">
email = #{email},
</if>
</set>
WHERE id = #{id}
</update>
<!-- 批量删除用户 -->
<delete id="deleteUsers" parameterType="list">
DELETE FROM user
WHERE id IN
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>
在这个例子中,<if>
用于动态包含或排除特定的条件,<where>
自动处理前导的AND
或OR
,<set>
自动处理尾部的逗号,<foreach>
用于处理集合的循环。这样的动态SQL可以根据传入的参数灵活地生成复杂的查询或更新语句。
评论已关闭