SqlSession的使用范围---Mybatis学习笔记(五)
2017-08-16 17:27
429 查看
介绍:
SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等。 通过SqlSessionFactory创建SqlSession,而SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建。
SqlSessionFactoryBuilder:
SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要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); } else if (ExecutorType.REUSE == executorType) { executor = new ReuseExecutor(this, transaction); } else { executor = new SimpleExecutor(this, transaction); } if (cacheEnabled) { executor = new CachingExecutor(executor, autoCommit); }1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
5、 SqlSession的实现类即DefaultSqlSession,此对象中对操作数据库实质上用的是Executor
结论:
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。
打开一个 SqlSession;使用完毕就要关闭它。通常把这个关闭操作放到 finally 块中以确保每次都能执行关闭。如下:
SqlSession session = sqlSessionFactory.openSession(); try { // do work } finally { session.close(); }
相关文章推荐
- SqlSession的使用范围---Mybatis学习笔记(五)
- cocos2d-x学习笔记——各种遍历与范围for语句的使用
- 2、MyBatis.NET学习笔记之CodeSmith使用
- Mybatis学习笔记七:动态SQL语句的使用
- springmvc学习笔记--mybatis--使用插件自动生成实体和mapper
- MyBatis第二讲学习笔记 ,使用MyBatis对表执行增删改查操作——基于注解的实现
- mybatis学习笔记(六)使用generator生成mybatis基础配置代码和目录结构
- C#使用mybatis学习笔记
- mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现
- mybatis学习笔记(六)使用generator生成mybatis基础配置代码和目录结构
- MyBatis学习笔记(二)——标签使用
- Java学习笔记32:Spring整合mybatis使用
- Mybatis学习笔记之二:在项目中使用Mybatis
- J2EE系列之MyBatis学习笔记(三)-- 使用XML配置SQL映射器
- mybatis学习笔记,mapper代理方法的使用
- Mybatis学习笔记--SqlSessionFactory、SqlSession等
- SpringMVC + Spring + MyBatis 学习笔记:在类和方法上都使用RequestMapping如何访问
- J2EE系列之MyBatis学习笔记(十)-- 使用注解配置sql映射器
- springmvc学习笔记--mybatis--使用插件自动生成实体和mapper
- Mybatis学习笔记一:环境搭建以及简单使用