mybatis的两个核心对象SqlSessionFactory和SqlSession对象

使用MyBatis框架时,主要涉及两个核心对象:SqlSessionFactorySqlSession

因为mybatis是通过mybatis.xml配置文件来进行初始化的,它通过配置文件构建会话工厂SqlSessionFactory,进而通过会话工厂构建一个sqlsession会话,此时就可以通过这个会话向数据库发送sql语句进行操作了。

SqlSessionFactory是MyBatis框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession。SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。

通过配置xml文件构建会话工厂

InputStream inputStream = Resources.getResourceAsStream("配置文件位置");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);                        

注意:SqlSessionFactory对象是线程安全的,它一旦被创建,在整个应用执行期间都会存在。如果我们多次的创建同一个数据库的SqlSessionFactory,那么此数据库的资源将很容易被耗尽。 为此,通常每一个数据库都会只对应一个SqlSessionFactory,所以在构建SqlSessionFactory实例时,建议使用单列模式。

SqlSession是MyBatis框架中另一个重要的对象,它是应用程序与持久层之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作,也就是发送sql进行执行操作。SqlSession对象包含了数据库中所有执行SQL操作的方法,由于其底层封装了JDBC连接,所以可以直接使用其实例来执行已映射的SQL语句。

注意:每一个线程都应该有一个自己的SqlSession实例,并且该实例是不能被共享的。同时,SqlSession实例也是线程不安全的,因此其使用范围最好在一次请求或一个方法中, 绝不能将其放在一个类的静态字段、实例字段或任何类型的管理范围(如Servlet的HttpSession)中使用。 使用完SqlSession对象后要及时关闭,通常可以将其放在finally块中关闭。

 

参见:https://www.cnblogs.com/wxdestiny/p/9743686.html


原文地址:https://www.cnblogs.com/jasonboren/p/10516238.html