`

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
分享到:
评论

相关推荐

    Spring+Mybatis整合事务回滚

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

    spring与mybatis整合实现事务配置

    struts2、spring与mybatis整合 包含简单登录功能 事务配置,运行JunitTestVillageArticle的modify测试。配置说明参考注释

    mybatis与spring整合的全部jar包

    该压缩包包含了mybatis与spring整合的全部jar包,为学习整合ssm框架提供一个环境

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

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

    Spring+SpringMVC+Mybatis框架搭建(含事务管理)

    Spring+SpringMVC+Mybatis框架结合mysql,包含事务管理

    mybatis-spring整合包.zip

    单纯的mybtais框架来开发web项目,还是比较吃力。 需要引入spring来管理我们的javabean。并且有事务管理等。 这个是较全的mybatis和spring的整合包。

    springmybatis

    mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。 首先建立一个名字为 MyBaits 的 dynamic web project 1. 现阶段,你可以...

    mybatis-3.2.5.jar及mybatis-spring-1.2.2.jar

    MyBatis-Spring 会帮助你... 而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。

    spring整合mybatis(非springMVC)

    简单的spring整合mybatis,包含事务管理,日志输出

    spring mybatis atomikos 多库分布式事务demo

    spring mybatis atomikos 分布式事务 自己写的小demo 包含依赖包

    mybatis-spring-1.2.2.jar

    而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。 正如第二版那样,Spring ...

    用于与Spring Boot集成的MyBatis工具包(高分项目).zip

    Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + ...它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程

    Spring、SpringMVC和Mybatis框架整合包

    另外spring的aop,事务管理等等都是我们经常用到的。 MyBatis:如果你问我它跟鼎鼎大名的Hibernate有什么区别?我只想说,他更符合我的需求。第一,它能自由控制sql,这会让有数据库经验的人(当然不是说我啦捂脸)...

    maven-spring-mybatis

    spring整合mybatis,用到的jar包交给maven管理,测试包括:增删改查,分页查询和事务回滚。

    struts2.3+spring3.2+mybatis3.1整合注释行事务处理(含jar包)

    一个完整的s2sm整合项目,含jar包。使用注释型事务管理。给大家参考了。

    Mybatis连接池、事务控制和复杂查询(基于XML配置).zip

    Mybatis连接池、事务控制和复杂查询相关的案例源码。包含详细注释。

    MyBatis3.2.3帮助文档(中文版).zip

    XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。XML 配置文件的详细内容后面...

    mybatis思维导图总结.zip

    下载 MyBatis jar 包。 配置 mybatis-config.xml 文件。 数据库连接和事务管理配置。 3. 映射器文件 映射器文件的结构和作用。 SQL 映射的基本元素:、、、。 参数映射和结果映射。 4. 动态 SQL 使用 、、、...

    springMVC+Mybatis3.1+spring3.1.2包含事务,注解,拦截器

    springMVC+Mybatis3.1+spring3.1.2(包含事务详解,代码诠释,含数据库文件) 展示了增、删、改、查、注解、拦截器、spring事务配置(亲测成功),sql文 件!!赶紧来下载给好评!!! web project 完全可以跑起来!...

    MyBatis-Flex: 一个优雅的 MyBatis 增强框架

    更灵动,MyBatis-Flex 支持多主键、多表查询、逻辑删除、乐观锁、数据脱敏、数据加密、多数据源、分库分表、字段权限、 字段加密、多租户、事务管理、SQL 审计... 等等等等。 这一切,免费且灵动。

Global site tag (gtag.js) - Google Analytics