求助:iBatis中的sqlmap里if else逻辑判断的写法
比较简单 但是很烦人加入sql的逻辑(伪代码)是:
if(a!=b){
select sql1;
}else{
select sql2;
}
翻译到sqlmap中,该怎么写呢?
只知道一个可以判断相等的节点的写法,
<isNotEqual property="a" compareValue="b">
sql1
</isNotEqual>
这个是判断不等于的,可是"不等于"的反面不是"等于"啊,还可能取到其他值,肯定不能简单写成
<isEqual property="select" compareValue="">
sql2
</isEqual>
这样的形式啊
急!急!急!急!急!急! --------------------编程问答-------------------- select from
<isEqual property="type" compareValue="0">
a
</isEqual>
<isEqual property="type" compareValue="1">
b </isEqual>
where id = #id# --------------------编程问答-------------------- <isEqual property="type" compareValue="0">
type也是你传递的一个参数
Map<String, String> paras = new HashMap<String, String>();
paras.put("type", type);
paras.put("id", id);
<select id="select" parameterClass="java.util.Map">
select from
<isEqual property="type" compareValue="0">
a
</isEqual>
<isEqual property="type" compareValue="1">
b
</isEqual>
where id = #id#
</select> --------------------编程问答-------------------- 路过。 --------------------编程问答-------------------- 自顶 2楼的看不懂! --------------------编程问答-------------------- 如果二楼的写法,你看不懂。。。那我也不知道怎么帮你了。
解释一下吧
<isEqual property="type" compareValue="0">
a
</isEqual>
相当于Java中
if(type.equals("0")){
str += "a"
}
再不懂,没办法了 --------------------编程问答-------------------- 回楼上
我指的是当a不等于b的方面这种情况发生的时候
a!=b的反面
不是a=b啊
你俩写成<isEqual property="type" compareValue="0">
a
</isEqual>
这个逻辑漏掉了很多种a为其他值得情况! --------------------编程问答-------------------- 回楼上
我指的是 "当a不等于b的反面" 这种情况发生的时候
a!=b的反面
不是a=b啊
你俩写成<isEqual property="type" compareValue="0">
a
</isEqual>
这个逻辑漏掉了很多种a为其他值的情况!
逻辑有问题,就像
白的反面 只是 不白
不能说成黑啊 --------------------编程问答-------------------- 再次自顶 懂的帮! --------------------编程问答-------------------- 你逻辑关系没学好,,,在这个里面,你的else里面的语句,就是A Equal B,, --------------------编程问答--------------------
其实你被自己的伪代码迷惑了。
if(a==b){
select sql2;
}else{
select sql1;
}
应该跟你的伪代码是等效的吧。
翻译成ibatis就是
<isEqual property="a" compareValue="b">
sql2
</isEqual>
<isNotEqual property="a" compareValue="b">
sql1
</isNotEqual> --------------------编程问答-------------------- 擦,楼上这一堆人就这逻辑还写代码呢。。。 --------------------编程问答-------------------- 一元条件元素
一元条件元素检查属性的状态是否符合特定的条件。
一元条件元素的属性:
prepend - 可被覆盖的 SQL 语句组成部分,添加在语句的前面(可选)
property - 被比较的属性(必选)
<isPropertyAvailable> 检查是否存在该属性(存在 parameter bean 的属性) 。
<isNotPropertyAvailable> 检查是否不存在该属性(不存在 parameter bean 的属性) 。
<isNull> 检查属性是否为 null。
<isNotNull> 检查属性是否不为 null。
<isEmpty> 检查 Collection.size()的值,属性的 String 或 String.valueOf()值,
是否为 null或空( “”或size() < 1) 。
<isNotEmpty> 检查 Collection.size()的值,属性的 String 或 String.valueOf()值,
是否不为 null 或不为空( “”或 size() > 0) 。
例子:
<isNotEmpty prepend=”AND” property=”firstName” >
FIRST_NAME=#firstName#
</isNotEmpty>
人家给你A和B,你就只会传个A和B,对吧?
你就不能自己判断一下A和B,给ibatis传个自己定义的参数进去? --------------------编程问答--------------------
你的伪代码是
if(a!=b){
select sql1;
}else{
select sql2;
}
按你的意思这样写也是对的
if(a==b){
select sql2;
}else{
select sql1;
}
好了,你说这种情况漏掉了很多种a为其他值的情况
那你的伪代码怎么能是if..else..呢?
白的反面是不白,不能说成黑,那也有可能是红黄蓝绿
你是不是该把你的伪代码改成switch语句 --------------------编程问答-------------------- 大家这么热心帮,帮到白眼狼了啊
补充:Java , Java EE