在編寫動態sql時 trim的屬性寫錯了,如下圖:
錯誤示范:
(接口的xml配置文件中:)
1 <update id="modifyBill" parameterType="Bill"> 2 update smbms_bill 3 <trim suffix="set" prefixOverrides="," prefix="where id=#{id}"> 4 <if test="billCode!=null">billCode=#{billCode},</if> 5 <if test="productName!=null">productName=#{productName},</if> 6 <if test="productDesc!=null">productDesc=#{productDesc}</if> 7 </trim> 8 </update>
報錯日志:
Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where id=3 billCode='33333',
//可以看到日志中打印出來的sql語句也是有錯的,如下:
### SQL: update smbms_bill where id=? billCode=?, productName=?, productDesc=? set
正確的示范:
接口的xml配置文件中:
<!--最后一個沒有逗號~~~~~--> <update id="modifyBill" parameterType="Bill"> update smbms_bill <trim prefix="set" prefixOverrides="," suffix="where id=#{id}"> <if test="billCode!=null">billCode=#{billCode},</if> <if test="productName!=null">productName=#{productName},</if> <if test="productDesc!=null">productDesc=#{productDesc}</if> </trim> </update>
打印出來的sql語句:
[com.xbf.dao.bill.BillMapper.modifyBill]-==> Preparing: update smbms_bill set billCode=?, productName=?, productDesc=? where id=?
總結:(網上找的圖,感覺說的很清晰!)
prefix:字首 eg:set
prefixOverrides:字首的替換 eg: ,
suffix:后綴 eg:where id=#{ id }