沒更新的問題原因:
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(); }
事務回滾。