Mybatis語法錯誤的一個坑
阿新 • • 發佈:2019-01-28
前言
為什麼說是一個坑呢?是因為這個錯誤實在是比較難出現,只有在特定的場合才會出現,是關於Mybatis語法錯誤的一個問題,說到底,其實就是一個小逗號的事情。
問題描述
先來看一段sql:
<update id="updateByPrimaryKeySelective" parameterType="com.weimob.mengdian.promotion.dao.model.PromotionInfo">
update promotion_info set
<if test="title != null" >
title = #{title,jdbcType=VARCHAR},
</if>
<if test="startTime != null">
start_time = #{startTime,jdbcType=TIMESTAMP},
</if>
<if test="endTime != null">
end_time = #{endTime,jdbcType=TIMESTAMP},
</if >
<if test="promotionType != null">
promotion_type = #{promotionType,jdbcType=INTEGER},
</if>
<if test="status != null">
status = #{status,jdbcType=INTEGER},
</if>
<if test="isAllGoods != null">
is_all_goods = #{isAllGoods,jdbcType=BIT},
</if >
<if test="version != null">
version = #{version,jdbcType=VARCHAR},
</if>
<if test="isDeleted != null">
is_deleted = #{isDeleted,jdbcType=BIT},
</if>
<if test="createUserId != null">
create_user_id = #{createUserId,jdbcType=BIGINT},
</if>
<if test="bannerImage != null">
banner_image = #{bannerImage,jdbcType=VARCHAR},
</if>
<if test="merchantId != null">
merchant_id = #{merchantId,jdbcType=BIGINT}
</if>
where id = #{id}
/*promotionInfo.updateByPrimaryKeySelective*/
</update>
這一段sql乍一看是沒有什麼問題啊,但是,當一種特殊的情況就是當傳入的最後一個欄位為空的時候,就會出現一個問題,那就是前一個欄位的逗號就會多出來。這時候自然而然就報出語法錯誤了。
解決方案
解決的方案呢實際上也是非常簡單,那就是保證最後一個欄位一定不為空。
總結
看來使用動態sql一定也要注意某些特殊的情況,否則害死自己了!還有排查錯誤必須要各種的推敲,我只能對Mybatis說一句,受教了!