本文共 3467 字,大约阅读时间需要 11 分钟。
public interface Transaction { //获取数据库连接 java.sql.Connection getConnection() throws java.sql.SQLException; //提交 void commit() throws java.sql.SQLException; //回滚 void rollback() throws java.sql.SQLException; //关闭数据库连接 void close() throws java.sql.SQLException;}
4.MyBatis的事务管理分类:
事务工厂的创建:MyBatis的事务创建是由org.apache.ibatis.transaction.TransactionFactory事务工厂来完成的,会根据的type类型来创建是JdbcTransactionFactory工厂还是ManagedTransactionFactory工厂,其源码如下:
public interface TransactionFactory { void setProperties(java.util.Properties properties);org.apache.ibatis.transaction.Transaction newTransaction(java.sql.Connection connection);org.apache.ibatis.transaction.Transaction newTransaction(javax.sql.DataSource dataSource, org.apache.ibatis.session.TransactionIsolationLevel transactionIsolationLevel, boolean b);}
事务工厂TransactionFactory:通过TransactionFactory可以获得到Transaction对象的实例,以JdbcTransaction为例,其源码如下:
ublic class JdbcTransactionFactory implements TransactionFactory { public void setProperties(Properties props) { } //根据给定的数据库连接Connection创建Transaction public Transaction newTransaction(Connection conn) { return new JdbcTransaction(conn); } //根据DataSource、隔离级别和是否自动提交创建Transaction public Transaction newTransaction(DataSource ds, TransactionIsolationLevel level, boolean autoCommit) { return new JdbcTransaction(ds, level, autoCommit); }}
二、MyBatis的缓存机制
1.一级缓存(SqlSession级别) —— 含义:在操作数据库时需要创建SqlSession对象,在对象中有一个HashMap用来存储缓存数据,并且不同的SqlSession之间的缓存数据区域是不会互相影响的。 1.2 作用域:一级缓存的作用域是SqlSession范围,就是当同一个SqlSession中执行两次相同的sql查询语句时,第一次回去数据库中查询数据并写到缓存中,第二次在查询的时候,不会再去数据库中去查询,而是直接在缓存中读取数据。在使用时需要注意:当SqlSession执行DML操作(insert、update、delete)时,MyBatis会清空SqlSession中的一级缓存,这样做的目的是保证缓存中的数据永远是最新的数据,防止出现脏读数据。 2.二级缓存(mapper级别) —— 1.1 含义:使用二级缓存时,多个SqlSession共享一个Mapper的sql语句去操作数据库,得到的数据,同样用HashMap来存储缓存数据,相比较于一级缓存,二级缓存的范围更大,多个SqlSession共享二级缓存,二级缓存时跨SqlSession的 1.2. 作用域:二级缓存的作用域是mapper的同一个namespace,当不同的SqlSession执行相同的namespace下的sql语句,并向sql语句中传递的参数也相同时,第一次回去数据库中查询数据并写到缓存中,第二次在查询的时候,不会再去数据库中去查询,而是直接在缓存中读取数据。 1.3 二级缓存的使用配置:因为MyBatis默认没有开启二级缓存,需要在setting全局参数中开启二级缓存,其mybatis-config.xml配置文件如下:在需要开启二级缓存的mapper文件中加入如下配置:
其上述元素配置详解如下:
转载地址:http://pmrwi.baihongyu.com/