关于条件的判断
- if 判断语句
- choose (when, otherwise) 类似于switch case语句
if 和 when 都需要与test属性连用,test为具体判断逻辑
- 在判断之前都加1=1的原因是:如果不加1=1,当断语句返回false时,后面判断部分的sql为空,这样整体sql语句就变成了xxx where,因而会出错
- 可以通过使用where或trim元素去掉1=1这样的语句
对sql语句进行相关修饰的元素(where,set,trim)
where
<select id="user" parameterType="user" resultType="User"> select * from user <where> <if test="id!=null and id!=''"> id=#{id} </if> <if test="name!=null and name!=''"> and name=#{name} </if> <if test="gender!=null and gender!=''"> and gender=#{gender} </if> </where> </select>
where元素的作用是:描述sql中的where条件部分,当where条件为空时,此时where语句为空(不出现where关键字);当where条件不为空时,它可以忽略where条件部分首个AND或OR
set
<update id="userUpdate" parameterType="user"> update user <set> <if test="id!=null and id!=''"> id=#{id}, </if> <if test="name!=null and name!=''"> name=#{name}, </if> <if test="gender!=null and gender!=''"> gender=#{gender}, </if> </set> </update>
set元素的作用:描述update语句中的set部分,可以或略掉最后一个逗号
trim
包含的属性:
- prefix:前缀
- suffix:后缀
- prefixOverrides:忽略第一个指定分隔符
- suffixOverrides:忽略最后一个指定分隔符
<select id="user" parameterType="user" resultType="User"> select * from user <trim prefix="WHERE" prefixoverride="and | or"> <if test="id!=null and id!=''"> id=#{id} </if> <if test="name!=null and name!=''"> and name=#{name} </if> <if test="gender!=null and gender!=''"> and gender=#{gender} </if> </trim> </select>
//与上面等同的set例子
<update> update user <trim prefix="set" suffixoverride=","> <if test="id!=null and id!=''"> id=#{id}, </if> <if test="name!=null and name!=''"> name=#{name}, </if> <if test="gender!=null and gender!=''"> gender=#{gender} </if> </trim> </update>
foreach
循环语句,接收的类型是:list、set、map、数组等
参数:
扫描二维码关注公众号,回复:
1518714 查看本文章
- collection , 要进行迭代的元素
- index 为索引定义一个名字,表示每次迭代到的位置(map为其key)
- item 当前迭代到的元素别名
- open 循环区间对应的sql语句部分的前面加上的字符串(以什么开始)
- close 循环区间对应的sql语句部分的后面加上的字符串(以什么结束)
- separate 循环内容以什么分隔
<insert id="add" parameterType="List"> insert into user(id,name,gender) values <foreach collection="list" item="user" separator=","> (#{user.id},#{user.name},#{user.gender}) </foreach> </insert>
(2)批量删除
<delete id="deleteUser" parameterType="array"> delete from user where id in <foreach collection="array" item="id" open="(" close=")" separator=","> #{id} </foreach> </delete>
注意:如果集合为空,sql语句会出问题,因此需要在业务层进行判断集合是否为空
bind元素
用于定义上下文变量