需求:从购物车页面点击结算,需要修改 书本 的销量和库存。但是用户很可能买了很多类书,每类书有好几本,如果在java里做循环,则发生多次数据库请求,效率低。
mybatis接受 类型 为list的参数,并支持动态sql,用iterator拼装sql语句。
<update id="batchUpdateAmount" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update books
set salesAmount = salesAmount + #{item.quantity},
storeNumber = storeNumber - #{item.quantity}
where bookId = #{item.book.bookId}
</foreach>
</update>
但是!这样只适用于list中只有一个对象的情况。一旦有多个对象则报错!
为了这个问题苦恼了很久,最后找到了一个解决办法,那就是设置数据库连接属性:allowMultiQueries=true。
jdbc.url=jdbc:mysql://localhost:3306/bookdb?allowMultiQueries=true
意思是允许MySQL同时执行多条SQL语句。
设置好这个,就OK了!