Mybatis 范围和生命周期

小狼最近看了Mybatis生命周期问题,觉得,理解mybatis生命周期很重要,否则会发生严重的并发问题,也会占用过多的资源

SqlSessionFactoryBuilder  :对象可以被java虚拟机实例化,使用,销毁。一但使用SqlSessionFactoryBuilder创建SqlSessionFactory之后,SqlSessionFactory就没有存在的必要了,因此, SqlSessionFactoryBuilder的范围是方法范围(本地方法范围)。因此,为了获得多个SqlSessionFactory而一直将SqlSessionFactoryBuilder对象存在于内存,不是最佳方式。

SqlSessionFactory  :对象由SqlSessionFactoryBuilder创建,为了不在每一次数据库操作的时候都重新创建SqlSessionFactory,他的生命周期,是整个项目运行期间都应该存在,

所以他的最佳实践方式是单例模式,最好使用spring来管理单例模式的SqlSessionFactory

SqlSession:  对象由SqlSessionFactory创建,因为每一个线程都需要一个sqlSession,所以他的生命周期是每个线程,但是这样他就线程不安全了,容易产生脏数据。我们可以为每个线程创建一个SqlSession的副本。这样,每一次对数据库操作就产生一个sqlSession副本,用这个副本对数据库操作,产生反应,操作结束,用finally关闭sqlsession。所以,绝对不可以价格sqlsession实例对象放在一个静态字段,甚至是实例字段中,还不可以将sqlsession实例对象放在任何管理范围中

如果要严格要求的话,在dao层,public static SqlSession sqlsession;这样写,和public SqlSession sqlsession;这样写都是错误的,,

因为是实例变量,默认dao是单例的,所以会出现非线程安全问题

时间: 2024-10-06 12:47:14

Mybatis 范围和生命周期的相关文章

MyBatis 作用域和生命周期

理解到目前为止所讨论的类的作用域和生命周期是非常重要的.如果使用不当可导致严重的并发性问题. SqlSessionFactoryBuilder  这个类可以在任何时候被实例化.使用和销毁.一旦您创造了SqlSessionFactory 就不需要 再保留它了.所以SqlSessionFactoryBuilder 实例的最好的作用域是方法体内(即一个本地方法 变量).您能重用SqlSessionFactoryBuilder 创建多个SqlSessionFactory 实例,但最好不要把 时间.资源放

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

学习mybatis不得不了解SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession.这里主要是讲解它们的生命周期以及一般最佳实践. 一般来说对象的生命周期也就是对象创建到销毁的过程,如果在这个过程中,如果实现的代码质量不佳,那么很容易造成程序上的错误或者效率的降低. 1.SqlSessionFactoryBuilder SqlSessionFactoryBuilder可以被jvm虚拟机所实例化.使用或者销毁.一旦使用SqlSessionFact

MyBatis入门——核心对象的生命周期(SqlSessionFactoryBuilder,SqlSessionFactory, SqlSession和Mapper)

二.核心对象的生命周期 从上一篇文章中,我们可以看出mybatis操作数据库主要使用了4个核心对象:SqlSessionFactoryBuilder,SqlSessionFactory, SqlSession和Mapper.那么,在软件系统中,这个几个对象的生命周期是什么样的呢?什么时候创建?什么时候销毁? 1. SqlSessionFactoryBuilder SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder(

MyBatis(四):SqlSession及其工厂类的作用域和生命周期

SqlSession及其工厂类的作用域和生命周期 SqlSession创建流程: 使用SqlSessionFactoryBuilder创建SqlSessionFactory. 使用SqlSessionFactory创建SqlSession. SqlSession可以通过Sql Mapper.class进行数据库操作,或者直接使用SqlSession的方法输入SqlMapper.方法()进行数据库操作,使用完要关闭. SqlSessionFactoryBuilder 就是SqlSessionFac

SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession作用域(Scope)和生命周期

可以说每个MyBatis都是以一个SqlSessionFactory实例为中心的.SqlSessionFactory实例可以通过SqlSessionFactoryBuilder来构建.一是可以通过XML配置文件的方式来构建SqlSessionFactory,二是可以通过Java API的方式来构建.但不管通过什么方式都有一个Configuration贯穿始终,各种配置正是通过Configuration实例来完成实现. 此篇文章旨在通过编码实现MyBatis3.4.1 User Guide所提到的

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

Maven使用教程三:maven的生命周期及插件机制详解

前言 今天这个算是学习Maven的一个收尾文章,里面内容不局限于标题中提到的,后面还加上了公司实际使用的根据profile配置项目环境以及公司现在用的archetype 模板等例子. 后面还会总结一个大的思维导图记录下自己学习的概括. Maven的生命周期介绍 先来复习几个命令: mvn clean package:打包 mvn clean install:安装到本地 mven clean deploy:部署到远程仓库 mvn有三套完全独立的生命周期,clean.default和site 每套生

iOS程序执行顺序和UIViewController 的生命周期(整理)

说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序的启动执行顺序 程序启动顺序图 iOS启动原理图.png 具体执行流程 程序入口进入main函数,设置AppDelegate称为函数的代理 程序完成加载[AppDelegate application:didFinishLaunchingWithOptions:] 创建window窗口 程序被激活[

android Activity 的生命周期 以及横屏竖屏切换时 Activity 的状态变化

生命周期Android 系统在Activity 生命周期中加入一些钩子,我们可以在这些系统预留的钩子中做一些事情.例举了 7 个常用的钩子:protected void onCreate(Bundle savedInstanceState)protected void onStart()protected void onResume()protected void onPause()protected void onStop()protected void onRestart()protecte