一、挑选乐观锁语句如下:
<update id="updateNumDirectById"> update tb_goods set goodsnum = goodsnum -1 where id = #{id} </update>
挑选乐观锁语句执行情况如下:
可以看到,没有正确路由到指定表。
二、如果指定update内容赋值,则对比结果如下:
<update id="updateNumDirectById"> update tb_goods set goodsnum = 100 where id = #{id} </update>
明显做了路由分表,很奇怪的一个问题。
解决办法:
一、加括号:
<update id="updateNumDirectById"> update tb_goods set goodsnum = (goodsnum -1) where id = #{id} </update>
可以看到结果:
二、自己定义分表逻辑:
1) serviceImpl long tableId = id%5; baseDao.updateNumById(tableId, id);
2)Dao.java
int updateNumById(@Param("tableId") long tableId, @Param("id") Long id);
3)dao.xml <update id="updateNumById"> update tb_goods_${tableId} set goodsnum = goodsnum -1 where id = #{id} </update>
同样解决此问题。