8 MyBatis动态SQL

if标签:

<if>用法类似Java中的if语句,选择性拼接指定SQL片段.

补充:

  1.     在test条件中使用动态SQL中传递参数要放在实体对象中,不然会报错找不到对象
  2.     如果不放在实体对象中传输,就在test对比中使用_parameter或者value
  3.     _parameter,value代表传进来的参数,如果传进来的参数是多个,那个_parameter代表get(0)第一个

    
格式:

    <if test="条件">
        SQL片段
    </if>


说明:

  1.     当条件为true时,将SQL片段拼接到该标签所在位置


<choose>,<when>,<otherwise>

用法类似Java的if else if 语句,用于多次判断,选择性拼接指定SQL片段.
格式:

    <choose>
        <when test="条件1">SQL片段1</when>
        <when test="条件2">SQL片段2</when>
            ...
        <otherwise>默认SQL片段</otherwise>
    </choose>


说明:

  1.     <choose>,<when>,<otherwise>不能单独使用,必须混合使用.
  2.     <choose>中可以含有N个<when>,0或1个<otherwise>


<forEach>标签:

用于遍历集合,通常用于构建in语句中.


格式:

    <select id="业务匿名" resultType="结果类型[类全名]" >
        select 字段列 from 表名 where 字段名 in
        <foreach collection="集合" item="变量A" index="变量B" open=""     separator="" close="">
        #{变量A}
        </foreach>
    </select>


说明:

  1.     collection属性值为集合类型的属性名.
  2.     item属性值为变量名,名称任意.该变量存放当前元素/键值
  3.     index属性值为变量名,名称任意.该变量存放当前元素索引/键名
  4.     open,separator,close属性值为符号,表示遍历开始/中间/结束时拼接的符号
    <!--测试<forEach: 测试age为20,21,22,23,24,25-->
    <select id="dynacSQL3" resultType="user" parameterType="java.util.List" >
        select * from user where age in
            <foreach collection="list" item="ageval" open="(" separator="," close=")">
                #{ageval}
            </foreach>
    </select>
    <!--测试<forEach: 测试age为20,21,22,23,24,25-->
    <select id="dynacSQL3" resultType="user" parameterType="java.util.ArrayList" >
        select * from user where age in
            <foreach collection="array" item="ageval" open="(" separator="," close=")">
                #{ageval}
            </foreach>
    </select>


where标签:

要求:
    <where>需要与<if>,<choose>,<when>,<otherwise>等配合使用
作用:
    a.当至少有1个子标签的条件为true时,<where>生成1个"where"关键字.
    b.若where后紧挨"AND/OR"时[where  and 条件],<where>自动去除.
格式:
 

    <where>
        其他动态SQL标签
    </where>


说明:
    1.<where>标签中编写<if>,<choose>,<when>,<otherwise>,<forEach>等标签

set标签:

<set>用于修改命令中,能够动态前置"set"关键字,同时可以删除多余的逗号.
 

格式:

    <update id="业务匿名" resultType="int">
        update 表名
        <set>
            其他动态SQL标签或SQL片段
        </set>
    </update>


说明:

  1.     <set>标签中编写<if>,<choose>,<when>,<otherwise>等标签


<sql>在业务标签外,定义一个SQL片段,在其他业务标签中可以通过<include>引用该SQL片段.
格式:

    <sql id="SQL片段匿名">
        SQL片段
    </sql>

说明:

  1.     SQL片段内容可以是SQL语句的任何部分.
  2.     <sql>标签对之间可以嵌套动态SQL标签,产生更加方便的SQL片段
  3.     当需要引用SQL片段时,编写<include refid="SQL片段匿名">即可引用.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吾欲乘风归去,又恐琼楼玉宇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值