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

    事务回滚。

  • 相关阅读:
    670. Maximum Swap
    653. Two Sum IV
    639. Decode Ways II
    636. Exclusive Time of Functions
    621. Task Scheduler
    572. Subtree of Another Tree
    554. Brick Wall
    543. Diameter of Binary Tree
    535. Encode and Decode TinyURL
    博客园自定义背景图片
  • 原文地址:https://www.cnblogs.com/dongzhuangdian/p/9446407.html
Copyright © 2020-2023  润新知