1.Myabtis中SqlSession的使用
SqlSession是通过SqlSessionFactory创建的,创建后可以执行一系列的数据库操作,如果不是自动提交且执行了数据库DML语句,需要手动执行commit方法,在使用完后需要将SqlSession显式关闭。
SqlSession session = null;
try {
...
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config);
session = factory.openSession();
...
session.commit();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(session != null) {
session.close();
}
}
2.SqlSessionFactory创建SqlSession
SqlSessionFactory是一个接口,定义了一系列的生成SqlSession的方法
SqlSessionFactory的默认实现是DefaultSqlSessionFactory,DefaultSqlSessionFactory类里面包含了一个Configuration对象,它是通过解析Mybatis配置文件后生成的对象
接下来详细查看openSession()方法,方法返回一个SqlSession对象,没有输入参数
方法中会调用openSessionFromDataSource方法,传入的出参数ExecutorType从Configuration对象中获取,TransactionIsolationLevel为null,autoCommit默认为false;该方法不会自动提交,如果需要自动提交则可调用openSession(true)方法
public SqlSession openSession() {
return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, false);
}
2.1Executor对象创建
在openSessionFromDataSource方法中,会通过Configuration对象获取Environment等信息来创建Executor对象
具体创建过程:Mybatis开发 – Executor的创建及作用
然后会创建一个DefaultSqlSession的实例,构造方法中传入Configuration、Executor 和 autoCommit的值
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
Transaction tx = null;
DefaultSqlSession var8;
try {
Environment environment = this.configuration.getEnvironment();
TransactionFactory transactionFactory = this.getTransactionFactoryFromEnvironment(environment);
tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
Executor executor = this.configuration.newExecutor(tx, execType);
var8 = new DefaultSqlSession(this.configuration, executor, autoCommit);
} catch (Exception var12) {
this.closeTransaction(tx);
throw ExceptionFactory.wrapException("Error opening session. Cause: " + var12, var12);
} finally {
ErrorContext.instance().reset();
}
return var8;
}
3.DefaultSqlSession对象创建
DefaultSqlSession是SqlSession的默认实现类
在构造方法中,传入Configuration、Executor和autoCommit对象进行赋值
public class DefaultSqlSession implements SqlSession {
private final Configuration configuration;
private final Executor executor;
private final boolean autoCommit;
private boolean dirty;
private List<Cursor<?>> cursorList;
public DefaultSqlSession(Configuration configuration, Executor executor, boolean autoCommit) {
this.configuration = configuration;
this.executor = executor;
this.dirty = false;
this.autoCommit = autoCommit;
}
...
}
SqlSession是一个接口,在接口中定义了一系列数据库操作方法
4.总结
SqlSession的默认实现类是DefaultSqlSession,在创建过程中,主要通过配置文件对应的Configuration对象来创建Executor对象,然后将Configuration、Executor和autoCommit通过构造方法进行赋值
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/8254.html