为什么session.commit引起事务的提交,session.insert和delete底层到底是什么

本文深入探讨了事务提交机制,详细解释了如何通过设置参数来控制事务的提交过程,并提供了具体的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public void commit() {
    commit(false);
  }
//force为假
  public void commit(boolean force) {
    try {
//导致commit(为真)
      executor.commit(isCommitOrRollbackRequired(force));
      dirty = false;
    } catch (Exception e) {
      throw ExceptionFactory.wrapException("Error committing transaction.  Cause: " + e, e);
    } finally {
      ErrorContext.instance().reset();
    }
  }

public void commit(boolean required) throws SQLException {
    if (closed) throw new ExecutorException("Cannot commit, transaction is already closed");
    clearLocalCache();
    flushStatements();
//required为真,进行回滚
    if (required) {
      transaction.commit();
    }
  }
底层都是Update语句
package demo.mybatis.mapper; import demo.mybatis.Utils.MybatisUtils; import demo.pojo.Page; import demo.pojo.Order; import org.apache.ibatis.session.SqlSession; import java.util.List; public class OrderMapper { public static void main(String[] args) { Order order_ = getOrderInfoByOrderName("张三"); System.out.println(order_); } public static Order getOrderInfoByOrderName(String ordername) { SqlSession sqlSession = MybatisUtils.getSqlSession(); // 调用insert方法插入 Order order_ = sqlSession.selectOne("order.getOrderInfoByOrderName", ordername); sqlSession.commit(); // 关闭SqlSession sqlSession.close(); return order_; } public static List<Order> getOrderList(Page page) { SqlSession sqlSession = MybatisUtils.getSqlSession(); // 调用insert方法插入 List<Order> list = sqlSession.selectList("order.getOrderList", page); sqlSession.commit(); // 关闭SqlSession sqlSession.close(); return list; } public static Page getCount(Page page) { SqlSession sqlSession = MybatisUtils.getSqlSession(); // 调用insert方法插入 Page page_ = sqlSession.selectOne("order.getCount", page); sqlSession.commit(); // 关闭SqlSession sqlSession.close(); return page_; } public static Order getOrderInfoById(int id) { SqlSession sqlSession = MybatisUtils.getSqlSession(); // 调用insert方法插入 Order order_ = sqlSession.selectOne("order.getOrderInfoById", id); sqlSession.commit(); // 关闭SqlSession sqlSession.close(); return order_; } public static int deleteOrderById(int id) { SqlSession sqlSession = MybatisUtils.getSqlSession(); // 调用insert方法插入 int k = sqlSession.delete("order.deleteOrderById", id); sqlSession.commit(); // 关闭SqlSession sqlSession.close(); return k; } public static int updateOrder(Order order) { SqlSession sqlSession = MybatisUtils.getSqlSession(); // 调用insert方法插入 int k = sqlSession.update("order.updateOrder", order); sqlSession.commit(); // 关闭SqlSession sqlSession.close(); return k; } public static int addOrder(Order order) { SqlSession sqlSession = MybatisUtils.getSqlSession(); // 调用insert方法插入 int k = sqlSession.update("order.addOrder", order); sqlSession.commit(); // 关闭SqlSession sqlSession.close(); return k; } } 这段代码有什么问题?为什么新建订单保存不了
06-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值