2014-10-30 63 views
1

您好我正在使用ibatis 2并试图查询3种类型的参数的表。下面 是代码在ibatis中使用条款

<parameterMap id="getSearchLateJob_Param" class="java.util.HashMap"> 
    <parameter property="jobSet" javaType="java.lang.String" jdbcType="VARCHAR"/> 
    <parameter property="job" javaType="java.lang.String" jdbcType="VARCHAR"/> 
    <!-- <parameter property = "currentJobStatusStrArr" javaType="java.lang.String" jdbcType="VARCHAR"/> --> 
    <parameter property = "currentJobStatusArr" javaType="java.util.List" jdbcType="ARRAY"/> 
</parameterMap> 

<statement id="getSearchLateJob" parameterMap="getSearchLateJob_Param" resultMap="getCurrentJob_r"> 
    select a.JOBSET as "JOBSET", 
     a.JOB as "JOB", 
     a.JOB_NO as "JOB_NO", 
     a.QUALIFIER as "QUALIFIER", 
     b.JOB_AVG as "JOB_AVG", 
     a.STATUS as "STATUS" 
    from CA_JOB_STATUS a,JOB_AVG b 
    where a.JOBSET = b.JOBSET 
     and a.JOB=b.JOB 
     and a.JOBSET like ? 
     and a.JOB like ?  
     <!-- and a.STATUS in --> 
     <dynamic prepend="and a.STATUS in "> 
      <iterate property= "currentJobStatusArr" open="(" close=")" conjunction=","> 
       #currentJobStatusArr[]# 
      </iterate> 
     </dynamic> 
    order by a.END_TIME desc, a.START_TIME desc           
</statement> 

它仍然让我对输入参数没有设置索引错误2

请帮忙,什么是错的这种做法。

+0

也许是因为你缺少你的parameterMap的其他需要的参数。你把你的查询:JOBSET,JOB,JOB_NO,QUALIFIER,JOB_AVG和STATUS,并且在你的地图上只有:jobSet,job和currentJobStatusArr。在iBatis上,您应该在地图中放入等效参数。 – 2014-10-30 14:02:33

+0

no no ...查询工作正常,如果我删除列表参数。而对于那些参数,它只是一个选择,我不会发送任何输入。 – Alpesh003 2014-10-30 14:33:03

回答

0

我忽略了parameterMap的属性完全并修改了语句下面:

 <statement id="getSearchLateJob" parameterClass="map" resultMap="getCurrentJob_r"> 
     select a.JOBSET as "JOBSET", 
     a.JOB as "JOB", 
     a.JOB_NO as "JOB_NO", 
     a.QUALIFIER as "QUALIFIER", 
     case when year(a.START_TIME) = 1900 then null else a.START_TIME end as "EXPECTED_START_TIME", 
     case when year(a.END_TIME) = 1900 then null else a.END_TIME end as "END_TIME", 
     datediff(mi,a.START_TIME,a.END_TIME) as "DURATION", 
     b.JOB_AVG as "JOB_AVG", 
     a.STATUS as "STATUS" 
    from CA_JOB_STATUS a,JOB_AVG b 
    where a.JOBSET = b.JOBSET 
     and a.JOB=b.JOB 
     and a.JOBSET like #jobSet:VARCHAR# 
     and a.JOB like #job:VARCHAR#  
     <!-- and a.STATUS in --> 
     <dynamic prepend="and a.STATUS in "> 
     <iterate property= "currentJobStatusArr" open="(" close=")" conjunction=","> 
     #currentJobStatusArr[]:VARCHAR# 
     </iterate> 
     </dynamic> 
    order by a.END_TIME desc, a.START_TIME desc           
</statement>