MyBatis 中的动态 SQL 允许根据条件来动态构建 SQL 查询语句,从而实现更灵活的 SQL 操作。动态 SQL 主要包括以下几个方面:
1. <if>
元素:
<select id="getUser" parameterType="map" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
<if>
元素用于条件判断,根据条件动态拼接 SQL 语句。
2. <choose>
, <when>
, <otherwise>
元素:
<select id="getUser" parameterType="map" resultType="User">
SELECT * FROM users
<where>
<choose>
<when test="condition == 'A'">
AND column = 'A'
</when>
<when test="condition == 'B'">
AND column = 'B'
</when>
<otherwise>
AND column = 'C'
</otherwise>
</choose>
</where>
</select>
<choose>
元素类似于 Java 中的 switch,根据条件选择执行其中的一个分支。
3. <foreach>
元素:
<select id="getUsersByIds" parameterType="map" resultType="User">
SELECT * FROM users WHERE id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<foreach>
元素用于遍历集合,动态生成 SQL 的 IN 子句。
4. <trim>
, <set>
, <where>
元素:
<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>
这些元素用于控制 SQL 语句中空白字符的去除,避免不必要的逗号或 AND 连接。
动态 SQL 可以根据不同条件生成不同的 SQL 语句,使得 SQL 查询更加灵活,能够根据实际需求动态构建查询条件。
Was this helpful?
1 / 0