<if>,<where>,<trim>,<set>,<select>都是常见的动态sql标签
时间: 2024-06-09 14:03:11 浏览: 162
这些都是 MyBatis 中常用的动态 SQL 标签,用于在 SQL 语句中动态生成条件或者语句块。具体介绍如下:
1. <if> 标签:用于在 SQL 语句中生成一个条件判断语句,如果条件成立,则生成指定的 SQL 片段,否则忽略该 SQL 片段。
2. <where> 标签:用于在 SQL 语句中生成一个 WHERE 子句,并且能够自动去掉不必要的 AND 或 OR 连接符。这个标签会自动检测它包含的所有条件,如果没有条件,则不生成 WHERE 子句。
3. <trim> 标签:可以用于去掉生成 SQL 语句中不必要的前缀或后缀,如去掉第一个条件的 AND 或者 OR 连接符。它也可以用来包裹 WHERE 或 SET 子句,当其中没有任何条件时,它会将这个子句自动去掉。
4. <set> 标签:用于在 UPDATE 语句中生成 SET 子句,根据传入的参数动态生成需要更新的列和对应的值。
5. <select> 标签:用于生成 SELECT 语句,可以包含多个子标签,如 <if>、<where>、<foreach> 等,以实现动态生成查询条件和 SQL 片段。
相关问题
练习常用动态sql的标签<if>、<where>、<set>、<trim>、<foreach>
好的,下面是这些常用动态SQL标签的用法:
1. `<if>` 标签
`<if>` 标签用于在 SQL 语句中添加条件判断。例如:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
```
上面的 SQL 查询语句中,如果传入了 `name` 和 `age` 参数,则会根据这两个参数进行查询,否则不会加入对应的条件。
2. `<where>` 标签
`<where>` 标签用于动态生成 SQL 语句中的 WHERE 子句。例如:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
```
上面的 SQL 查询语句中,如果传入了 `name` 和 `age` 参数,则会根据这两个参数进行查询,否则不会加入 WHERE 子句。
3. `<set>` 标签
`<set>` 标签用于动态生成 SQL 语句中的 SET 子句,通常用于更新操作。例如:
```xml
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<if test="name != null">
name = #{name},
</if>
<if test="age != null">
age = #{age},
</if>
</set>
WHERE id = #{id}
</update>
```
上面的 SQL 更新语句中,如果传入了 `name` 和 `age` 参数,则会根据这两个参数更新对应的字段,否则不会加入 SET 子句。
4. `<trim>` 标签
`<trim>` 标签用于动态生成 SQL 语句中的任何部分,可以用于去除生成 SQL 语句中的不必要的逗号或 AND/OR 等关键字。例如:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
<where>
<trim prefix="AND" prefixOverrides="OR">
<if test="name != null">
OR name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</trim>
</where>
</select>
```
上面的 SQL 查询语句中,`<trim>` 标签会将生成的 SQL 语句中的 `OR` 关键字前缀去除,同时去除不必要的逗号。
5. `<foreach>` 标签
`<foreach>` 标签用于动态生成 SQL 语句中的 IN 子句,通常用于查询或删除操作。例如:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE id IN
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
```
上面的 SQL 查询语句中,`<foreach>` 标签会根据传入的 `ids` 参数生成对应的 IN 子句,例如 `WHERE id IN (1, 2, 3)`。
动态sql的标签<if>、<where>、<set>、<trim>、<foreach>给我举个例子
当使用MyBatis进行动态SQL的编写时,通常会使用以下标签:
1. <if>标签:用于判断条件是否成立,如果成立则执行内部的SQL语句,否则忽略。
```
<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE 1=1
<if test="username != null">
AND username = #{username}
</if>
<if test="age != null">
AND age = #{age}
</if>
</select>
```
2. <where>标签:用于拼接WHERE子句,如果内部有任何一个条件成立,则WHERE子句会自动添加到SQL语句中。
```
<select id="getUserList" resultType="User">
SELECT * FROM user
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
```
3. <set>标签:用于拼接SET子句,用于更新表中的数据。
```
<update id="updateUser" parameterType="User">
UPDATE user
<set>
<if test="username != null">
username = #{username},
</if>
<if test="age != null">
age = #{age},
</if>
</set>
WHERE id = #{id}
</update>
```
4. <trim>标签:用于去除SQL语句中的逗号或AND/OR等无用的字符。
```
<select id="getUserList" resultType="User">
SELECT * FROM user
<trim prefix="WHERE" prefixOverrides="AND |OR ">
<if test="username != null">
AND username = #{username}
</if>
<if test="age != null">
AND age = #{age}
</if>
</trim>
</select>
```
5. <foreach>标签:用于循环遍历集合或数组,并将其作为参数传递给SQL语句中。
```
<select id="getUserListByIdList" resultType="User">
SELECT * FROM user
WHERE id IN
<foreach collection="idList" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
```
阅读全文