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 update返回值

最近用MyBatis做开发的时候发现,MyBatis有个小小的缺点,不支持批量update?

最近用MyBatis做开发的时候发现,MyBatis有个小小的缺点,不支持批量update?

mybatis update不生效

mybatis的一种批量更新方法我

MyBatis应用开发(21)用update结点表达数据库记录的更新