Не удалось установить параметры для сопоставления ParameterMapping {property, modeIN, javaTypeclass java.util.Date - PullRequest
0 голосов
/ 24 декабря 2018

сообщение об ошибке:

вложенное исключение: org.apache.ibatis.type.TypeException: не удалось установить> параметры для сопоставления: ParameterMapping {property = 'signIn', mode = IN,> javaType= класс java.util.Date, jdbcType = null, numericScale = null,> resultMapId = 'null', jdbcTypeName = 'null', выражение = 'null'}.Причина: org.apache.ibatis.type.TypeException: Ошибка установки ненулевого значения для параметра # 4 с JdbcType null.Попробуйте установить другой JdbcType для этого параметра или другое свойство конфигурации.Причина: java.sql.SQLException: Индекс параметра вне диапазона (4> число параметров, которое является 3).

xml

    <select id="selectSignRecordList" parameterType="SignRecord" resultMap="SignRecordResult">
        <include refid="selectSignRecordVo"/>
        <where>  
            <if test="id != null  and id != '' "> and id_ = #{id}</if>
             <if test="promiseId != null  and promiseId != '' "> and promise_id = #{promiseId}</if>
             <if test="userId != null  and userId != '' "> and user_id = #{userId}</if>
             <if test="signIn != null">
              and sign_in =#{signIn,jdbcType=DATE}
                 --and sign_in  = date_format(  #{signIn}  , '%Y-%m-%d' )
--                  AND date_format(sign_in,'%y%m%d') = date_format(#{signIn},'%y%m%d')
--                  <![CDATA[   and DATE_FORMAT(sign_in, '%Y-%m-%d')=  DATE_FORMAT(#{signIn}, '%Y-%m-%d')   ]]>
--                  AND date(sign_in) = date(#{signIn,jdbcType=DATE})
              </if>
             <if test="signStatus != null  and signStatus != '' "> and sign_status = #{signStatus}</if>
             <if test="createBy != null  and createBy != '' "> and create_by = #{createBy}</if>
             <if test="createTime != null "> and create_time = #{createTime}</if>
             <if test="updateBy != null  and updateBy != '' "> and update_by = #{updateBy}</if>
             <if test="updateTime != null "> and update_time = #{updateTime}</if>
             <if test="remark != null  and remark != '' "> and remark = #{remark}</if>
         </where>
    </select>

вход - java.util.Date

При передаче в параметре ошибка

1 Ответ

0 голосов
/ 26 декабря 2018

Скорее всего, проблема в том, что -- - это начало комментария в SQL, но mybatis не знает об этом.Эта (и все аналогичные) строка:

--           AND date(sign_in) = date(#{signIn,jdbcType=DATE})

вызывает проблему, поскольку mybatis пытается установить параметр в подготовленном операторе здесь, но ваша СУБД игнорирует этот фрагмент запроса, поэтому этот параметр для него не существует.Следовательно, появляется сообщение об ошибке о том, что фактическое число параметров (известных БД) меньше, чем пытается установить клиент (mybatis).

Для решения проблемы используйте комментарии xml вместо комментариев SQLнапример:

    <select id="selectSignRecordList" parameterType="SignRecord" resultMap="SignRecordResult">
    <include refid="selectSignRecordVo"/>
    <where>  
        <if test="id != null  and id != '' "> and id_ = #{id}</if>
         <if test="promiseId != null  and promiseId != '' "> and promise_id = #{promiseId}</if>
         <if test="userId != null  and userId != '' "> and user_id = #{userId}</if>
         <if test="signIn != null">
          and sign_in =#{signIn,jdbcType=DATE}
             <!-- and sign_in  = date_format(  #{signIn}  , '%Y-%m-%d' )
              AND date_format(sign_in,'%y%m%d') = date_format(#{signIn},'%y%m%d')
              <![CDATA[   and DATE_FORMAT(sign_in, '%Y-%m-%d')=  DATE_FORMAT(#{signIn}, '%Y-%m-%d')   ]]>
              AND date(sign_in) = date(#{signIn,jdbcType=DATE})
             --> 
          </if>
         <if test="signStatus != null  and signStatus != '' "> and sign_status = #{signStatus}</if>
         <if test="createBy != null  and createBy != '' "> and create_by = #{createBy}</if>
         <if test="createTime != null "> and create_time = #{createTime}</if>
         <if test="updateBy != null  and updateBy != '' "> and update_by = #{updateBy}</if>
         <if test="updateTime != null "> and update_time = #{updateTime}</if>
         <if test="remark != null  and remark != '' "> and remark = #{remark}</if>
     </where>
</select>

В этом случае mybatis вообще не будет включать закомментированный фрагмент в запрос SQL и не будет пытаться установить параметры.

...