MyBatis学习-动态SQL

一、为什么要使用动态SQL

需要根据不同的条件来执行不同的SQL命令,相应的条件可以在SQL命令中写出,而不需要根据不同的条件写多条SQL语句。

二、常用标签

明天总结...

  • <if><where>

if标签用来写判断条件,如果条件成立,则运行相应的程序。where标签相当于sql语句中的where关键字,当编写where标签时,如果内容中第一个是and去掉第一个and,如果<where>中有内容会生成where关键字,如果没有内容不会生成where关键字。

示例代码:

<select id="selByAccinAccout" resultType="log">
    select * from log 
    <where>
	 <if test="accin!=null and accin!=''">
	     and accin = #{accin}
	 </if>
	 <if test="accout!=null and accout!=''">
	     and accout = #{accout}
	 </if>
    </where>
</select>

注意:其中获取变量以key进行获取,所以在传递多个参数时,要使用注解@param

  • <choose><when>

<choose>只要有一个成立,其他都不执行,<when>中写成立的条件。

<select id="selByAccinAccout" resultType="log">
    select * from log 
    <where>
        <choose>
	    <when test="accin!=null and accin!=''">
	 	and accin = #{accIn}
	    </when>
	    <when test="accout!=null and accout!=''">
	 	and accout = #{accOut}
	    </when>
	 </choose>
    </where>
</select>
  • <set>

set标签用来修改SQL中的set从句。作用:去掉最后一个逗号,如果<set>中没有内容,mybatis不生成set关键字,有则生成。为防止<set>中没有内容出现语法错误,可在前面将相应的修改条件赋给相应的值。

<update id="upd" parameterType="log">
    update log
    <set>
        id = #{id}
        <if test="accIn!=null and accIn!=''">
            accin = #{accIn},
        </if>
        <if test="accOut!=null and accOut!=''">
            accout = #{accOut},
        </if>
    </set>
    where id = #{id}
</update>
  • <trim>

该标签有四个参数,prefix:在前面添加内容‘’;prefixOverrides:去掉前面的内容;suffix:在后面添加内容;suffixOverrieds:去掉后面内容,执行顺序为去掉内容后添加内容。利用该标签可以拼接成相应的查询、修改等语句。

  • <bind>

该标签的作用是给参数重新赋值,主要用于模糊查询,在原内容前或后添加内容。

  • <foreach>

循环参数内容,适用场景in查询中。collection:要遍历的集合,open:循环后左侧添加的内容,close:循环后右侧添加的内容,separator:每次循环时,元素之间的分隔符。

  • <sql><include>

<sql>标签可以用来定义某些SQL中需要复用的片段,可用<include>标签在<select><delete><update><insert>中引用定义的片段。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值