在使用ibatis的过程中,很多时候要用的动态SQL,特别是where由为常用。
但是大家在用的时候,就会发现如果全部是带参数的动态条件是一点问题也不会有的,但如果我想以一个写死的条件与动态条件相结合的方式进行查询,我们就会发现动态参数全都不合条件的时候就会出现SQL异常。
得到的SQL语句就是:select * from news t,category s where t.categoryid=s.categoryid and t.flag=0 and order by t.id
这个问题有两种解决办法:
1、通常使用的办法是使用子查询的方式回避这个问题,但当加入分页或者业务逻辑很繁杂的时候,就会出现多层子查询,一方面是不好阅读、理解;另一方面,在运行覆效率上,也不是很优。
2、在</dynamic>前面,where的最后加入一个1=1条件,并用判断只当全部参数不符合条件时成立。
以这种方式便可以得到sql:select * from news t,category s where t.categoryid=s.categoryid and t.flag=0 and 1=1 order by t.id
问题解决了。
这只是我个人的一个思路,办法一定还有很多种,大家见笑了。
这是我在CSDN上的第一篇文字,还请各位大虾多多指教!