Mybatis之SqlSession简析

SqlSession是Mybatis的一个核心类,简单点就是执行sql的,Mybatis的一级缓存应该就在这个级别上的,实际上一级缓存在Executor中实现的,下个文章介绍。

先看看SqlSession中的方法:

对数据库的操作在这个接口中应该都包括了,还有对事务的操作。SqlSession的实现类现在就一个DefaultSqlSession。这个类的实例是从SqlSessionFacotry中创建的,上一个文章说过。

这个实现类的构造方法有几个参数说明一下,

configuration框架级别的配置类,executor是Sql执行器,autoCommit是否自动提交。

public DefaultSqlSession(Configuration configuration, Executor executor, boolean autoCommit) {

this.configuration = configuration;

this.executor = executor;

this.dirty = false;

this.autoCommit = autoCommit;

}

再看一下这个类的select方法,实际上是委托给executor执行。其实对数据的CRUD和对事物的提交和回滚都是委托给executor执行的。

public List selectList(String statement, Object parameter, RowBounds rowBounds) {

try {

MappedStatement ms = configuration.getMappedStatement(statement);

return executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER);

} catch (Exception e) {

throw ExceptionFactory.wrapException("Error querying database. Cause: " + e, e);

} finally {

ErrorContext.instance().reset();

}

}

public void commit(boolean force) {

try {

executor.commit(isCommitOrRollbackRequired(force));

dirty = false;

} catch (Exception e) {

throw ExceptionFactory.wrapException("Error committing transaction. Cause: " + e, e);

} finally {

ErrorContext.instance().reset();

}

}

public void rollback(boolean force) {

try {

executor.rollback(isCommitOrRollbackRequired(force));

dirty = false;

} catch (Exception e) {

throw ExceptionFactory.wrapException("Error rolling back transaction. Cause: " + e, e);

} finally {

ErrorContext.instance().reset();

}

}

下文简析Executor。。。。。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200218A0R9PA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券