mybatis update数据时无异常但没更新成功
Posted 小德cyj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis 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(); }
事务回滚。
以上是关于mybatis update数据时无异常但没更新成功的主要内容,如果未能解决你的问题,请参考以下文章
最近用MyBatis做开发的时候发现,MyBatis有个小小的缺点,不支持批量update?