Markdown语法

Markdown已经成为一款流行的文本编辑器。尤其是作为媒体编辑从业者者来说,掌握MarkDown语法,无疑会大大提升工作效率。

以下是我使用Markdown语法发布的博客的文本内容,post在这里是为了提醒自己,时不时学习Markdown语法,以防自己忘记。参见博客
学习Markdown语法。

  在实际的开发工作中,MyBatis已经成为了当下最流行的关系型数据库与实体Model的映射框架。
今天就简单学习一下MyBatis的事务处理部分源码。
> Mybatis事务处理位于 org.apache.ibatis.transaction 下。类图如下:
	![MyBatis事务类图](https://img2018.cnblogs.com/blog/1502746/201810/1502746-20181020201536046-597914394.png)

入口类:
**Transaction**  
>Wraps a database connection. Handles the connection lifecycle that comprises: its creation, preparation, commit/rollback and close.

接口中定义的方法详解
1. Connection getConnection()      获取数据库连接   
2. void commit()       			   事务提交
3. void rollback()  			   事务回滚
4. void close()  				   关闭连接
5. Integer getTimeout()   		   获取超时时间设置

再来看一下,**TransactionFactory**,显然它是创建**Transaction**的工厂类。
1. void setProperties(Properties props);      
2. Transaction newTransaction(Connection conn);   
3. Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit);

**Transaction**有两个实现类,分别是**JdbcTransaction**和**ManagedTransaction**,前者是原生的事务生命周期处理类,而后者是由容器来管理事务的生命周期。这里所指的容器是指Spring或者是Tomcat。

**Connection**对象是通过**DataSource**来获取的,同时会设置数据库事务的隔离级别**TransactionIsolationLevel**。
```Java
protected void openConnection() throws SQLException {

    if (log.isDebugEnabled()) {
      log.debug("Opening JDBC Connection");
    }

    this.connection = this.dataSource.getConnection();
    if (this.level != null) {
      this.connection.setTransactionIsolation(this.level.getLevel());
    }

}
```

**TransactionIsolationLevel**是一个枚举类,维护了一个final类型的int值,来抽象数据库事务的四个级别。

```Java
/**
	事务隔离级别
*/
public enum TransactionIsolationLevel {
  NONE(Connection.TRANSACTION_NONE),                    						//1.none   不要求事务管理     0
  READ_COMMITTED(Connection.TRANSACTION_READ_COMMITTED), 						//2.read_committed   已提交读  1
  READ_UNCOMMITTED(Connection.TRANSACTION_READ_UNCOMMITTED),					//3 .read_uncomittted  未提交读  2
  REPEATABLE_READ(Connection.TRANSACTION_REPEATABLE_READ),						//4.repeatable_read  可重复读   4
  SERIALIZABLE(Connection.TRANSACTION_SERIALIZABLE);							// 5.sealalizable  可串行化    8

  private final int level;

  private TransactionIsolationLevel(int level) {
    this.level = level;
  }

  public int getLevel() {
    return level;
  }
}
```

在事务处理过程中,还有两个不可或缺的重要角色,**Connection**与**DataSource**。关于这两个类的学习,以后再进行记录和分享。


> BTW,这是我的第一篇博文,这篇文章也是对Markdown语法的学习。



---
> **一个平凡而普通的人,时时都会感到被生活的波涛巨浪所淹没。你会被淹没吗?除非你甘心沉沦。**





posted @ 2018-10-20 22:21  惶然人生  阅读(187)  评论(0)    收藏  举报