19、动态SQL之<set><if>标签的使用
2018-01-21 12:29
387 查看
当更新表时,只更新值不为空的字段。需要用
上述示例,set 是SQL中的关键字,当哪个if条件判断成功后就插入更新哪个字段,但是上述示例存在一个弊端。如果上述示例中所有的判断都成功时,SQL不存在问题,但当gender判断不成功时,SQL的拼接语句就变成了:
从拼接后的语句可以看出,where关键字前面多了一个“,”,结果导致SQL语句失败。
修正方式一:
通过使用
当gender判断不成功时, 标签可以把包裹的字符串拼接的最后一个“,”去掉,就变成了:
修正方式二:
通过使用
当gender判断不成功后,
最后的SQL语句为:
<if>判断传入的值是否不为空,然后更新值不为空对应的字段。
<update id="updatePerson"> <!-- Set标签的使用 --> update PERSON set <if test="lastName!=null"> last_name=#{lastName}, </if> <if test="email!=null"> email=#{email}, </if> <if test="gender!=null"> gender=#{gender} </if> where id=#{id} </update>
上述示例,set 是SQL中的关键字,当哪个if条件判断成功后就插入更新哪个字段,但是上述示例存在一个弊端。如果上述示例中所有的判断都成功时,SQL不存在问题,但当gender判断不成功时,SQL的拼接语句就变成了:
update PERSON set last_name=#{lastName}, email=#{email}, where id=#{id}
从拼接后的语句可以看出,where关键字前面多了一个“,”,结果导致SQL语句失败。
修正方式一:
通过使用
<set>标签来修正上述方式,只需要把上述所有的判断语句放在
<set>标签即可。因为
<set>标签既有set关键字的作用,还可以自动去掉
<set>标签包裹的拼接后的字符串的最后一个“,”。示例如下
<update id="updatePerson"> <!-- Set标签的使用 --> update PERSON <set> <if test="lastName!=null"> last_name=#{lastName}, </if> <if test="email!=null"> email=#{email}, </if> <if test="gender!=null"> gender=#{gender} </if> </set> where id=#{id} </update>
当gender判断不成功时, 标签可以把包裹的字符串拼接的最后一个“,”去掉,就变成了:
set last_name=#{lastName}, email=#{email}
修正方式二:
通过使用
<trim>(已在前一节演示)标签进行修正
<update id="updatePerson"> update PERSON <trim prefix="set" suffixOverrides=","> <if test="lastName!=null"> last_name=#{lastName}, </if> <if test="email!=null"> email=#{email}, </if> <if test="gender!=null"> gender=#{gender} </if> </trim> where id=#{id} </update>
当gender判断不成功后,
<trim>标签包裹的字符串拼接后为:
last_name=#{lastName}, email=#{email},
<trim prefix="set" suffixOverrides=",">指定在拼接的字符串的前面加上set,并且把拼接字符串的最后的“,”去掉,因此最后就变成了:
set last_name=#{lastName}, email=#{email}
最后的SQL语句为:
update PERSON set last_name=#{lastName}, email=#{email} where id=#{id}
相关文章推荐
- 22、动态SQL之<bind>标签使用
- MyBatis动态SQL<choose>标签的使用
- 6.1 Mybatis实现动态SQL——<if></if>使用
- 核心标签库<c:set>标签、<c:choose>标签、<c:forEach>标签&<c:if>标签的使用例子
- 随笔-<c:out> <c:set>标签使用
- struts2 标签<s:if/>使用总结
- thinkphp模板中标签<volist>,<if>和 U函数的使用
- struts2中<s:select>标签的动态使用
- jsp页面动态展示list-使用<select>和<c:forEach>标签
- c标签库中<c:if>的使用
- Java使用sql标签<sql:param />,<sql:param />设置日期参数
- <Ibatis in action>中使用动态SQL的一个小细节提示(与CDATA)
- <c:if>标签的使用
- struts2中<s:if>标签的使用(session的使用非常重要)
- struts2中<s:if>标签的使用
- webwork <ww:if> 标签的使用
- MyBatis <set>标签的使用
- JSTL <c:if >标签的使用
- struts2标签<s:if>和部分表达式的使用
- Java中使用sql标签<sql:query />分页显示