Скорее всего, проблема в том, что --
- это начало комментария в 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 и не будет пытаться установить параметры.