快捷搜索:  汽车  科技

mybatis如何管理session(Mybatis开发-SqlSession创建过程)

mybatis如何管理session(Mybatis开发-SqlSession创建过程)然后会创建一个DefaultSqlSession的实例,构造方法中传入Configuration、Executor 和 autoCommit的值具体创建过程:Mybatis开发 - Executor的创建及作用接下来详细查看openSession()方法,方法返回一个SqlSession对象,没有输入参数方法中会调用openSessionFromDataSource方法,传入的出参数ExecutorType从Configuration对象中获取,TransactionIsolationLevel为null,autoCommit默认为false;该方法不会自动提交,如果需要自动提交则可调用openSession(true)方法 public SqlSession openSession() { return this.openSessionFromDataSource(th

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的方法

mybatis如何管理session(Mybatis开发-SqlSession创建过程)(1)

SqlSessionFactory类方法

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是一个接口,在接口中定义了一系列数据库操作方法

mybatis如何管理session(Mybatis开发-SqlSession创建过程)(2)

4.总结

SqlSession的默认实现类是DefaultSqlSession,在创建过程中,主要通过配置文件对应的Configuration对象来创建Executor对象,然后将Configuration、Executor和autoCommit通过构造方法进行赋值

猜您喜欢: