Mybatis动态标签:if、where、set、trim、foreach、choose

在MyBatis中,可以使用以下动态SQL标签来编写灵活的SQL语句:

一、<if>:条件判断标签,用于在SQL语句中添加条件判断。通过判断给定的条件是否成立,决定是否包含相应的SQL片段。示例:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <where>
    <if test="username != null">
      AND username = #{username}
    </if>
    <if test="email != null">
      AND email = #{email}
    </if>
  </where>
</select>

二、<where>:用于拼接WHERE子句,自动处理WHERE关键字和多个条件之间的连接关系(AND或OR)。示例:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <where>
    <if test="username != null">
      AND username = #{username}
    </if>
    <if test="email != null">
      AND email = #{email}
    </if>
  </where>
</select>

三、<set>:用于拼接UPDATE语句的SET子句,自动处理SET关键字和多个字段更新。示例:

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

四、<trim>:用于自定义SQL语句片段的修剪,可以去除开头或结尾的特定字符。常用于处理动态拼接的SQL语句中的逗号、AND、OR等问题。示例:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <trim prefix="WHERE" prefixOverrides="AND |OR ">
    <if test="username != null">
      AND username = #{username}
    </if>
    <if test="email != null">
      AND email = #{email}
    </if>
  </trim>
</select>

五、<foreach>:用于遍历集合并拼接对应的SQL语句片段,常用于IN语句的参数拼接。示例:

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

六、<choose>:类似于Java中的switch语句,根据条件选择执行不同的分支。可以与<when>和<otherwise>配合使用。示例:

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <where>
    <choose>
      <when test="username != null">
        AND username = #{username}
      </when>
      <when test="email != null">
        AND email = #{email}
      </when>
      <otherwise>
        AND status = 1
      </otherwise>
    </choose>
  </where>
</select>

除了上述提到外,MyBatis还提供了其他一些有用的标签,如:

七、<sql>:定义可重用的SQL片段,在需要的地方可以通过<include>标签引入。示例:

<sql id="userColumns">
  username, password, email
</sql>

<select id="getUserList" resultType="User">
  SELECT <include refid="userColumns"/> FROM user
</select>

八、<include>:用于引入之前定义的可重用SQL片段。示例:

<select id="getUserList" resultType="User">
  SELECT *
  FROM user
  WHERE id IN
  <include refid="userIdList"/>
</select>

<sql id="userIdList">
  <foreach collection="ids" item="id" separator="," open="(" close=")">
    #{id}
  </foreach>
</sql>

九、<bind>:用于将一个表达式的结果绑定到一个变量上,便于在后续的SQL语句中使用。示例:

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

十、<resultMap>:定义查询结果与对象属性之间的映射关系,可以进行高级的结果映射配置。示例:

<resultMap id="userResultMap" type="User">
  <id property="id" column="user_id"/>
  <result property="username" column="user_name"/>
  <result property="email" column="user_email"/>
</resultMap>

<select id="getUserList" resultMap="userResultMap">
  SELECT user_id, user_name, user_email
  FROM user
</select>

这些是MyBatis中的一些常用动态SQL标签,可以根据具体需求选择合适的标签来编写动态和灵活的SQL语句。使用这些标签可以提高SQL的可读性、可维护性和重用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别晃我的可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值