ibatis 事务

sqlMap = xmlBuilder.buildSqlMap(reader);
User user = new User();
user.setId(new Integer(1));
user.setName("Erica");
user.setSex(new Integer(0));
sqlMap.update("User.updateUser", user);
 
User user2 = new User();
user2.setId(new Integer(2));
user2.setName("Kevin");
user2.setSex(new Integer(1));
sqlMap.update("User.updateUser", user2);

 

在执行sqlMap.update的时候,ibatis会自动判定当前的运行环境,这里 update操作并没有相对应的事务范围(startTransaction和endTransaction代码块),于是ibatis 将其作为一个单独的事务,并自动提交。对于上面的代码,update 执行了两次,与其相对应,事务也提交了两次(即每个 update操作为一个单独的事务)。
 
不过,值得注意的是,这里的所谓“自动判定”,可能有些误导,ibatis 并没有去检查当前是否已经有事务开启,从而判断当前数据库连接是否设定为自动提交。 实际上,在执行update语句时,sqlMap会检查当前的Session是否已经关联了某个数据库连接,如果没有,则取一个数据库连接,将其AutoCommit属性设为 true,然后执行 update 操作,执行完之后又将这个连接释放。这样,上面两次 update 操作实际上先后获取了两个数据库连接,而不是我们通常所认为的两次 update 操作都基于同一个JDBC Connection。这点在开发时需特别注意。

对 于 多条 SQL 组合 而 成 的一 个 JDBC 事 务 操 作 而 言, 必须 使 用startTransaction、commit和endTransaction 操作以实现整体事务的原子性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值