生命周期和作用域

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

对象声明周期和依赖注入框架

依赖注入框架可以创建线程安全的,基于事务的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(生命周期 )的更多相关文章

  1. Java 笔记——MyBatis 生命周期

    1.MyBatis 的生命周期 MyBatis的核心组件分为4个部分. SqlSessionFactoryBuilder (构造器): 它会根据配置或者代码来生成SqISessionFactory,采 ...

  2. MyBatis 生命周期

    一.SqlSessionFactoryBuilder SqlSessionFactoryBuilder是利用XML或是Java编码获得资源来构建SqlSessionFactory的,通过他可以构建多个 ...

  3. MyBatis中主要类的生命周期和应用范围

    转自:http://ccchhhlll1988-163-com.iteye.com/blog/1420026 MyBatis中常用的类就要数SqlSessionFactoryBuilder.SqlSe ...

  4. MyBatis之八:需要说明的几个java api的生命周期以及封装

    学习mybatis不得不了解SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession.这里主要是讲解它们的生命周期以及一般最佳实践. 一般来说对象的生 ...

  5. MyBatis源码解析【3】生命周期

    经过之前的项目构建,我们已经得到了一个可以使用的最基本的项目. 其中已经包括整个执行的过程.但是我们在完成之后也遇到了很多问题,我们就要慢慢的一步步解决这些问题. 讲道理,今天我们其实应该直接开始看源 ...

  6. MyBatis 作用域(Scope)和生命周期

    SqlSessionFactoryBuilder SqlSessionFactoryBuilder的作用是创建SqlSessionFactory.一旦创建了SqlSessionFactory,就不再需 ...

  7. MyBatis的生命周期

    MyBatis的生命周期 所谓的生命周期就是第一个对象应该存活的时间,比如一些对象一次用完后就要关闭,使它们被Java虚拟机(JVM)销毁,以避免继续占用资源,所以我们会根据每一个组件的作用去确定其生 ...

  8. MyBatis 作用域和生命周期

    理解到目前为止所讨论的类的作用域和生命周期是非常重要的.如果使用不当可导致严重的并发性问题. SqlSessionFactoryBuilder  这个类可以在任何时候被实例化.使用和销毁.一旦您创造了 ...

  9. 【Mybatis】Mybatis元素生命周期

    一.SqlSessionFactoryBuilder SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个 ...

  10. MyBatis的适用场景和生命周期

    MyBatis使用场景 对比Hibernate和MyBatis是我们常见的话题,Hibernate作为常用的ORM框架,它使用起来简单易懂,对于SQL语言的封装,让对于SQL并不是很熟练的程序员也可以 ...

随机推荐

  1. 基于kubeasz部署高可用k8s集群

    在部署高可用k8s之前,我们先来说一说单master架构和多master架构,以及多master架构中各组件工作逻辑 k8s单master架构 提示:这种单master节点的架构,通常只用于测试环境, ...

  2. ERROR: libfdk_aac not found和ERROR: libmp3lame >= 3.98.3 not dound

    ERROR: libfdk_aac not found和ERROR: libmp3lame >= 3.98.3 not dound 编译ffmepg时出现这两个错误或者有时候需要x264编码的时 ...

  3. [Pytorch框架] 4.1 Fine tuning 模型微调

    文章目录 4.1 Fine tuning 模型微调 4.1.1 什么是微调 为什么要微调 迁移学习 Transfer Learning 二者关系 4.1.2 如何微调 4.1.3 注意事项 4.1.3 ...

  4. Centos7.x 使用 selenium + python + jenkins 做UI自动化

    一.基础环境准备 1.Chrome + Chrome Driver https://www.cnblogs.com/TSmagic/p/15671533.html(此篇文章已经介绍) 2.Seleni ...

  5. pytest—添加日志

    开头 保存工作中常用的日志. pytest有自己的日志管理的开关,不需要用到python的日志库 开始 在文件根目录下新建一个pytest.ini文件 基本设置 [pytest] log_cli=tr ...

  6. Python潮流周刊#1:如何系统地自学Python?

    这里记录每周值得分享的 Python 及通用技术内容,部分内容为英文,已在小标题注明.(本期标题取自其中一则分享,不代表全部内容都是该主题,特此声明.) 文章&教程 1.编程语言的错误处理模式 ...

  7. WPF入门实例 WPF完整例子 WPF DEMO WPF学习完整例子 WPF实战例子 WPF sql实例应用 WPF资料源码

    WPF 和 WinForms 都是用于创建 Windows 桌面应用程序的开发框架,它们有一些相似之处,但也有很多不同之处. 在开发速度方面,这取决于具体情况.如果您熟悉 WinForms 开发并且正 ...

  8. Linux设置多个Tomcat开机自启动

    Linux设置多个Tomcat开机自启动 前言 一台服务器上有多个tomcat环境,重启服务器后,每次需要手动一个个启动服务,非常麻烦,于是可以设置tomcat开机自启动. tomcat开机自启动非常 ...

  9. 沉痛悼念 pip search 一路走好

    不知道最近大家有没有发现在使用 pip search 的时候,总是出现一个 XMLRPC 的报错. $ pip search xlrdERROR: XMLRPC request failed [cod ...

  10. tryhackme-OWASP

    tryhackme-OWASP Top 10部分记录 敏感信息泄露 在assets目录中 可以看到到一个sqlite数据库的webapp.db文件 使用sqlite3 webapp.db .table ...