Mybatis插入操作 主键自增 返回成功 但是数据库没有数据

插入操作成功,消耗了一个主键,但是数据库没有看到相关数据。一般这种情况说明可能事务没有执行成功,事务回滚了。数据库操作要通过 ACID规则来约束事务,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

MyBatis中的事务是指一系列数据库操作,这些操作要么全部执行成功,要么全部执行失败。如果操作过程中发生错误,所有对数据库的修改都将被回滚,即还原到最初状态。事务是确保数据一致性和完整性的关键机制之一。
在MyBatis中,我们可以通过三种方式来管理事务:

  • 编程式管理事务:在代码中显式开启、提交或回滚事务。
  • 声明式管理事务:通过AOP代理实现事务管理,可以让代码更简洁,更容易维护。
  • 注解式管理事务:通过注解方式管理事务,是声明式管理事务的一种扩展方式。

因为采用的是声明式事务管理(在mybatis-config.xml文件里面配置的),使用的是jdbc的事务管理器,将事务提交给mybatis处理。

但是在使用它的时候,由于我们使用的是SqlSessionFactory这个类的openSession方法来创建实例

。源码如下,可以看到最后那个值默认是false,这个值决定是否自动提交事务,false就意味着不会自动提交,需要我们手动提交

public SqlSession openSession() {
        return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false);
    }

 所以事务执行完毕后,我们手动设置一个事务提交即可。

ps:数据库的查询不需要提交事务,因为它不涉及数据的修改,也就不会影响事务的一致性原则,

所以不需要提交事务。还有有时候可能执行的操作有问题也会回滚,需要结合具体问题进行分析。 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值