事务处理之二(编程中的事务)

这篇文章主要介绍在我们开发过程中怎么处理事务,当然编程语言仅限java.

文章内容会从不使用任何框架直接用jdbc怎么处理事务,到使用mybatis,hibernate逐一讲解。

 

一、JDBC事务。

       JDBC事务是通过Connection对象来完成事务的,主要的逻辑如下

//得到Connection对象后,设置不自动提交
conn.setAutoCommit(false);
//手动提交
conn.commit();
//事务的回滚
conn.rollback(); 

 

二、mybatis事务

下面的内容来自文档

http://mybatis.github.io/mybatis-3/configuration.html#environments

Mybatis支持两种类型的事务JDBC|MANAGED,我们可以在下面的内容中设置

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
    </dataSource>
  </environment>
</environments>

 注意到transaction中有个property的属性,这个属性主要用途在于在type=MANAGED的时候

<transactionManager type="MANAGED">
  <property name="closeConnection" value="false"/>
</transactionManager>

 因为默认情况下连接会关闭,但是有些容器不希望关闭,它们可能还会用到容器做一些其它的事情,所以可以通过这个属性来控制。

 

使用有以下几个步骤

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream(file));
SqlSession session = sqlSessionFactory.openSession(false); //设置不自动提交
try {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  mapper.updateBlog(blog);
  mapper.increaseOperation();
  session.commit(); //手动提交
}catch(Exception e){
  e.printStackTrace();
  session.rollback(); //回滚
} finally {
  session.close();
}

 仔细一对比发现基本一样嘛,其实框架用的也是基本的api,所以无论在任何时候都需要重视基础知识。

 想知道mybatis是如何实现事务管理的,点MyBatis事务管理源码

 

 三、hibernate事务

 //TODO

你可能感兴趣的:(事务处理之二(编程中的事务))