web-dev-qa-db-ja.com

Mybatis-エラー:マッピングのパラメーターを設定できませんでした

私は次のようにSQLクエリを作成しました

<select id="getReservationByConditions" resultMap="record">
    SELECT *
    FROM (reservation_record r1 LEFT JOIN real_duty_time r2 ON r1.rdt_id = r2.rdt_id) LEFT JOIN  consultant c1 ON r2.con_id = c1.con_id
    WHERE r1.stu_name LIKE '%${stuName}%' AND c1.con_name LIKE '%#{consultName}%'
    <if test="beginDate != null">
        AND r2.rdt_date &gt;= #{beginDate,jdbcType=VARCHAR}
    </if>
    <if test="endDate != null">
        AND r2.rdt_date &lt;= #{endDate,jdbcType=VARCHAR}
    </if>
</select>

そして、パラメータの値は

String stuName = "nike";
String beginDate = "2018-03-01";
String endDate = "2018-06-01";
String consultName = "";

そしてエラーは

org.mybatis.spring.MyBatisSystemException:
nested exception is org.Apache.ibatis.type.TypeException:
Could not set parameters for mapping: ParameterMapping{property='endDate', mode=IN, javaType=class Java.lang.Object, jdbcType=VARCHAR, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. 

Cause: org.Apache.ibatis.type.TypeException: Error setting non null for parameter #3 with JdbcType VARCHAR . 
Try setting a different JdbcType for this parameter or a different configuration property. 

Cause: org.Apache.ibatis.type.TypeException:
Error setting non null for parameter #3 with JdbcType VARCHAR .
Try setting a different JdbcType for this parameter or a different configuration property.

Cause: Java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).

パラメータ「endDate」は正確に文字列タイプであるため、「javaType = classJava.lang.Object」です。

どうすれば修正できますか?

ご協力ありがとう御座います。


Javaマッパーコードは次のとおりです。

List<ReservationRecord> getReservationByConditions(@Param("stuName")String stuName, @Param("beginDate")String beginDate, @Param("endDate")String endDate, @Param("consultName")String consultName);

私は自分のコードの何が問題なのか知っています。 SQLクエリの「%#{consultName}%」は「%$ {consultName}%」である必要があります。私はそれを変更しました、そしてそれはうまく働きます。それは本当にばかげた問題です。もっと気をつけるべきだと思います。

3
范淦祥

文字列ではなく、善意の日付を使用してください。変化する:

#{beginDate,jdbcType=VARCHAR}

ために:

  • #{beginDate,jdbcType=DATE}(時刻なし)、または
  • #{beginDate,jdbcType=TIMESTAMP}(時刻を含める必要がある場合)。

endDateパラメーターにも同じ変更を加えます。

また、適用するJavaパラメーターは次のタイプである必要があります:

  • Java.sql.Date(時間のない日付)、
  • Java.sql.Timestamp(タイムスタンプ)、または
  • Java.util.Date (日時)。
2
The Impaler

回答を再投稿します。

変化する c1.con_name LIKE'%#{consultName}%'toc1.con_name LIKE'%${consultName}%'

注:の代わりに$を使用してください

0
Subin Chalil