问题描述
我写了一个查询语句: SELECT * FROM (SELECT a.*, ROWNUM rn FROM (SELECT * FROM tf_tr_specification where <isNotEmpty property="TechSpecification.speci_no" > speci_no=#TechSpecification.speci_no# </isNotEmpty> <isNotEmpty property="TechSpecification.speci_name" prepend="AND"> speci_name=#TechSpecification.speci_name# </isNotEmpty> <isNotEmpty property="TechSpecification.speci_name" prepend="AND"> speci_name=#TechSpecification.speci_name# </isNotEmpty> <isNotEmpty property="TechSpecification.issue_date" prepend="AND"> ( BETWEEN issue_date=TO_DATE(#TechSpecification.issue_date#, 'YYYY-MM-DD') </isNotEmpty> <isNotEmpty property="TechSpecification.issue_date1" prepend="AND"> issue_date=TO_DATE(#TechSpecification.issue_date1#, 'YYYY-MM-DD') ) </isNotEmpty> <isNotEmpty property="TechSpecification.revise_date" prepend="AND"> (BETWEEN revise_date=TO_DATE(#TechSpecification.revise_date#, 'YYYY-MM-DD') </isNotEmpty> <isNotEmpty property="TechSpecification.revise_date1" prepend="AND"> revise_date2=TO_DATE(#TechSpecification.revise_date1# , 'YYYY-MM-DD') ) </isNotEmpty> ) a) WHERE rn BETWEEN (#Pagination.currentPage#-1)*#Pagination.PAGE_SIZE# AND (#Pagination.currentPage#)*#Pagination.PAGE_SIZE# </select> 但是现在如果第一条查询的那个条件不存在的话,后面每一个都会在前面加一个AND,数据库查询语句就会报错,而且where也不知道加在哪里,这个要怎么处理呢?
解决方案
加入<dynamic> 标签:where 1=1 <dynamic prepend="and"> <isNotEmpty prepand="and" property="TechSpecification.speci_no" > .....</dynamic>
解决方案二:
最好的解决方案就是用dynamic标签,这是ibatis对动态sql的很不错的一个支持。其次单纯的解决第一个查询不存在后面条件多个and可以用where 1=1