mybatis的探索过程之
SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession的
作用域和生命周期
SqlSessionFactoyBuilder
SqlSessionFactoryBuilder这个类的作用就是为了创建SqlSessionFactory的,一旦SqlSessionFactory创建完毕,SqlSessionFactoryBuilder就没有存在的价值了,就应该被销毁。所以SqlSessionFactoryBuilder最好的作用域就是方法体内(及作为一个本地方法变量),用完即销毁。生命周期也就是调用方法的开始到结束。
SqlSessionFactory
SqlSessionFactory一旦被创建,就会存在于程序的整个生命周期,也就是只要程序不结束,它就会一直存在,你不会去主动销毁它,因为干嘛要销毁它呢?所以,我们要做的就是不要重复的去创建SqlSessionFactory!单例模式很适合这种情况!
SqlSession
SqlSession实例是不能共享的,并且不是现程安全的,所以它的最好的作用域应该是方法体内,或者是一次请求时,即method或者request,也就是说再收到一次Http请求时,就应该创建一次一个SqlSession实例,那么也就是
说在每次使用完之后我们都需要把它关闭,即调用.close();
代码如下:
综上所述,为了解决这些问题我们为SqlSessionFactory建立单例模式
这样就解决了SqlSessionFactory的单一问题,还用SqlSessionFactoryBuilder的即用即销毁的问题
剩下的就是在调用玩SqlSession之后将其销毁就好了
好啦,说到这里吧,欢迎留言指错!