1. 程式人生 > >MyBatis 插入空值時,需要指定JdbcType.如#{name,jdbcType=VARCHAR}

MyBatis 插入空值時,需要指定JdbcType.如#{name,jdbcType=VARCHAR}

在執行SQL時MyBatis會自動通過物件中的屬性給SQL中引數賦值,它會自動將Java型別轉換成資料庫的型別。而一旦傳入的是null它就無法準確判斷這個型別應該是什麼,就有可能將型別轉換錯誤,從而報錯。
要解決這個問題,需要針對這些可能為空的欄位,手動指定其轉換時用到的型別。

一般情況下,我們沒有必要按個欄位去識別/判斷它是否可以為空,而是將所有的欄位都當做可以為空,全部手動設定轉換型別。

  1. <insert id="save"
  2. parameterType="com.tarena.entity.Cost">
  3. insert into cost values(
  4. cost_seq.nextval,
  5. #{name,jdbcType=VARCHAR},
  6. #{base_duration,jdbcType=INTEGER},
  7. #{base_cost,jdbcType=DOUBLE},
  8. #{unit_cost,jdbcType=DOUBLE},
  9. #{status,jdbcType=CHAR},
  10. #{descr,jdbcType=VARCHAR},
  11. #{creatime,jdbcType=TIMESTAMP},
  12. #{startime,jdbcType=TIMESTAMP},
  13. #{cost_type,jdbcType=CHAR}
  14. )
  15. </insert>

其他資料型別參照下圖