一、为什么要使用动态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>中引用定义的片段。