情况如下:select * from table t
<dynamic prepend="where">
 <isNotEmpty prepend="and" property="a">
                 t.A = #a#
    </isNotEmpty>
 <isNotEmpty prepend="and" property="b">
                 t.B = #b#
    </isNotEmpty><isNotEmpty prepend="and" property="a">
                 t.C = 3
    </isNotEmpty><isNotEmpty prepend="and" property="b">
                 t.C = 3
    </isNotEmpty>

</dynamic>红色的部分要表达的意思就是如果a或着b不会空就把t.C = 3这个条件加上,当然我这样写也可以,如果a和b都不为空,无非就是两个t.C = 3
就是:select * from table t where  t.A = #a# and t.B = #b# and  t.C = 3 and t.C = 3
这样倒是不影响查询,不过,是不是有其它办法来解决这个问题(a或着b不会空就把t.C = 3这个条件加上)

解决方案 »

  1.   

    再加个c参数,c=a+b<isNotEmpty prepend="and" property="c">
    t.C = 3
    </isNotEmpty>
      

  2.   

    再加一个参数c,根据a,b的是否为空来设定c的值,这样是可以的,不过,要在参数传进来的之前做好对c的值的设定的判断。我想问的是ibatis是不是有这样的逻辑条件的判断,可以一次判断两个条件(就像if(a != null || b != null){c =3;}这样的),而不是只能判断一个值的空或不空。
      

  3.   

    1楼已回答你的问题,在外围java再加个参数c,传给ibatis
      

  4.   

    <isNotEmpty prepend="and" property="a" removeFirstPrepend="true">
    t.C = 3
    </isNotEmpty><isNotEmpty prepend="and" property="b" removeFirstPrepend="true">
    t.C = 3
    </isNotEmpty>
      

  5.   

    应该ibatis目前是不支持if(a != null || b != null){c =3;}这样的),希望ibatis3.0可以实现。
      

  6.   

    用ibatis3,3以后支持类似el表达式,比如<if test="a!= null || b!=null">t.C = 3</if>
      

  7.   

    (
    <isNotEmpty prepend="and" property="a">
    t.C = 3</isNotEmpty><isNotEmpty prepend="or" property="b">
    t.C = 3
    </isNotEmpty>)试试了