在執行SQL時MyBatis會自動通過對象中的屬性給SQL中參數賦值,它會自動將Java類型轉換成數據庫的類型。而一旦傳入的是null它就無法准確判斷這個類型應該是什么,就有可能將類型轉換錯誤,從而報錯。
要解決這個問題,需要針對這些可能為空的字段,手動指定其轉換時用到的類型。
一般情況下,我們沒有必要挨個字段去識別/判斷它是否可以為空,而是將所有的字段都當做可以為空,全部手動設置轉換類型。
<insert id="save" parameterType="com.tarena.entity.Cost">
insert into cost values(
cost_seq.nextval,
#{name,jdbcType=VARCHAR},
#{base_duration,jdbcType=INTEGER},
#{base_cost,jdbcType=DOUBLE},
#{unit_cost,jdbcType=DOUBLE},
#{status,jdbcType=CHAR},
#{descr,jdbcType=VARCHAR},
#{creatime,jdbcType=TIMESTAMP},
#{startime,jdbcType=TIMESTAMP},
#{cost_type,jdbcType=CHAR}
)
</insert>
