当前位置:编程学习 > JAVA >>

求助: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">

</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,, --------------------编程问答--------------------
引用楼主 pangpangxixi 的回复:
比较简单 但是很烦人

加入sql的逻辑(伪代码)是:

if(a!=b){
  select sql1;
}else{
  select sql2;
}

翻译到sqlmap中,该怎么写呢?

只知道一个可以判断相等的节点的写法,
<isNotEqual property="a" compareValue="b">
sql1
</isNotEqual>
这个是判断……

其实你被自己的伪代码迷惑了。

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传个自己定义的参数进去? --------------------编程问答--------------------
引用 7 楼 pangpangxixi 的回复:
回楼上  
我指的是 "当a不等于b的反面" 这种情况发生的时候  
a!=b的反面
不是a=b啊

你俩写成<isEqual property="type" compareValue="0">
a   
</isEqual>
这个逻辑漏掉了很多种a为其他值的情况!

逻辑有问题,就像
白的反面 只是 不白
不能说成黑啊


你的伪代码是
if(a!=b){
  select sql1;
}else{
  select sql2;
}
按你的意思这样写也是对的
if(a==b){
  select sql2;
}else{
  select sql1;
}

好了,你说这种情况漏掉了很多种a为其他值的情况
那你的伪代码怎么能是if..else..呢?
白的反面是不白,不能说成黑,那也有可能是红黄蓝绿
你是不是该把你的伪代码改成switch语句 --------------------编程问答--------------------
引用 13 楼 m751075306 的回复:
Quote: 引用 7 楼 pangpangxixi 的回复:

回楼上  
我指的是 "当a不等于b的反面" 这种情况发生的时候  
a!=b的反面
不是a=b啊

你俩写成<isEqual property="type" compareValue="0">
a   
</isEqual>
这个逻辑漏掉了很多种a为其他值的情况!

逻辑有问题,就像
白的反面 只是 不白
不能说成黑啊


你的伪代码是
if(a!=b){
  select sql1;
}else{
  select sql2;
}
按你的意思这样写也是对的
if(a==b){
  select sql2;
}else{
  select sql1;
}

好了,你说这种情况漏掉了很多种a为其他值的情况
那你的伪代码怎么能是if..else..呢?
白的反面是不白,不能说成黑,那也有可能是红黄蓝绿
你是不是该把你的伪代码改成switch语句
大家这么热心帮,帮到白眼狼了啊
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,