我传入一个map,语句里边判断如果存在map中有startDate、endDate两个参数,则设置条件,但查询时报错,得不到结果,请大家帮忙诊断下,谢谢了。配置语句如下<select id="getLogs" parameterClass="java.util.HashMap" resultClass="LogItem">
  <![CDATA[select recNum, roleId, roleName, roleDesc
          from (select rownum r, a.OPERLOG_ID logId, a.OPERATOR_NO logOper, 
                       a.OPER_TYPE logType, (select OPER_DESC from OPERTYPE where OPERTYPE_ID = a.OPER_TYPE) logTypeName, 
                       a.OPER_HAPPENTIME logHappenTime, a.OPER_IP logIp, a.OPER_RESULT logResult,
                       Decode(a.OPER_RESULT,0,'失败',1,'成功','失败') as logResultName,
                       a.OPER_REMARK logRe, 
                       sum(1)over() as recNum 
                  from oper_log a 
                  <dynamic prepend="WHERE">
                    <isPropertyAvailable property="startDate">
                     <isNotNull prepend=" and " property="startDate">
                             oper_insert_time >= to_date(#startDate# || ' 00:00:00', 'YYYY-MM-DD hh24:mi:ss') 
                       </isNotNull>
                    </isPropertyAvailable> 
                    
                    <isPropertyAvailable property="endDate">
                     <isNotNull prepend=" and " property="endDate">
                             oper_insert_time <= to_date(#endDate# || ' 23:59:59', 'YYYY-MM-DD hh24:mi:ss') 
                       </isNotNull>
                    </isPropertyAvailable> 
                    
                  </dynamic>
                )c
         where r <= #indEnd# and r > #indStart#]]>
</select>

解决方案 »

  1.   

    已搞定,问题出在我将sql包裹在了<![CDATA[]]>里边,导致ibatis处理的时候会将动态语句不进行处理原样输出,导致语句出错。只需要将<![CDATA[]]>包住有大于、小于号等的语句部分就好了。上边的语句处理如下:
    select recNum, roleId, roleName, roleDesc
    from (select rownum r, a.OPERLOG_ID logId, a.OPERATOR_NO logOper, 
    a.OPER_TYPE logType, (select OPER_DESC from OPERTYPE where OPERTYPE_ID = a.OPER_TYPE) logTypeName, 
    a.OPER_HAPPENTIME logHappenTime, a.OPER_IP logIp, a.OPER_RESULT logResult,
    Decode(a.OPER_RESULT,0,'失败',1,'成功','失败') as logResultName,
    a.OPER_REMARK logRe, 
    sum(1)over() as recNum 
    from oper_log a 
    <dynamic prepend="WHERE">
    <isPropertyAvailable property="startDate">
    <isNotNull prepend=" and " property="startDate">
    oper_insert_time >= to_date(#startDate# || ' 00:00:00', 'YYYY-MM-DD hh24:mi:ss') 
    </isNotNull>
    </isPropertyAvailable> <isPropertyAvailable property="endDate">
    <isNotNull prepend=" and " property="endDate">
    oper_insert_time <= to_date(#endDate# || ' 23:59:59', 'YYYY-MM-DD hh24:mi:ss') 
    </isNotNull>
    </isPropertyAvailable> </dynamic>
    )c
    <![CDATA[where r <= #indEnd# and r > #indStart#]]>
      

  2.   

    你的sql写的好乱,看着费劲,不知道是否是因为发的帖子格式丢了。
    还有sql语句尽量都大写。
      

  3.   

    是挺乱的,不过ibatis是可以配动态sql的