mybatis update数据时无异常但没更新成功;update异常时如数据超出大小限制,造成死锁
没更新的问题原因:
sqlSession.commit();
没执行commit,但官方文档里有这样的描述:“默认情况下 MyBatis 不会自动提交事务,除非它侦测到有插入、更新或删除操作改变了数据库。”
源码:
<update id="updateTest" parameterType="cn.td.user.TestModel"> //TestModel是一个JavaBean
update test_table set test_case_suc_num = #{test_case_suc_num} where test_name = #{test_name} </update>
public void updateAllInfo(List<TestModel> list) throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); for(TestModel testModel : list){ System.out.println(testModel); sqlSession.update("cn.td.dao.updatetest",testModel); sqlSession.commit(); } sqlSession.close(); }
以上的java代码中update异常会造成 数据库死锁,导致下次无法正常更新。
死锁的概念就是类似git中的lock,操作残留 或者 互斥。
解决办法:
public void updateAllInfo(List<TestModel> list) throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlFactory(); SqlSession sqlSession = sqlSessionFactory.openSession(); for(TestModel testModel : list){ System.out.println(testModel); try { sqlSession.update("cn.td.dao.updatetest",testModel); } catch (Exception e) { sqlSession.rollback(); e.printStackTrace(); } sqlSession.commit(); } sqlSession.close(); }
事务回滚。
作者:小德cyj
出处:http://www.cnblogs.com/dongzhuangdian
欢迎转载,希望注明出处