上面写的很清楚,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 对事务的管理弱爆了.
建议增加事务的最大执行时间.
分享到:
相关推荐
花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...
struts2、spring与mybatis整合 包含简单登录功能 事务配置,运行JunitTestVillageArticle的modify测试。配置说明参考注释
该压缩包包含了mybatis与spring整合的全部jar包,为学习整合ssm框架提供一个环境
MyBatis 事务管理解析:颠覆你心中对事务的理解!
Spring+SpringMVC+Mybatis框架结合mysql,包含事务管理
单纯的mybtais框架来开发web项目,还是比较吃力。 需要引入spring来管理我们的javabean。并且有事务管理等。 这个是较全的mybatis和spring的整合包。
mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。 首先建立一个名字为 MyBaits 的 dynamic web project 1. 现阶段,你可以...
MyBatis-Spring 会帮助你... 而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。
简单的spring整合mybatis,包含事务管理,日志输出
spring mybatis atomikos 分布式事务 自己写的小demo 包含依赖包
而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。 正如第二版那样,Spring ...
Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + ...它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程
另外spring的aop,事务管理等等都是我们经常用到的。 MyBatis:如果你问我它跟鼎鼎大名的Hibernate有什么区别?我只想说,他更符合我的需求。第一,它能自由控制sql,这会让有数据库经验的人(当然不是说我啦捂脸)...
spring整合mybatis,用到的jar包交给maven管理,测试包括:增删改查,分页查询和事务回滚。
一个完整的s2sm整合项目,含jar包。使用注释型事务管理。给大家参考了。
Mybatis连接池、事务控制和复杂查询相关的案例源码。包含详细注释。
XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。XML 配置文件的详细内容后面...
下载 MyBatis jar 包。 配置 mybatis-config.xml 文件。 数据库连接和事务管理配置。 3. 映射器文件 映射器文件的结构和作用。 SQL 映射的基本元素:、、、。 参数映射和结果映射。 4. 动态 SQL 使用 、、、...
springMVC+Mybatis3.1+spring3.1.2(包含事务详解,代码诠释,含数据库文件) 展示了增、删、改、查、注解、拦截器、spring事务配置(亲测成功),sql文 件!!赶紧来下载给好评!!! web project 完全可以跑起来!...
更灵动,MyBatis-Flex 支持多主键、多表查询、逻辑删除、乐观锁、数据脱敏、数据加密、多数据源、分库分表、字段权限、 字段加密、多租户、事务管理、SQL 审计... 等等等等。 这一切,免费且灵动。