关于条件的判断

  • if      判断语句
  • choose (when, otherwise) 类似于switch case语句

if 和 when 都需要与test属性连用,test为具体判断逻辑

Mybatis学习笔记——动态Sql

Mybatis学习笔记——动态Sql

  • 在判断之前都加1=1的原因是:如果不加1=1,当断语句返回false时,后面判断部分的sql为空,这样整体sql语句就变成了xxx where,因而会出错
  • 可以通过使用where或trim元素去掉1=1这样的语句

对sql语句进行相关修饰的元素(where,set,trim)

where

[html] view plain copy
  1. <select id="user" parameterType="user" resultType="User">  
  2.         select * from user   
  3.           <where>  
  4.             <if test="id!=null and id!=''">  
  5.               id=#{id}  
  6.             </if>  
  7.             <if test="name!=null and name!=''">  
  8.               and name=#{name}  
  9.             </if>  
  10.             <if test="gender!=null and gender!=''">  
  11.               and gender=#{gender}  
  12.             </if>  
  13.           </where>  
  14.        </select>  

where元素的作用是:描述sql中的where条件部分,当where条件为空时,此时where语句为空(不出现where关键字);当where条件不为空时,它可以忽略where条件部分首个AND或OR

set

[html] view plain copy
  1. <update id="userUpdate" parameterType="user">  
  2.      update user   
  3.        <set>  
  4.          <if test="id!=null and id!=''">  
  5.            id=#{id},  
  6.          </if>  
  7.          <if test="name!=null and name!=''">  
  8.            name=#{name},  
  9.          </if>  
  10.          <if test="gender!=null and gender!=''">  
  11.            gender=#{gender},  
  12.          </if>  
  13.        </set>  
  14. lt;/update>  

set元素的作用:描述update语句中的set部分,可以或略掉最后一个逗号

trim

包含的属性:

  • prefix:前缀
  • suffix:后缀
  • prefixOverrides:忽略第一个指定分隔符
  • suffixOverrides:忽略最后一个指定分隔符
//与上面等同的where例子
[html] view plain copy
  1. <select id="user" parameterType="user" resultType="User">  
  2.       select * from user   
  3.         <trim prefix="WHERE" prefixoverride="and | or">  
  4.           <if test="id!=null and id!=''">  
  5.             id=#{id}  
  6.           </if>  
  7.           <if test="name!=null and name!=''">  
  8.             and name=#{name}  
  9.           </if>  
  10.           <if test="gender!=null and gender!=''">  
  11.             and gender=#{gender}  
  12.           </if>  
  13.        </trim>  
  14.     </select>  

//与上面等同的set例子

[html] view plain copy
  1. <update>  
  2.     update user   
  3.       <trim prefix="set" suffixoverride=",">  
  4.         <if test="id!=null and id!=''">  
  5.           id=#{id},  
  6.         </if>  
  7.         <if test="name!=null and name!=''">  
  8.           name=#{name},  
  9.         </if>  
  10.         <if test="gender!=null and gender!=''">  
  11.           gender=#{gender}  
  12.         </if>  
  13.         </trim>  
  14.   </update>  

foreach

循环语句,接收的类型是:list、set、map、数组等

参数:

  • collection , 要进行迭代的元素
  • index  为索引定义一个名字,表示每次迭代到的位置(map为其key)
  • item   当前迭代到的元素别名
  • open  循环区间对应的sql语句部分的前面加上的字符串(以什么开始)
  • close 循环区间对应的sql语句部分的后面加上的字符串(以什么结束)
  • separate 循环内容以什么分隔
(1)批量插入
[html] view plain copy
  1. <insert id="add" parameterType="List">  
  2.       insert into user(id,name,gender) values  
  3.         <foreach collection="list" item="user" separator=",">  
  4.           (#{user.id},#{user.name},#{user.gender})  
  5.         </foreach>  
  6. </insert>  

(2)批量删除

[html] view plain copy
  1. <delete id="deleteUser" parameterType="array">  
  2.         delete from user where id in  
  3.           <foreach collection="array" item="id" open="(" close=")" separator=",">  
  4.             #{id}  
  5.           </foreach>  
  6. </delete>  

注意:如果集合为空,sql语句会出问题,因此需要在业务层进行判断集合是否为空

bind元素

用于定义上下文变量

Mybatis学习笔记——动态Sql

Mybatis学习笔记——动态Sql

相关文章: