在编写动态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 }