第三章 MyBatis框架动态SQL

一.<if>标签

<if> 标签用于在 SQL 映射文件中根据条件来动态生成 SQL 语句的一部分。这使得我们可以根据不同的情况动态地包含或排除特定的 SQL 片段,示例如下:

<select id="TStorageRecordList" resultType="com.bdqn.entity.TStorageRecord">

select r.id , r.supplierId , r.goodsName , r.supplierId , p.supName , r.totalAmount , r.payStatus , r.createdTime from t_storage_record r
        INNER JOIN t_supplier p on r.supplierId = p.id
        where 1=1
            <if test="goodsName != null">
                and r.goodsName LIKE CONCAT('%',#{goodsName},'%')
            </if>
            <if test="supplierId != null ">
                and r.supplierId = #{supplierId}
            </if>
            <if test="payStatus != null">
                and r.payStatus = #{payStatus}
            </if>
    </select>

在<if>标签中,当test语句成立时才会将里面的语句拼接到SQL里面,从而实现动态的效果

二.<where>标签

<where> 标签通常用于动态生成 SQL 查询语句的 WHERE 子句。它可以帮助我们处理查询条件的拼接。

    <select id="SupList" resultType="com.bdqn.entity.TSupplier">
        SELECT id , supCode , supContact , supName , supContact , supPhone , supFax ,                                 
        createdTime  FROM t_supplier
        <where>
            <if test="supCode != null and supCode != '' ">
                AND supCode LIKE CONCAT('%',#{supCode},'%')
            </if>

            <if test="supCode != null and supCode != '' ">
                AND supName LIKE CONCAT('%',#{supName},'%')
            </if>
        </where>
    </select>

三.处理集合参数

  1. 数组类型参数

  2. List类型参数

  3. Map类型参数

<select id="getUserBySupplierIdList" resultType="com.bdqn.entity.TStorageRecord">
     select * from t_storage_record
      <where>
        supplierId in
          <foreach collection="supplierIds" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
       </where>
    </select>

四.<set>标签

和<where>标签的功能类似,示例如下:

    <update id="updSupplier">
        update t_supplier
        <set>
            <if test="supName != null">
                supName = #{supName},
            </if>
            <if test="supDesc != null">
                supDesc = #{supDesc},
            </if>
            <if test="supPhone != null">
                supPhone = #{supPhone},
            </if>
        </set>
        where id = #{PId}
    </update>

五.<trim>标签

<trim> 可以帮助我们处理 SQL 语句中的前缀、后缀或者指定的字符

在标签中可以指定四个属性:

  • prefix 属性定义了在整个 SQL 语句片段前添加的字符串。
  • suffix 属性定义了在整个 SQL 语句片段后添加的字符串。
  • prefixOverrides 属性指定了需要在 SQL 语句片段开头移除的前缀字符串。
  • suffixOverrides 属性指定了需要在 SQL 语句片段末尾移除的后缀字符串
    <select id="selectPageList" resultType="com.bdqn.entity.TStorageRecord">
        select * from t_storage_record
        <trim prefix="where" prefixOverrides="and | or">
            <if test="Pid != null and Pid != '' ">
                and id like CONCAT('%',#{Pid},'%')
            </if>
            <if test="Rid != null and Rid != '' ">
                and supplierId = #{Rid}
            </if>
        </trim>
    </select>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值