[MyBatis系列③]动态SQL
warning:
这篇文章距离上次修改已过430天,其中的内容可能已经有所变动。
在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可以根据传入的参数灵活地生成复杂的查询或更新语句。
评论已关闭