mybatis动态sql
时间: 2023-11-07 10:56:53 浏览: 95
mybatis动态sql.zip
MyBatis动态SQL是指根据不同的条件生成不同的SQL语句。MyBatis提供了多种方式来实现动态SQL,包括使用if、choose、when、otherwise、trim、where、set、foreach等标签。
下面我们来看一些常见的动态SQL用法:
1. if标签
if标签用于根据不同的条件生成不同的SQL语句。
```
<select id="findUserById" resultType="User">
select * from user
where 1=1
<if test="id != null">
and id = #{id}
</if>
<if test="name != null">
and name = #{name}
</if>
</select>
```
如果传入的id和name均不为空,则生成的SQL语句为select * from user where 1=1 and id=#{id} and name=#{name}。
2. choose、when、otherwise标签
choose、when、otherwise标签用于根据不同的条件选择不同的SQL语句。
```
<select id="findUser" resultType="User">
select * from user
<choose>
<when test="id != null">
where id = #{id}
</when>
<when test="name != null">
where name = #{name}
</when>
<otherwise>
where 1=1
</otherwise>
</choose>
</select>
```
如果传入的id不为空,则生成的SQL语句为select * from user where id=#{id};如果传入的name不为空,则生成的SQL语句为select * from user where name=#{name};如果传入的id和name均为空,则生成的SQL语句为select * from user where 1=1。
3. trim、where标签
trim标签用于删除SQL语句中多余的WHERE或AND等关键字,如果没有where条件则不会生成where关键字。
```
<select id="findUser" resultType="User">
select * from user
<trim prefix="where" prefixOverrides="and |or ">
<if test="id != null">
and id = #{id}
</if>
<if test="name != null">
and name = #{name}
</if>
</trim>
</select>
```
如果传入的id和name均不为空,则生成的SQL语句为select * from user where id=#{id} and name=#{name};如果传入的id为空,name不为空,则生成的SQL语句为select * from user where name=#{name};如果传入的id和name均为空,则生成的SQL语句为select * from user。
where标签和trim标签功能类似,用法如下:
```
<select id="findUser" resultType="User">
select * from user
<where>
<if test="id != null">
and id = #{id}
</if>
<if test="name != null">
and name = #{name}
</if>
</where>
</select>
```
4. set、foreach标签
set标签用于更新操作中设置要更新的字段,foreach标签用于遍历集合,生成多个相同的SQL语句。
```
<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>
<update id="updateUsers" parameterType="java.util.List">
update user
<set>
name = #{name},
age = #{age}
</set>
where id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.id}
</foreach>
</update>
```
以上就是MyBatis动态SQL的一些常见用法,可以根据具体的业务需求进行灵活使用。
阅读全文