mybatis学习八 事物
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();
}
}
mybatis学习八 事物的更多相关文章
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合(转载)
孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: m ...
- 转载-MyBatis学习总结
MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合 孤傲苍狼 2015-02-07 00:09 阅读:89825 评论:54 MyBatis学习总结(七)——Myba ...
- Mybatis学习手记(一)
年近不惑,为生活所迫,重新开始学习JAVA,计划将公司的开发平台统一到JAVA上来.现公司的技术杂乱,有PB开发的程序要维护.有PYTHON的程序要维护,有.NET的,也有JAVA的,非常不容易形成合 ...
- 转:MyBatis学习总结(Mybatis总结精华文章)
http://www.cnblogs.com/xdp-gacl/tag/MyBatis%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/ 当前标签: MyBatis学习总结 ...
- Mybatis学习笔记大纲
Mybatis学习笔记大纲: 一.MyBatis简介 二.MyBatis-HelloWorld 三.MyBatis-全局配置文件 四.MyBatis-映射文件 五.MyBatis-动态SQL 六.My ...
- Mybatis学习笔记汇总(包括源码和jar包)
博客整理 Mybatis学习笔记(一)--对原生jdbc中问题的总结 Mybatis学习笔记(二)--Mybatis框架 Mybatis学习笔记(三)--入门程序 MyBatis学习笔记(四)--入门 ...
- MyBatis6:MyBatis集成Spring事物管理(下篇)
前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...
- MyBatis学习总结(七)——Mybatis缓存(转载)
孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的 ...
随机推荐
- 笔记-Python中逗号的作用
1.用,去掉额外的换行符
- 基本数据类型(list,tuple)
基本数据类型(list,tuple)内容: 1. 列表2. 列表的增删改查3. 列表的嵌套4. 元组和元组嵌套5. range⼀. 列表1.1 列表的介绍列表是python的基础数据类型之⼀,其他编程 ...
- Django 常见错误总结
1,在 Django 的框架中,从view中对文本文档进行处理的过程中,发现总是找不到对应的 .txt 文件,而在同级目录下面的 tests.py(自己新建的 py 文件)中却能找到,后来发现还是路径 ...
- [LeetCode_94] Binary Tree Inorder Traversal
题目链接 https://leetcode.com/problems/binary-tree-inorder-traversal/ 题意 二叉树的中序遍历 思路 中序遍历:即"左中右&quo ...
- Bootstrap(5)栅格系统
一.移动设备优先 在 HTML5 的项目中,我们做了移动端的项目.它有一份非常重要的 meta,用于设置屏幕和设备等宽以及是否运行用户缩放,及缩放比例的问题. //分别为:屏幕宽度和设备一致.初始缩放 ...
- Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)
1. more第一版 实现基础功能,显示每一页固定24行文本,“q Enter”退出, “Enter” 下一行, “space Enter”下一页. #include<stdio.h> # ...
- Oracle Telnet 1521 失败
作中发现自己的电脑“telnet 127.0.0.1 1521”(注意:不要拼成telnet 127.0.0.1:1521 ) 可以通过,但是使用localhost.主机名来telnet,则失败. 解 ...
- Struts框架之结果页面的跳转
1. 结果页面存在两种方式 * 全局结果页面(有很多时候我们会跳转到同一页面,所以我们可以配置一个全局结果页面,不管什么情况都会跳转到这个页面) > 条件:如果<package>包中 ...
- pycharm 配置支持vue
http://www.cnblogs.com/c-x-m/p/9229199.html
- Java并发-ConcurrentModificationException原因源码分析与解决办法
一.异常原因与异常源码分析 对集合(List.Set.Map)迭代时对其进行修改就会出现java.util.ConcurrentModificationException异常.这里以ArrayList ...