动态sql循环取值判断设值案例

文章详细介绍了MyBatis中的trim标签用于动态SQL拼接,包括prefix、suffix、prefixOverrides和suffixOverrides属性的用途。同时展示了choose、when、otherwise的选择语句用法,以及foreach标签在处理集合遍历和动态SQL条件中的应用,例如在in语句中的使用。
摘要由CSDN通过智能技术生成
update t_users
<trim prefix="set" suffixOverrides="," suffix=" where id = #{id} ">
  <if test="name != null and name.length() > 0"> name=#{name}, </if>
  <if test="gender != null and gender.length() > 0"> gender=#{gender}, </if>
</trim>

trim标签

prefix    给sql语句拼接的前缀
suffix    给sql语句拼接的后缀
prefixOverrides    去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND"
suffixOverrides    去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定

<choose>
    <when test="entetype == 2">
        SELECT e.entecode, e.pentecode,e.entename,e.entefullname,e.fsguid,
        CONCAT('[',e.regicode,']',IF(e.entefullname is null or e.entefullname='',e.entename,e.entefullname)) AS
        fullname
        FROM dw_enterprise e
        WHERE 1=1
        <if test="regicode != null and regicode != ''">
            and regicode=#{regicode}
        </if>
        and entetype=#{entetype} and status=1
        ORDER BY e.entecode
    </when>
    <when test="entetype == 3">
        SELECT e.entecode, e.pentecode,e.entename,e.entefullname,e.fsguid, CONCAT('[',(SELECT p.CODE FROM
        pj_printenterprise p WHERE SUBSTR(e.entecode,7)=p.FS_GUID),']',IF(e.entefullname is null or
        e.entefullname='',e.entename,e.entefullname)) AS fullname
        FROM dw_enterprise e
        WHERE 1=1
        <if test="regicode != null and regicode != ''">
            and regicode=#{regicode}
        </if>
        and entetype=#{entetype} AND status=1
        ORDER BY e.entecode
    </when>
    <otherwise>
      SELECT
        e.entecode,
        e.pentecode,
        e.entename,
        e.entefullname,
        e.fsguid,
        CONCAT( '[', IFNULL( e.licencecode, e.fscode ), ']', IF( e.entefullname != '', e.entefullname, e.entename )) AS fullname,
        e.chargeCard
      FROM
        dw_enterprise e
      WHERE
        e.STATUS = 1
      <if test="entetype != null and entetype!= ''">
          AND e.entetype = #{entetype}
      </if>
      <if test="regicode != null and regicode != ''">
        AND regicode = #{regicode}
      </if>
      ORDER BY e.source DESC, e.licencecode
    </otherwise>
</choose>

选择语句

<select id="selectByList" parameterType="java.util.List" resultType="user">
    select * from user
    <where>
        <!-- 传递List,List中是pojo -->
        <if test="list!=null">
            <foreach collection="list" item="item" open="and id in(" separator="," close=")">
                #{item.id}
            </foreach>
        </if>
    </where>
</select>

foreach 说明

你可以传递一个 list 实例或者 array 数组作为参数对象传给 MyBatis。当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中,用名称作为键。list 实例将会以 list 作为键,而 array 数组实例将会以 array 作为键

foreach 元素的属性主要有 item,index,collection,open,separator,close

    item:表示集合中每一个元素进行迭代时的别名
    index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置
    open:表示该语句以什么开始
    separator:表示在每次进行迭代之间以什么符号作为分隔符
    close:表示以什么结束

   collection:循环值的类型

<if test="enteType != ''">
  <foreach collection="enteType.split(',')" item="item" open="and u.enteType in(" separator="," close=")">
    #{item}
  </foreach>
</if>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值