Mybatis(生命周期 )
生命周期和作用域
生命周期和作用域,是至关重要的,因为错误的使用导致非常严重并发问题

对象声明周期和依赖注入框架
依赖注入框架可以创建线程安全的,基于事务的SqlSession和映射器,并将它们直接注入到你的bean中,因此可以直接忽略它们的声明周期。如果对如何通过依赖注入框架来使用MyBatis感兴趣,可以研究一下MyBatis或者MyBatis-Guice两个子项目。
SqlSessionFactoryBuilder(工厂)
这个类可以被实例化,使用和丢弃,一旦创建了SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder实例的最佳作用域是方法作用域(也就是局部方法变量)。你可以重用SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例,但是最好还是不要让其一直存在,以保证所有的XML解析资源可以被释放给更重的事情(一旦创建了SqlSessionFactory,就不需要它了,局部变量)。
sqlSessionFactory(数据库连接对象,说白了就是数据库连接池)
SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃或重新创建另一个实例。使用SqlSessionFactory的最佳实践实在应用运行期间不要重复创建多次,多次 重建SqlSessionFactory被视为一种代码"坏味道"(bad smell)。因此SqlSessionFactory的最佳作用域是应用作用域。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。
sqlSession(连接到连接池的一个请求)
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不是线程安全,因此是不能被共享的,所以它的最佳作用域是请求或方法作用域。绝不能将SqlSession实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。也绝不能将SqlSession实例的引用放在任何类型的托管作用域中,比如:Servlet框架中的HttpSession。如果你现在正在使用一web框架,要考虑SqlSession放在要一个和HTTP请求对象相似的作用域中。换句话,每次收到的HTTP请求,就可以打开一个SqlSession,返回一个响应,就关闭它。这个关闭操作时很重要的,你应该把这个关闭操作放到finally块以确保每次都能执行关闭。

这里的Mapper,就代表一个具体的业务。
Mybatis(生命周期 )的更多相关文章
- Java 笔记——MyBatis 生命周期
1.MyBatis 的生命周期 MyBatis的核心组件分为4个部分. SqlSessionFactoryBuilder (构造器): 它会根据配置或者代码来生成SqISessionFactory,采 ...
- MyBatis 生命周期
一.SqlSessionFactoryBuilder SqlSessionFactoryBuilder是利用XML或是Java编码获得资源来构建SqlSessionFactory的,通过他可以构建多个 ...
- MyBatis中主要类的生命周期和应用范围
转自:http://ccchhhlll1988-163-com.iteye.com/blog/1420026 MyBatis中常用的类就要数SqlSessionFactoryBuilder.SqlSe ...
- MyBatis之八:需要说明的几个java api的生命周期以及封装
学习mybatis不得不了解SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession.这里主要是讲解它们的生命周期以及一般最佳实践. 一般来说对象的生 ...
- MyBatis源码解析【3】生命周期
经过之前的项目构建,我们已经得到了一个可以使用的最基本的项目. 其中已经包括整个执行的过程.但是我们在完成之后也遇到了很多问题,我们就要慢慢的一步步解决这些问题. 讲道理,今天我们其实应该直接开始看源 ...
- MyBatis 作用域(Scope)和生命周期
SqlSessionFactoryBuilder SqlSessionFactoryBuilder的作用是创建SqlSessionFactory.一旦创建了SqlSessionFactory,就不再需 ...
- MyBatis的生命周期
MyBatis的生命周期 所谓的生命周期就是第一个对象应该存活的时间,比如一些对象一次用完后就要关闭,使它们被Java虚拟机(JVM)销毁,以避免继续占用资源,所以我们会根据每一个组件的作用去确定其生 ...
- MyBatis 作用域和生命周期
理解到目前为止所讨论的类的作用域和生命周期是非常重要的.如果使用不当可导致严重的并发性问题. SqlSessionFactoryBuilder 这个类可以在任何时候被实例化.使用和销毁.一旦您创造了 ...
- 【Mybatis】Mybatis元素生命周期
一.SqlSessionFactoryBuilder SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个 ...
- MyBatis的适用场景和生命周期
MyBatis使用场景 对比Hibernate和MyBatis是我们常见的话题,Hibernate作为常用的ORM框架,它使用起来简单易懂,对于SQL语言的封装,让对于SQL并不是很熟练的程序员也可以 ...
随机推荐
- 新员工入职,前端基础环境变量的配置!node、nvm、vue-cli的安装和下载
1.安装nvm及配置 首先下载nvm不要下载node,如果电脑已经有node的话需要卸载node,并使用命令提示符来查看node的位置(where node)手动删除 nvm下载链接:https:// ...
- Netty之数据解码
一.概况 作为Java世界使用最广泛的网络通信框架Netty,其性能和效率是有目共睹的,好多大公司都在使用如苹果.谷歌.Facebook.Twitter.阿里巴巴等,所以不仅仅是因为Netty有高效的 ...
- ☆常用的Sql语句汇总(DDL/DML)
常用的sql语句汇总 1.获取所有表名.表信息 里面有表注释 数据库种类 sql 备注 mysql -- 获取所有表名.视图名show tables-- 获取 dev_test_data数据库 所有表 ...
- C++ | 类继承
1. 概述 C++有3种继承方式:公有继承(public).保护继承(protected).私有继承(private). 一个B类继承于A类,或称从类A派生类B.这样的话,类A称为基类(父类),类B称 ...
- 用go设计开发一个自己的轻量级登录库/框架吧(项目维护篇)
用go设计开发一个自己的轻量级登录库/框架吧(项目维护篇) 本篇将开始讲讲开发库/框架的最开始阶段,也就是搭建一个项目 源码:weloe/token-go: a light login library ...
- 2020-10-03:java中satb和tlab有什么区别?
福哥答案2020-10-03:#福大大架构师每日一题# 简单回答:satb: snapshot-at-the-beginning,快照.tlab:thread local allocation buf ...
- POJ - 2251 地下城主
You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...
- 洛谷 P8742题解
简单版(P2347)传送门 原题传送门 有一道类似的题目(P2347),先扯一扯~ 1.P2347 题目分析 动态规划入门题(01背包可行性问题)~ 我们设 \(dp_j\) 为能否用砝码称出 \(j ...
- super在python 2.7和Python3中的使用
重写是继承机制中的重要内容,对于构造方法尤为重要.构造方法用来初始化新建对象的状态,大多数子类不仅要有自己的初始化代码,还要拥有超类的初始化代码.如果一个类的构造方法被重写,那么就需要调用超类的构造方 ...
- Java二维数组以及多维数组的定义及应用
一.二维数组以及多维数组 1.二维数组的定义: 在一维数组中定义每一个元素也是一个数组元素,这样的数组称为"二维数组" 多维数组就是在一维数组上再次定义二维数组或三位数组等 ...