本文共 1457 字,大约阅读时间需要 4 分钟。
一、<sql>与<include>搭配使用:
select * from account
二、<if>用法1:
注意:需要写 像 1=1 这样恒真的条件来解决 【and】 问题!
何为【and】 问题?
我们知道,where后的第一个条件前不需要加and,从第二个条件开始就需要加and了!
这个【第一个条件】就显得很特殊!需要特别处理。如果我们让1=1这样的恒真条件作为第一个条件,则我们的<if>标签就都不可能是第一个条件了,直接给每个<if>标签加and,so easy!
反之,如果不写1=1,请看:
上面的name就有可能是第一,也有可能不是第一,那么,这个and加不加呢?很麻烦对吧!
顺便说一下id,id要么不出现(为null),要么当第一(非null)!当然就不加and喽!加了呢,报错!
所以说1=1也好,2=2也好,虽然不优雅,但好歹能解决问题!
你可能会说,怎么能不优雅呢!我就要优雅嘛!
好,优雅是吧,给你优雅——
三、<if>用法2:
这就很优雅了吧!
注意:你尽可放心地在每个<if>里都写and,不要担心【执行时where接的第一个条件前不能有and】的问题!框架帮你解决了!
多写and没问题,但少写and就可能有问题了。请看:
上面的代码可能报错,也可能不报错!上面有四类情况:id为空name为空;id为空name不为空;id不为空name为空;id不为空name不为空。在这四类情况中,都不为空的情况会报错!
总结一下:框架可以帮我们减and,但不能帮我们加and!
四、<foreach>用法:
问题提出:如何实现:select * from account where id in (1, 2)
<foreach>说:我来试试。
注意:
1、item值要和#{}里的值保持一致!
2、collection里填实体类中相应的集合成员。
3、test="idList != null and idList.size() != 0"这里的and不能换成&&哦!
4、open里还是and打头哈,跟前面的<if>类似!
5、这个 <foreach collection="idList" open="and id in(" close = ")" separator="," item="ID"> #{ID} </foreach> 怎么理解呢?
就是拼接啦:【open值】 拼上 【第1个ID】 拼上 【separator】 拼上 【第2个ID】 【separator】 …… 【最后一个ID】 拼上 【close】
转载地址:https://liuxingchang.blog.csdn.net/article/details/109081091 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!