MyBatis动态9种sql,简单使用

Mybatis动态9种sql,简单使用

MyBatis中常见的动态SQL标签:

  1. :用于在SQL语句中加入条件判断。
  2. 、、:类似于Java中的switch-case语句,用于多条件判断。
  3. :用于去除多余的SQL片段。
  4. :在SQL语句中加入WHERE子句,并根据条件动态组装查询条件。
  5. :用于在UPDATE语句中动态生成SET子句。
  6. :用于遍历集合,并根据集合元素动态生成SQL语句的循环部分。
  7. :用于在SQL语句中声明变量。

案例:

if

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
  <select id="getUsersByCondition" resultType="com.example.User">
    SELECT * FROM users
    <where>
      <if test="username != null">
        AND username = #{username}
      </if>
      <if test="email != null">
        AND email = #{email}
      </if>
    </where>
  </select>
</mapper>

、、

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
  <select id="getUsersByCondition" resultType="com.example.User">
    SELECT * FROM users
    <where>
      <choose>
        <!-- 如果id不为空,则使用id作为查询条件 -->
        <when test="id != null">
          AND id = #{id}
        </when>
        <!-- 如果name不为空,则使用name作为查询条件 -->
        <when test="name != null and name != ''">
          AND name = #{name}
        </when>
        <!-- 如果age不为空,则使用age作为查询条件 -->
        <when test="age != null">
          AND age = #{age}
        </when>
        <!-- 如果没有满足条件的情况,则执行otherwise中的SQL -->
        <otherwise>
          AND 1=1
        </otherwise>
      </choose>
    </where>
  </select>
</mapper>

trim

  • prefix:指定在SQL语句开头添加的内容。
  • prefixOverrides:指定需要从SQL语句开头去除的内容。
  • suffix:指定在SQL语句结尾添加的内容。
  • suffixOverrides:指定需要从SQL语句结尾去除的内容。
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <select id="getUsersByCondition" resultType="com.example.User">
        SELECT * FROM users
        <where>
            <trim prefix="WHERE" prefixOverrides="AND|OR">
                <if test="name != null and name != ''">
                    AND name = #{name}
                </if>
                <if test="email != null and email != ''">
                    AND email = #{email}
                </if>
            </trim>
        </where>
    </select>
</mapper>

set

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <update id="updateUserInfo">
        UPDATE users
        <set>
            <if test="name != null and name != ''">
                name = #{name},
            </if>
            <if test="email != null and email != ''">
                email = #{email},
            </if>
        </set>
        WHERE id = #{id}
    </update>
</mapper>

foreach

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <select id="getUsersByIdList" resultType="com.example.User">
        SELECT * FROM users
        WHERE id IN
        <foreach collection="idList" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </select>
</mapper>

bind

  • name:指定临时变量的名称。
  • value:指定对临时变量赋值的表达式。
<bind name="variableName" value="expression" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值