SqlSessionFactory这个类是用来干嘛的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlSessionFactory这个类是用来干嘛的?相关的知识,希望对你有一定的参考价值。
SqlSessionFactory是一个sql会话工厂,在这个工厂里面取得一个session会话丢给客户端使用。可以理解为,session是由SqlSessionFactory制造的,需要session的时候直接去工厂里面拿一个,用完了还回来。追问还是不懂,我想请你看看这三个API的作用,
追答第一个可以理解为初始化一个默认的工厂,第二个可以理解为是将配置文件内容转换成流读取,准备送给工厂读取,第三个就是工厂按照第二个读取的配置文件来进行session工厂初始化,第四个就是从工厂内获取一个session会话。
参考技术A一、回答:
1、这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。
2、因此 SqlSessionFactoryBuilder 实例的最佳范围是方法范围(也就是局部方法变量)。
3、你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在以保证所有的 XML 解析资源开放给更重要的事情。
二、拓展:
1、SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。
2、使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。
3、因此 SqlSessionFactory 的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。
参考技术B上面的答法太表面了,我来解释下,SqlSessionFactory与SqlSession都是一个接口,你的问题是SqlSessionFactory是干什么的,我深层次的跟你说下吧:
SqlSessionFactory是通过SqlSessionFactoryBuilder的build方法创建的
而build方法创建的是一个SqlSessionFactory的实现类,叫DefaultSqlSessionFactory
然后这个实现类主要用的设计模式是建造者(build)模式,而里面最终要达到的一个目的是为了创建出DefaultSqlSession,这个是SqlSession的实现类.
前面说了SqlSession也是一个接口,那么SqlSession=SqlSessionFactory.openSession()就相当于SqlSession=DefaultSqlSession这个实现类.
那么这个实现类是干什么的呢?这个实现类可以进行增删查改以及事务操作等.
那么DefaultSqlSession是怎么进行这些操作的呢?答:通过调用Executor执行器.
所以,咱们平时见到的SqlSession.select()等等其实是在操作DefaultSqlSession.select()的方法,而DefaultSqlSession的方法其实也不是就能够实现对数据库进行操作的,而是通过调用Executor执行器来执行
而Executor执行器其实也是一个接口,而在解析配置文件的时候已经解析出来SQL,那么根据一路传过来的SQL以及参数等信息,Executor再调度StatementHandler等对象对数据库进行增删查改操作.
总结:现在你应该明白了吧,其实我们看到的都是表面,你认为的SqlSession能进行数据库操作其实不是的,是它的实现类再调用底层的Executor,底层的Executor再调度相关数据库操作对象才搞定的,而再要深入它的相关对象,那么就深似海了........
以上是关于SqlSessionFactory这个类是用来干嘛的?的主要内容,如果未能解决你的问题,请参考以下文章