1.事物的定义:

是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。

2,事物的特性:

一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。

3. mybatis中的事物

  3.1, 在 mybatis 中默认是关闭了 JDBC 的自动提交功能
    3.1.1 每一个 SqlSession 默认都是不自动提交事务.
    3.1.2 session.commit()提交事务.
    3.1.3 openSession(true);自动提交.setAutoCommit(true);

  3.2  mybatis 底层是对 JDBC 的封装.

    3.2.1 JDBC 中 executeUpdate()执行新增,删除,修改的 SQL.返回值 int,表示受影响的行数.

    3.2.2 mybatis 中<insert> <delete> <update>标签没有 resultType 属性,认为返回值都是 int

  3.3 在 openSession()时 Mybatis 会创建 SqlSession 时同时创建一个Transaction(事务对象),同时     autoCommit 都为 false,如果出现异常,应该 session.rollback()回滚事务. 在mybatis中,事物的自动提交被关闭了。并且在mybatis中,在同一个sqlSession中的所有的操作都在一个事物中,

    //加载配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//使用工厂设计模式 【注意】以后sqlSessionFactory都会被spring 管理,不需要我们自己创建
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in); //获取sqlSession
SqlSession sqlSession=sqlSessionFactory.openSession();
    try {
sqlSession.insert("包名.insert标签id", "参数");
sqlSession.commit();//提交事物
}catch(Exception e) {
sqlSession.rollback();//回滚事物
}finally {
sqlSession.close();
}

  在jdbc中,conn的autoCommit是true的,所以在jdbc中每一条语句都是一个事物,若是想多条语句组成一个事物,需要手动设置,手动提交。

public void JdbcTransfer() {
java.sql.Connection conn = null;
try{
conn = conn =DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID","username","userpwd");
// 将自动提交设置为 false,
//若设置为 true 则数据库将会把每一次数据更新认定为一个事务并自动提交
conn.setAutoCommit(false); stmt = conn.createStatement();
// 将 A 账户中的金额减少 500
stmt.execute("\
update t_account set amount = amount - 500 where account_id = 'A'");
// 将 B 账户中的金额增加 500
stmt.execute("\
update t_account set amount = amount + 500 where account_id = 'B'"); // 提交事务
conn.commit();
// 事务提交:转账的两步操作同时成功
} catch(SQLException sqle){
try{
// 发生异常,回滚在本事务中的操做
conn.rollback();
// 事务回滚:转账的两步操作完全撤销
stmt.close();
conn.close();
}catch(Exception ignore){ }
sqle.printStackTrace();
}
}

  

最新文章

  1. Spring学习(三)
  2. nandaom
  3. Python对时间的转换
  4. IIS7/IIS7.5中目录执行权限的设置方法
  5. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [1] 单例模式连接数据库
  6. powerdesigner中将表的name在生成建表sql时生成注释
  7. Visual Studio 创建代码注释默认模版方法
  8. 打开的IE网页不是最大化的解决方法
  9. libeXosip2(2-2) -- eXosip2 network API
  10. 精读《javascript高级程序设计》笔记二——变量、作用域、内存以及引用类型
  11. css为第几个倍数元素添加样式
  12. LAPM 相关实验01
  13. centos6安装openresty
  14. IntelliJ IDEA 主题、字体、编辑区主题、文件编码修改
  15. 省市区三级联动,JS实现
  16. 《统计学习方法》笔记(8):AdaBoost算法
  17. 【Loadrunner】Loadrunner Vuser 两种运行方式【error:not enough memory解决方案】
  18. phpqrcode 分别生成普通、带logo、带背景带logo二维码
  19. MySQL半同步复制配置
  20. Java集合 之Map(HashMap、Hashtable 、TreeMap、WeakHashMap )理解(new)

热门文章

  1. VIM常见命令
  2. phpStudy安装教程
  3. c# 文件过大时清空原有内容重新写入
  4. 明明白白你的Linux服务器——日志篇
  5. Wiki服务器的配置
  6. rbac之 权限粒度控制到按钮级别
  7. SSH Secure Shell链接Ubuntu报错Server responded &quot;Algorithm negotiation failed&quot;
  8. 关于EOF:
  9. Python 列表推导实例
  10. dangerouslySetInnerHTMl