4 回答
TA贡献1951条经验 获得超3个赞
首先new不new不是关键,当然这个new是没必要的,关键是你的映射文件是如何写的。
建议是需要更新的字段才出现的sql中。
建议你使用mbg, 会自动生成updateByPrimaryKeySelective这种方法,只更新有值的字段。
TA贡献1779条经验 获得超6个赞
楼上大致正确,但是
1.前者也是通用的,但要多写一些 setXXX 的代码;
2.第二种方式在并发情况下容易导致前面的update失效,除非整个过程加锁:
请求1:
update Student set name="李四";
请求2:
update Student set name="张三",sex=0,weight="120" where id='123';
期望结果:
name="李四",sex=0,weight="120" where id='123'
实际结果:
"张三",sex=0,weight="120" where id='123'
原因:
请求2 setXXX 时,请求1正在执行SQL语句update1,这时候MySQL会加锁。
等到update1执行完后,请求2的SQL语句update2再执行,导致原本update1修改后的
name="李四"又被update2改回了name="张三"。
所以如果要用完整更新,请求2必须在setXXX前加锁,让update1在update2完成后才执行,这样才能避免并发情况下导致前面的update失效的问题。
TA贡献1818条经验 获得超3个赞
写个通用的更新sql,可以用mybatis的条件语句,传值也是传多个值,然后不需要更新的值传null,这样可以避免更新的时候new一个对象,也可以避免没有改动的数据也修改,不过可能字段多了,但是某时只需改一个字段的时候多个参数值为null,不大美观。
添加回答
举报
