SqlSession对象

  • getMapper(DAO.class):获取Mapper (DAO接口的实例)
  • 事务管理

手动提交事务

  1. factory.openSession()factory.openSession(false)
  2. 完成一系列操作
  3. sqlSession.commit()
  4. 如果操作期间出错,通过 trycatch,抛出异常,使用 sqlSession.rollback() 回滚

自动提交事务

  1. factory.openSession(true)
  2. 完成操作,此处进行的数据操作,应保证数据的一致性,如果有中间的某一个操作出错,不会回滚之前的操作,就破坏了数据的一致性
  3. 即使通过 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相关推荐

  1. MyBatis事务管理解析:颠覆你心中对事务的理解

    MyBatis事务管理解析:颠覆你心中对事务的理解! 1 .说到数据库事务,人们脑海里自然不自然的就会浮现出事务的四大特性.四大隔离级别.七大传播特性. 四大还好说,问题是七大传播特性是哪儿来的?是S ...

  2. spring,mybatis事务管理配置与@Transactional注解使用[转]

    spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至 ...

  3. spring,mybatis事务管理配置与@Transactional注解使用

    spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framewor ...

  4. MyBatis 事务管理解析和有关事务的几种特殊场景表现

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:干掉 Navicat:这个 IDEA 的兄弟真香!个人原创100W+访问量博客:点击前往,查看更多 作者 | 祖 ...

  5. 实用 | Mybatis事务管理

    一.事务类型 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]") JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置, ...

  6. 详解 MyBatis 事务管理,彻底颠覆你对事务的理解!

    来源:https://my.oschina.net/zudajun/blog/666764 前言 说到数据库事务,人们脑海里自然不自然的就会浮现出事务的四大特性.四大隔离级别.七大传播特性.四大还好说 ...

  7. SpringMVC+MyBatis 事务管理一

    前言 spring事务管理包含两种情况,编程式事务.声明式事务.而声明式事务又包括基于注解@Transactional和tx+aop的方式.那么本文先分析编程式注解事务和基于注解的声明式事务. 编程式 ...

  8. springboot整合mybatis 事务管理

    1.创建项目 写项目名字和项目地址 2.修改maven地址 3.添加pom文件 <?xml version="1.0" encoding="UTF-8"? ...

  9. spring boot配置mybatis和事务管理

    spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...

  10. 深入理解MyBatis(七)—MyBatis事务

    深入理解MyBatis(七)-MyBatis事务 MyBatis可以通过XML配置文件设定是否进行事务管理, 事务管理主要包括事务的提交,回滚等: 本文主要介绍了事务的入口,MyBatis事务操作对数 ...

最新文章

  1. CentOS 6.3 64bit上测试ATS 5.3.0中的正则刷新插件regex_revalidate
  2. 运行报表时提示输入用户名和密码
  3. 关于Angularjs中自定义指令一些有价值的细节和技巧
  4. JavaSE学习笔记(二十九)—— 其它流
  5. [T-ARA][Goodbye, OK]
  6. 录屏 模拟器_Scrcpy-在电脑无缝操作手机 (投屏/录屏/免Root)
  7. (转)AS3 Socket
  8. 排序:插入排序与希尔排序
  9. mysql gps海拔表_GPS海拔表
  10. vsftpd虚拟用户使用实验报告
  11. wpf之lable右下角放关闭图标
  12. HDU3032_NimOrNotNim解题报告
  13. Java数据类型转换超详解
  14. 修改Android Studio 项目名称
  15. 2020Web应用防火墙 (WAF)榜单TOP30
  16. (一)互联智能车载终端系统,介绍,构思,搭建
  17. win10安装steam有损计算机,win10系统steam磁盘写入错误怎么办 steam磁盘写入错误的解决教程...
  18. 浅析Spring之sessionFactory
  19. Mysql的日志详解(详细)
  20. 像素、灰度、RGB、分辨率

热门文章

  1. php怎么显示好看的字体颜色,网页中字体颜色设置方法的总结
  2. 特征点法光流法直接法
  3. 参与者模式(Actor model)
  4. 阿里巴巴内部面试资料
  5. 资源集成视角解读项目管理-合同类型
  6. 雷曼兄弟 算法_雷曼如何失去双腿
  7. Mac下phpstorm 浏览器出现 502 bad gateway 解决办法
  8. python docx删除word段落
  9. java:begin_end,C++ STL begin()和end()函数用法
  10. vue+elementUI实现空格或回车在input内添加小标签的功能