Mybatis事务管理SqlSession
SqlSession对象
- getMapper(DAO.class):获取Mapper (DAO接口的实例)
- 事务管理
手动提交事务
factory.openSession()
或factory.openSession(false)
- 完成一系列操作
sqlSession.commit()
- 如果操作期间出错,通过
trycatch
,抛出异常,使用sqlSession.rollback()
回滚
自动提交事务
factory.openSession(true)
- 完成操作,此处进行的数据操作,应保证数据的一致性,如果有中间的某一个操作出错,不会回滚之前的操作,就破坏了数据的一致性
- 即使通过
trycatch
,抛出异常,使用sqlSession.rollback()
回滚,也只是回滚出错的那一条操作,之前的操作已经自动提交了
封装Mybatis的SqlSession
public class MyBatisUtil {private static SqlSessionFactory factory;private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();static {try {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");factory = new SqlSessionFactoryBuilder().build(is);} catch (IOException e) {e.printStackTrace();}}private static SqlSession getSqlSession(boolean isAutoCommit){SqlSession sqlSession = threadLocal.get();if( sqlSession == null ){// 通过SqlSessionFactory调用openSession方法,获取sqlSession对象时,可以通过参数设置事务是否自动提交// factory.openSession(true) 自动提交// factory.openSession() 或 factory.openSession(false) 手动提交sqlSession = factory.openSession(isAutoCommit);threadLocal.set(sqlSession);}return sqlSession;}public static SqlSessionFactory getFactory(){return factory;}public static SqlSession getSqlSession(){// 返回sqlSession对象,因此希望进行事务管理,所以使用手动提交return getSqlSession(false);}public static <T extends Object> T getMapper(Class<T> c){// 不对外输出获取sqlSession对象,因此不想进行事务管理,所以使用自动提交return getSqlSession(true).getMapper(c);}
}
在测试类中使用
@org.junit.Test
public void insertStudent() {// 手动事务管理SqlSession sqlSession = MyBatisUtil.getSqlSession();// 获取sqlSession对象,就默认开启事务try{// 通过会话,获取DAO对象StudentDao studentDao = sqlSession.getMapper(StudentDao.class);// 调用被测试方法Student student = new Student(0, "10004", "张三", "男", 20);int i = studentDao.insertStudent(student);// 手动提交事务:如果一个中间的某一个操作出错,就不会执行commit,于是就会执行rollback,取消之前的操作// 自动提交事务:每一个操作都会提交,当中间的某一个操作出错,不会回滚之前的操作// 如果有多个操作,需要手动提交事务,否则会破坏数据的一致性// 操作完成并成功后,需要手动提交事务,同步到数据库sqlSession.commit();}catch(Exception e){// 操作出现异常,调用rollback进行回滚sqlSession.rollback();}
}
@Test
public void queryStudentList() {try{StudentDao studentDao = MyBatisUtil.getMapper(StudentDao.class);List<Student> students = studentDao.queryStudentList();}catch(Exception e){// 操作出现异常,调用rollback进行回滚sqlSession.rollback();}
}
目录结构
Mybatis事务管理SqlSession相关推荐
- MyBatis事务管理解析:颠覆你心中对事务的理解
MyBatis事务管理解析:颠覆你心中对事务的理解! 1 .说到数据库事务,人们脑海里自然不自然的就会浮现出事务的四大特性.四大隔离级别.七大传播特性. 四大还好说,问题是七大传播特性是哪儿来的?是S ...
- spring,mybatis事务管理配置与@Transactional注解使用[转]
spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至 ...
- spring,mybatis事务管理配置与@Transactional注解使用
spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framewor ...
- MyBatis 事务管理解析和有关事务的几种特殊场景表现
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:干掉 Navicat:这个 IDEA 的兄弟真香!个人原创100W+访问量博客:点击前往,查看更多 作者 | 祖 ...
- 实用 | Mybatis事务管理
一.事务类型 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]") JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置, ...
- 详解 MyBatis 事务管理,彻底颠覆你对事务的理解!
来源:https://my.oschina.net/zudajun/blog/666764 前言 说到数据库事务,人们脑海里自然不自然的就会浮现出事务的四大特性.四大隔离级别.七大传播特性.四大还好说 ...
- SpringMVC+MyBatis 事务管理一
前言 spring事务管理包含两种情况,编程式事务.声明式事务.而声明式事务又包括基于注解@Transactional和tx+aop的方式.那么本文先分析编程式注解事务和基于注解的声明式事务. 编程式 ...
- springboot整合mybatis 事务管理
1.创建项目 写项目名字和项目地址 2.修改maven地址 3.添加pom文件 <?xml version="1.0" encoding="UTF-8"? ...
- spring boot配置mybatis和事务管理
spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...
- 深入理解MyBatis(七)—MyBatis事务
深入理解MyBatis(七)-MyBatis事务 MyBatis可以通过XML配置文件设定是否进行事务管理, 事务管理主要包括事务的提交,回滚等: 本文主要介绍了事务的入口,MyBatis事务操作对数 ...
最新文章
- CentOS 6.3 64bit上测试ATS 5.3.0中的正则刷新插件regex_revalidate
- 运行报表时提示输入用户名和密码
- 关于Angularjs中自定义指令一些有价值的细节和技巧
- JavaSE学习笔记(二十九)—— 其它流
- [T-ARA][Goodbye, OK]
- 录屏 模拟器_Scrcpy-在电脑无缝操作手机 (投屏/录屏/免Root)
- (转)AS3 Socket
- 排序:插入排序与希尔排序
- mysql gps海拔表_GPS海拔表
- vsftpd虚拟用户使用实验报告
- wpf之lable右下角放关闭图标
- HDU3032_NimOrNotNim解题报告
- Java数据类型转换超详解
- 修改Android Studio 项目名称
- 2020Web应用防火墙 (WAF)榜单TOP30
- (一)互联智能车载终端系统,介绍,构思,搭建
- win10安装steam有损计算机,win10系统steam磁盘写入错误怎么办 steam磁盘写入错误的解决教程...
- 浅析Spring之sessionFactory
- Mysql的日志详解(详细)
- 像素、灰度、RGB、分辨率
热门文章
- php怎么显示好看的字体颜色,网页中字体颜色设置方法的总结
- 特征点法光流法直接法
- 参与者模式(Actor model)
- 阿里巴巴内部面试资料
- 资源集成视角解读项目管理-合同类型
- 雷曼兄弟 算法_雷曼如何失去双腿
- Mac下phpstorm 浏览器出现 502 bad gateway 解决办法
- python docx删除word段落
- java:begin_end,C++ STL begin()和end()函数用法
- vue+elementUI实现空格或回车在input内添加小标签的功能