mybatis动态标签
时间: 2023-05-30 07:07:47 浏览: 81
MyBatis中的动态标签是用于根据条件动态生成SQL语句的一种方式。它们被用于SELECT、UPDATE、DELETE和INSERT语句中。以下是MyBatis中可用的动态标签:
1. if
if标签通过判断条件是否成立来动态生成SQL语句。它可以嵌套在其他标签中。例如:
```
<select id="selectUsers" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
```
上面的SQL语句根据条件动态生成了WHERE子句。如果name和age都是null,那么WHERE子句将不会被生成。
2. choose、when和otherwise
choose、when和otherwise标签可以根据多个条件中的一个来生成SQL语句。例如:
```
<select id="selectUsers" resultType="User">
SELECT * FROM users
<where>
<choose>
<when test="name != null">
AND name = #{name}
</when>
<when test="age != null">
AND age = #{age}
</when>
<otherwise>
AND status = 'active'
</otherwise>
</choose>
</where>
</select>
```
上面的SQL语句根据name、age和status的值来动态生成WHERE子句。如果name和age都是null,那么WHERE子句将会生成AND status = 'active'。
3. trim、set和where
trim、set和where标签可以用于从生成的SQL语句中删除不必要的标点符号和关键字。例如:
```
<update id="updateUser" parameterType="User">
UPDATE users
<set>
<if test="name != null">
name = #{name},
</if>
<if test="age != null">
age = #{age},
</if>
</set>
<where>
<if test="id != null">
id = #{id}
</if>
</where>
</update>
```
上面的SQL语句动态生成了SET和WHERE子句。如果name和age都是null,SET子句将不会被生成。
4. foreach
foreach标签可以用于循环遍历集合或数组来生成SQL语句。例如:
```
<select id="selectUsers" parameterType="java.util.List" resultType="User">
SELECT * FROM users
WHERE id IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
```
上面的SQL语句根据传入的List中的元素动态生成了IN子句。如果List为空,IN子句将不会被生成。
以上是MyBatis中常用的动态标签。它们可以帮助我们灵活地生成SQL语句,使得我们的代码更加简洁和易读。