mybatis默认开启事务

  以前使用JDBC的时候,如果要开启事务,我们需要调用conn.setAutoCommit(false)方法来关闭自动提交,之后才能进行事务操作,否则每一次对数据库的操作都会持久化到磁盘中。

  而mybatis呢,如果底层使用JDBC(在mybatis.xml中配置的transactionManager标签的type设为jdbc的话),那么,mybatis会默认开启事务,也就是说,mybatis默认是关闭自动提交的。

  在mybatis中,如果我们执行了数据库的修改操作(insert、update、delete),必须调用session.commit()方法,所做的修改才能持久化到磁盘。

怎么让mybatis开启自动提交(关闭事务)

  在openSession()时,传入true,即可关闭事务。

举个例子

  有PeopleMapp.xml,配置有一个insert命令:

<insert id="insertPeople" parameterType="People">
insert into people values (null, #{name}, #{age})
</insert>

  测试代码如下:

package lixin.gan.test;

import java.io.IOException;
import java.io.InputStream; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import lixin.gan.pojo.People; public class TestTransaction {
public static void main(String[] args){
InputStream config = null; try {
config = Resources.getResourceAsStream("mybatis.xml");
} catch (IOException e) {
e.printStackTrace();
} SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); SqlSession session = factory.openSession(); People p = new People();
p.setName("王五3");
p.setAge(88); try {
int affected_rows =session.insert("lixin.gan.mapper.PeopleMapper.insertPeople", p);
if (affected_rows <= 0) {
throw new Exception("第1个操作失败");
} else {
System.out.println("第1个操作成功");
}
} catch (Exception e) {
// 捕获到异常,将操作回滚
//e.printStackTrace();
session.rollback();
} p.setName("王五222222222222222222222222222");
p.setAge(77);
try {
int affected_rows =session.insert("lixin.gan.mapper.PeopleMapper.insertPeople", p);
if (affected_rows <= 0) {
throw new Exception("第2个操作失败");
} else {
System.out.println("第2个操作成功");
}
} catch (Exception e) {
session.rollback();
} session.commit();
session.close();
System.out.println("over"); }
}

  第二次调用对象的setName设置的name属性值,超过了people表中的name字段长度,所以插入操作会失败,于是会抛出异常,一场被捕获后,当前的session就会本次session存在期间的所有操作。

  

注意事项

  1、要想使用事务,请将数据库表的引擎设置为InnoDb,别用MyISAM。

  2、如果是DML,请一定要记得commit(),否则操作不会生效。

mybatis 使用事务处理的更多相关文章

  1. MyBatis的事务处理

    先来假设这样一个问题:如果数据库里面有一个用户表和一个作家表,那么当要添加一条数据到作家表中时,作家表的id必须是用户表中的其中一个id,因为作家一定也要是一个用户.这时就涉及到事务处理. 在上一篇博 ...

  2. Mybatis批量事务处理

    /** * 批量提交数据 * @param sqlSessionFactory * @param mybatisSQLId SQL语句在Mapper XML文件中的ID * @param commit ...

  3. springmvc+spring-security+mybatis +redis +solar框架抽取

    参考文章:Spring MVC 3 深入总结: 第二章 Spring MVC入门 —— 跟开涛学SpringMVC 参考博客:http://www.cnblogs.com/liukemng/categ ...

  4. SpringDataJPA与Mybatis的优异性

    首先表达个人观点,JPA必然是首选的. 个人认为仅仅讨论两者使用起来有何区别,何者更加方便,不足以真正的比较这两个框架.要评判出更加优秀的方案,我觉得可以从软件设计的角度来评判.个人对 mybatis ...

  5. spring-3-spring整合mybatis

    版本和依赖 MyBatis-Spring 需要以下版本: maven依赖 <dependency> <groupId>org.mybatis</groupId> & ...

  6. 【SpringBoot】数据库操作之整合Mybaties和事务讲解

    ========================8.数据库操作之整合Mybaties和事务讲解 ================================ 1.SpringBoot2.x持久化数 ...

  7. 数据库操作之整合Mybaties和事务讲解 5节课

    1.SpringBoot2.x持久化数据方式介绍          简介:介绍近几年常用的访问数据库的方式和优缺点 1.原始java访问数据库             开发流程麻烦           ...

  8. 零基础快速入门SpringBoot2.0教程 (三)

    一.SpringBoot Starter讲解 简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-boot/doc ...

  9. Spring Boot 2.x零基础入门到高级实战教程

    一.零基础快速入门SpringBoot2.0 1.SpringBoot2.x课程全套介绍和高手系列知识点 简介:介绍SpringBoot2.x课程大纲章节 java基础,jdk环境,maven基础 2 ...

随机推荐

  1. [Go] golang原子函数锁住共享资源

    1.atomic包里的几个函数以及sync包里的mutex类型,提供了解决方案2.原子函数能够以很底层的加锁机制来同步访问整型变量和指针3.atomic.AddInt64(&counter, ...

  2. AI书单

    1.<TensorFlow实战>   黄文坚 2.<Machine Learning> [美]Tom Mitchell 3.<机器学习> 周志华  

  3. C#设计模式之二十二备忘录模式(Memento Pattern)【行为型】

    一.引言 今天我们开始讲“行为型”设计模式的第十个模式,该模式是[备忘录模式],英文名称是:Memento Pattern.按老规矩,先从名称上来看看这个模式,个人的最初理解就是对某个对象的状态进行保 ...

  4. LeetCode 176. 第二高的薪水(MySQL版)

    0.前言 最近刷LeetCode 刷数据库题目 由于数据库课上的是SQL,而MySQL有许多自己的函数的,怕把刚学会的函数忘记 特在此记录! 1.题目 编写一个 SQL 查询,获取 Employee ...

  5. 2018年终总结之AI领域开源框架汇总

    2018年终总结之AI领域开源框架汇总 [稍显活跃的第一季度] 2018.3.04——OpenAI公布 “后见之明经验复现(Hindsight Experience Reply, HER)”的开源算法 ...

  6. arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  7. 互联网安全中心(CIS)发布新版20大安全控制

    这些最佳实践最初由SANS研究所提出,名为“SANS关键控制”,是各类公司企业不可或缺的安全控制措施.通过采纳这些控制方法,公司企业可防止绝大部分的网络攻击. 有效网络防御的20条关键安全控制 对上一 ...

  8. 基础环境系列:PHP7.3.0并连接pache/IIS和MySQL

    版本: php7.3.0 MySQL8.0.12 Apache2.4 IIS8 一.下载PHP  1.下载php3.7 PHP版本:php7.3(7.3.0) 下载地址:https://windows ...

  9. HttpWebRequest 改为 HttpClient 踩坑记-请求头设置

    HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...

  10. PSP总结报告

    此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2556] 回顾0 alpha阶段前 团队名称:可以低头,但没必要 团队项 ...