Mybatis-SqlsessionBuilderFactory

    xiaoxiao2021-03-25  73

    SqlSessionFactoryBuilder

             SqlsessionFactoryBuilder用于创建SqlsessionFactory,SqlsessionFactory一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。

    SqlSessionFactory

             SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory。

    SqlSession

             SqlSession是一个面向用户的接口, sqlSession中定义了数据库相关操作,默认使用DefaultSqlSession实现类。

    执行过程如下:

    1、  加载数据源等配置信息

    Environment environment = configuration.getEnvironment();

    2、  创建数据库连接

    3、  创建事务对象

    4、  创建Executor,SqlSession所有操作都是通过Executor完成,mybatis源码如下:

    if (ExecutorType.BATCH == executorType) { executor = newBatchExecutor(this, transaction); } elseif (ExecutorType.REUSE == executorType){ executor = new ReuseExecutor(this, transaction); } else { executor = new SimpleExecutor(this, transaction); } if (cacheEnabled) { executor = newCachingExecutor(executor, autoCommit); }

    5、  SqlSession的实现类即DefaultSqlsession,此对象中对操作数据库实质上用的是Executor

    结论:

             每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。

             打开一个SqlSession;使用完毕就要关闭它。通常把这个关闭操作放到 finally 块中以确保每次都能执行关闭。如下:

    SqlSession session = sqlSessionFactory.openSession(); try { // code } finally { session.close(); }

    转载请注明原文地址: https://ju.6miu.com/read-36156.html

    最新回复(0)