增加(自动提交事务)
int result= runner.update(" insert into student_info values(?,?,?,?)",new Object [ ] {6,"name6","loc6","psw6"} );
System.out.print(result);
删除(自动提交事务)
int result= runner.update(" delete from student_info where id=?",2 );
System.out.print(result);
手动提交事务:
转账,应该分两步,先减张三的钱,再给李四加钱。要么同时成功,要么同时失败。
步骤:
如果既要保证数据安全,又要保证性能,可以使用threadlocal
Connection不可再分,一个connection只能完成一次增删改查,而且完成之后就提交,但是我需要多次增删改查,再提交,就要用到threadlocal,在第一个dao操作时 真正的创建了一个connection对象,然后在其他几次dao操作时,借助t1的本身特性 自动将该connection复制多个(connection只创建了一个,因此该connection中的所有操作 必然对应于同一个事务)并且t1将connection在使用层面复制了多个,因此可以同时完成多个dao操作,提交只提交一次。
Threadlocal:为每个线程复制一个副本,每个线程可以访问自己内部的副本,别名线程本地变量
Set() 给t1中存放一个变量
Get() 从t1中获取变量(副本)
Remove() 删除副本
对于数据库来说,一个连接对应一个事务,一个事务可以包含多个dml操作(增删改查)
所有对象.方法都需要判断是不是为空
事务流程:开启事务(将自动提交变为手动提交就是开启事务)
进行各种dml操作 正常 将刚才所有dml全部提交
失败(异常)将刚才所有dml全部回滚(全部失败