Mybatis常用动态标签

MyBatis 动态 SQL 标签指南

MyBatis 提供了一组动态 SQL 处理功能,允许在运行时构建 SQL 语句。这非常有用,因为你可以根据不同的条件组合查询。下面是常用的动态 SQL 标签及其使用方法。

<if> 标签

  • 作用:根据表达式的结果决定是否包含某个 SQL 片段。
  • 属性test 属性用于设置判断条件。

示例

<select id="findActiveUsers" parameterType="int" resultType="User">
  SELECT * FROM user
  WHERE status = 'active'
  <if test="age != null">
    AND age >= #{age}
  </if>
</select>

<choose>, <when>, <otherwise> 标签 标签

  • 作用:类似于 Java 中的 switch-case 语句,可以有多个 子元素和一个可选的 子元素。
  • 属性: 的 test 属性用于设置判断条件。

示例

<select id="findUserByCriteria" parameterType="map" resultType="User">
  SELECT * FROM user
  WHERE
  <choose>
    <when test="username != null">
      username = #{username}
    </when>
    <when test="email != null">
      email = #{email}
    </when>
    <otherwise>
      active = 1
    </otherwise>
  </choose>
</select>

<set> 标签

  • 作用:用于 UPDATE 语句中,自动处理 SET 子句中的逗号分隔符和前导逗号。
  • 属性:无需设置属性。

示例


<update id="updateUser" parameterType="User">
  UPDATE user
  <set>
    <if test="username != null">
      username = #{username},
    </if>
    <if test="email != null">
      email = #{email},
    </if>
    <if test="status != null">
      status = #{status}
    </if>
  </set>
  WHERE id = #{id}
</update>

<foreach> 标签

  • 作用:遍历集合或数组,生成 SQL 语句中的 IN 子句或列表等。
  • 属性:collection 表示要遍历的集合名称;item 表示每次循环的变量名;open 和 close 分别表示循环开始和结束的字符串;separator 表示循环体之间的分隔符。

示例

<select id="findUsersByIds" parameterType="list" resultType="User">
  SELECT * FROM user
  WHERE id IN
  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
    #{item}
  </foreach>
</select>

<bind> 标签

  • 作用:允许你在 SQL 语句之外绑定变量,常用于预编译 SQL 语句。
  • 属性:name 用于定义绑定变量的名称;value 用于设置绑定变量的值。

示例

<select id="findUserByName" parameterType="string" resultType="User">
  <bind name="likeStr" value="'%' + username + '%'"/>
  SELECT * FROM user WHERE username LIKE #{likeStr}
</select>

<trim> 标签

  • 作用:用于修剪 SQL 语句中的前缀或后缀,并能去除多余的逗号等。
  • 属性:prefix、suffix、prefixOverrides、suffixOverrides。

示例

<update id="updateUser" parameterType="User">
  UPDATE user
  <trim prefix="SET" suffixOverrides=",">
    <if test="username != null">
      username = #{username},
    </if>
    <if test="email != null">
      email = #{email},
    </if>
    <if test="status != null">
      status = #{status}
    </if>
  </trim>
  WHERE id = #{id}
</update>
  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值