动态SQL使用【JavaEE】

动态SQL使用

1. if 标签

判断一个参数是否有值,如果没值,那么就会隐藏 if 中的 sql

语法:

<if test="username!=null">
 username==#{username}
</if>

表达式:username 的参数是否为空

如果结果为 true,那么拼接的 SQL 就会加上 username=#{username},

如果结果为false,那么 if 标签中的 SQL 就会被省略

在这里插入图片描述

2. trim 标签

最主要的作用:去除 SQL 语句前后多余的某个字段

标签属性:

  • prefix:表示整个语句块,以prefix的值作为前缀
  • suffix:表示整个语句块,以suffix的值作为后缀
  • prefixOverrides:表示整个语句块要去除掉的前缀
  • suffixOverrides:表示整个语句块要去除掉的后缀
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="xxx">
...
</if>
</trim>

在这里插入图片描述

3. where 标签

主要作用:实现查询中的 where 替换

<!-- 根据 id 查询用户 -->
 <select id="getUserById" resultMap="BaseMap">
     select * from userinfo
     <where>
         <if test="id!=null">
             id=#{id}
         </if>
         <if test="name!=null">
             and username=#{name}
         </if>
     </where>
 </select>

where 中的所有参数都为空,那么 where 的 sql 就不会生产

可以去除掉最前面的 and 标签

以上<where>标签也可以使用 <trim prefix="where" prefixOverrides="and">替换

4. set标签

主要作用:进行修改操作时,配合 if 来处理非必传传输,特点是会自动去除最后一个英文逗号。

<update id="updateById" parameterType="org.example.model.User">
 update user
 <set>
 <if test="username != null">
 username=#{username},
 </if>
 <if test="password != null">
 password=#{password},
 </if>
 <if test="nickname != null">
 nickname=#{nickname},
 </if>
 <if test="sex != null">
 sex=#{sex},
 </if>
 <if test="birthday != null">
 birthday=#{birthday},
 </if>
 <if test="head != null">
 head=#{head},
 </if>
 <if test="createTime != null">
 create_time=#{createTime},
 </if>
 </set>
 where id=#{id}
</update>

set标签中如果所有参数都是非必传,set会将这些语句隐藏,所有标签都使用逗号也没有问题,set会将逗号去掉(如果传一个值的话逗号会存在)。

以上<set>标签也可以使用 <trim prefix="set" prefixOverrides=",">替换

5. foreach 标签

主要作用:对集合进行循环。

对集合进⾏遍历时可以使⽤该标签。标签有如下属性:

  • collection:绑定⽅法参数中的集合,如 List,Set,Map或数组对象
  • item:遍历时的每⼀个对象
  • open:语句块开头的字符串
  • close:语句块结束的字符串
  • separator:每次遍历之间间隔的字符串
<delete id="deleteByIds">
 delete from article
 where id in
 <foreach collection="list" item="item" open="(" close=")" separator=","
>
 #{item}
 </foreach>
</delete>

猜你喜欢

转载自blog.csdn.net/weixin_53939785/article/details/129004484