需求是这样的一个界面中,有2个输入框A,B,用户可以只输入A或B,或全输入,或全不输入,也就是4种组合。
然后做查询,A和B输入的值都作为查询条件。然后一个表中有2个字段,col_a,col_b分别对应输入的A和B。关于动态那段,我是这样写的。select * from table <dynamic prepend="">
        <isNotEmpty prepend="where" property="A">
          ( 
           table.col_a=#A#
           <isNotEmpty prepend="and" property="B">
           table.col_b=#B#
           </isNotEmpty>
          )
         </isNotEmpty>
         
         <isEmpty prepend="" property="A" >
          ( 
       <isNotEmpty prepend="where" property="B" >
           table.col_b=#B#
       </isNotEmpty>
           )
         </isEmpty>      </dynamic>        现在的问题是!       如果输入A,则只输入A和输入A和B,2种情况没有问题。
       如果不输入A,则另2种情况都提示sql没有正确结束。      请教了。暂时没配log,没办法打出最终的sql.

解决方案 »

  1.   

    itatis没写过.应该是你判断问题.仔细检查下判断考虑是否周全.你最后拼出来的SQL应该是这样的:
    select * from table where A = XX and B = XX;
    估计是当A没有值输入时,判断里没有把‘and’这个关键字没去掉.而造成了拼出来的是select * from table where and B = XX所以报错.
      

  2.   

    select * from table where A like nvl('用户填写的A值','%') and B  like nvl('用户填写的B值','%');这个语句对你的4种情况都适用 
      

  3.   

    楼主想的太复杂了  你可以这样select * from table_test where 1=1
    <isNotEmpty prepend="and" property="A"> 
              table.col_a=#A# 
    </isNotEmpty> 
    <isNotEmpty prepend="and" property="B"> 
              table.col_b=#B# 
    </isNotEmpty>