`

Mybatis 事务包分析

阅读更多
上面写的很清楚,Transaction 是对 database connection 的封装,处理 connection 的生命周期.
创建、准备、提交、回滚和关闭.
public interface Transaction {

  /**
   * Retrieve inner database connection.
   * @return DataBase connection
   * @throws SQLException
   */
  Connection getConnection() throws SQLException;

  /**
   * Commit inner database connection.
   * @throws SQLException
   */
  void commit() throws SQLException;

  /**
   * Rollback inner database connection.
   * @throws SQLException
   */
  void rollback() throws SQLException;

  /**
   * Close inner database connection.
   * @throws SQLException
   */
  void close() throws SQLException;

  /**
   * Get transaction timeout if set.
   * @throws SQLException
   */
  Integer getTimeout() throws SQLException;

}

TransactionFactory 创建事务的工厂.
public interface TransactionFactory {

  /**
   * Sets transaction factory custom properties.
   * @param props
   */
  default void setProperties(Properties props) {
    // NOP
  }

  /**
   * Creates a {@link Transaction} out of an existing connection.
   * @param conn Existing database connection
   * @return Transaction
   * @since 3.1.0
   */
  Transaction newTransaction(Connection conn);

  /**
   * Creates a {@link Transaction} out of a datasource.
   * @param dataSource DataSource to take the connection from
   * @param level Desired isolation level
   * @param autoCommit Desired autocommit
   * @return Transaction
   * @since 3.1.0
   */
  Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit);

}

TransactionException 对事务异常的封装.

我们先看对 JDBC 的封装.
JdbcTransactionFactory 很简单,就是返回一个 JdbcTransaction 的实例.
public class JdbcTransactionFactory implements TransactionFactory {

  @Override
  public Transaction newTransaction(Connection conn) {
    return new JdbcTransaction(conn);
  }

  @Override
  public Transaction newTransaction(DataSource ds, TransactionIsolationLevel level, boolean autoCommit) {
    return new JdbcTransaction(ds, level, autoCommit);
  }
}

看了下 JdbcTransaction 类,发现它就是对 connection 的一层浅浅的封装. 底层的实现还是要靠 connection 来实现. 但是有问题,无法设置事务开启的时长. 比如说一个 sql 执行 10s 还没执行完,它不能返回并抛出异常.

ManagedTransaction 事务是说 Mybatis 自己不实现事务,而是让容器,例如 JBoss 来实现对事务的管理.

所以我们看到的 ManagedTransaction 的 commit/rollback 方法体都是空的.

ManagedTransactionFactory 就是返回 ManagedTransaction 的一个工厂.

看完 Mybatis 的事务包,最大的感触是 Mybatis 对事务的管理弱爆了.

建议增加事务的最大执行时间.



0
1
分享到:
评论

相关推荐

    mybatis核心包+mysql驱动包+mybatis依赖包(完整).zip

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程...而"mybatis核心包+mysql驱动包+mybatis依赖包(完整).zip"这个压缩包提供了学习和使用MyBatis框架所需要的基础组件,为开发者提供了一个便捷的起点。

    Spring+Mybatis整合事务回滚

    花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...

    mybatis jar包

    在Spring框架中,通常会结合MyBatis进行声明式事务管理,简化事务处理代码。 5. **参数映射**:MyBatis支持多种类型的参数映射,包括基本类型、复杂对象、Map等。同时,它可以自动识别和处理参数,避免了手动设置...

    MyBatis的部分jar包

    在提供的压缩包文件中,我们可以看到一系列与MyBatis及其相关技术相关的jar包,这些库是构建基于MyBatis的Java应用所必需的。 1. **druid-1.1.20.jar**:Druid是一个强大的数据库连接池组件,它不仅提供了连接池...

    mybatis jar包.zip

    这个名为"mybatis jar包.zip"的压缩文件包含了不同版本的MySQL连接器,这些连接器是Java应用程序与MySQL数据库进行交互的关键组件。以下是关于MyBatis、Java、MySQL以及它们之间关系的知识点: 1. **MyBatis框架**...

    MySql驱动MyBatis架包,JUnit架包

    要使用MyBatis,你需要在项目中引入这个jar包,并配置MyBatis的全局配置文件(mybatis-config.xml),定义数据源、事务管理器等核心设置。 其次,mysql-connector-java-5.1.7-bin.jar是MySQL的Java驱动程序,它提供...

    mybatis包和源码

    4. 事务管理:MyBatis提供了简单的事务控制,可以在SqlSession中进行开启、提交和回滚操作。 5. 缓存机制:MyBatis支持一级缓存(SqlSession级别)和二级缓存(Mapper级别),提高数据访问效率。 6. 注解支持:从...

    spring_mybatis 整合jar包

    标题"spring_mybatis 整合jar包"指出我们要关注的是一个包含了整合Spring和MyBatis所需库的压缩文件。这通常包括Spring的核心库、Spring的数据库支持库、MyBatis的主库以及可能的其他依赖,如日志、数据库驱动等。这...

    spring+mybatis jar包

    标题“spring+mybatis jar包”指的是将Spring和MyBatis整合所需的jar包集合。在Java项目中,这些jar包是运行Spring和MyBatis框架的基础,它们包含了Spring框架的核心模块和MyBatis的相关组件。这些jar包通常包括以下...

    mybatis架包与源码

    标题中的"mybatis架包与源码"表明我们将探讨MyBatis框架的核心组件和其背后的源代码。MyBatis的架包通常包含以下部分: 1. **核心库(Core Library)**:这是MyBatis框架的基础,包括SqlSession、Executor、Mapper...

    MyBatis官方包.rar

    1. **MyBatis核心库**:mybatis-x.x.x.jar,这是MyBatis的核心库,包含了MyBatis框架的所有主要功能,包括SQL映射、事务管理、执行器等。 2. **MyBatis依赖的库**:可能包含若干个依赖的jar包,如: - slf4j-api-x...

    Mybatis架包.rar

    - **添加依赖**: 将 Mybatis 相关的 JAR 包或者 Maven/Gradle 依赖引入项目。 - **配置 Mybatis**: 创建 mybatis-config.xml 配置文件,设置数据源、事务管理器、SqlSessionFactory 等。 - **创建 Mapper**: 编写...

    MyBatis jar包/依赖包

    8. **asm-3.1.jar**:ASM是一个Java字节码操控和分析框架,MyBatis的CGLIB依赖于ASM来生成和修改字节码。 9. **slf4j-api-1.5.8.jar**:Simple Logging Facade for Java,是另一种日志抽象层,可以和多种日志实现...

    SpringMVC+Spring+MyBatis jar包和配置文件

    在提供的压缩包中,文件可能包括Spring、SpringMVC和MyBatis的jar包,以及相关的配置文件,例如spring-context.xml、web.xml、mybatis-config.xml、Mapper接口和XML文件等。这些文件是整合SSM框架的关键,通过它们...

    mybatis源码分析视频

    本资源“mybatis源码分析视频”是针对MyBatis框架进行深入剖析的教程,通过视频和文档的形式帮助学习者理解其内部工作机制。 1. **MyBatis简介** MyBatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。...

    spring+springmvc+mybatis等架包

    标题中的"spring+springmvc+mybatis等架包"指的是三个主流的Java开源框架:Spring、Spring MVC和MyBatis的集成包。这些框架在Java Web开发中被广泛使用,构建了模型-视图-控制器(MVC)架构的基础。 Spring框架是...

    mybatis的测试架包

    标题 "mybatis的测试架包" 提供了一个关于MyBatis框架测试环境的概述,而描述则强调了这个包的全面性,适用于学习和开发,确保不会因为缺少库而导致问题。从标签 "mybatis 架包" 可以看出,这个压缩包主要包含了与...

    Spring-SpringMVC-Mybatis整合所有jar包

    这个压缩包“Spring-SpringMVC-Mybatis整合所有jar包”包含了这三个框架整合所需的全部依赖,使得开发者能够快速搭建起一个功能完备的后端服务。 1. **Spring框架**:Spring是一个全面的开源应用框架,它提供了对...

Global site tag (gtag.js) - Google Analytics