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();
    }

事務回滾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM