浅谈Mybatis的生命周期

浅谈Mybatis的生命周期

首先我们从官方文档里面可以看到的是SqlSessionFactoryBuilder使用build来创建SqlSessionFactory,然后SqlSessionFactory再使用openSession开启一个会话连接来创建SqlSession对吧。但是过程并没有那么简单。

首先我们来看一下SqlSessionBuilder有什么方法

SqlSessionFactory build(InputStream inputStream)
SqlSessionFactory build(InputStream inputStream, String environment)
SqlSessionFactory build(InputStream inputStream, Properties properties)
SqlSessionFactory build(InputStream inputStream, String env, Properties props)
SqlSessionFactory build(Configuration config)

这些方法其实说白了就是在加载xml文件,也就是说我们在创建SqlSessionFactory对象之前的时候需要读取我们创建的mybatis-config的配置文件。我们是使用这个类来进行一个剖析xml的

XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
var5 = this.build(parser.parse());

这里的parser.parse()其实就是在解析xml文件,它返回的是一个Configuration对象,而这个对象非常重要,我们需要通过它来读取和检查配置文件的信息,还有定位接口的位置啊,调用接口方法。还有就是创建代理类对象等。
我们获取configuration对象之后,就调用了SqlSessionFactoryBuilder的第二个重载方法来创建SqlSessionFactory对象。

然后就来到第二阶段了
我们的SqlSessionFactory就要通过它的方法openSession来创建SqlSession对象。但是,在创建之前,它需要做的是把jdbc环境信息(其实就是我们用的是mysql还是oracle或者其他数据库,都是通过environment的信息来注入java类对象里面的)的注入,这里其实也包括对数据库的连接,连接池的创建等,然后就是创建事务,创建执行器(其实就是执行语句的一些策略,比如batch这种先打包好多个sql再提交上去)。所以说sqlSession是非常强大的。如果我们需要事务自动提交可以在openSession的重载方法上面加上true。

            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);

最后当我们获取mapper之后执行完sqlSession是要立刻关闭的,然后把资源释放。

既然讲到了生命周期,当然也需要讲一下他们的域,也就是可执行的域。通常sqlSession是的域就是在方法域里面,我们在测试方法或者说执行完一个业务之后就需要关闭SqlSession了,而SessionFactory的域是一个全局的域,也就是说它从程序的头到尾都一直存在,为什么呢?因为它需要连接数据库,我们不可能把它关闭了,然后下次又调用,这样耗时耗资源。特别用户多的时候。SqlSessionFactoryBuilder也是方法域,用完就关闭了,后面就没什么用了。

总的来说Mybatis的工具类既是工具类,也很好的描述了Mybatis的生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值