Mybatis核心类生命周期和管理
Mybatis核心类生命周期和管理
原文链接:https://blog.csdn.net/qq1134550437/article/details/51960480
1、SqlSessionFactoryBuilding
这个类可以被实例化、使用和丢弃。一但创建了SqlSessionFactory后,这个类就不需要存在 了,因此sqlsessionfactorybuilder 实例的最佳作用域是方法范围(即作为方法的变量)
2、SqlSessionFactory
SqlSessionFactory,顾名思义就是获取SqlSession对象的工厂,功能类似于jdbc中加载数据库驱动。所以sqlsessionfactory对象一但被创建,应该在应用执行期间都存在,因此sqlsessionfactory的最佳作用域是应用范围,建议定义为静态变量。
3、sqlsession
sqlsession类似于jdbc的connection对象,每个线程都因该有自己的sqlsession 实例。sqlsesion的实例,sqlsession的实例不能共享,他是 线程不安全的,因此最佳作用域是请求或方法范围,sqlsession对象能够执行数据库的增删改查操作,因此在使用后应该关闭,并保存使用finally快来关闭。
package util; import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { private MyBatisUtil() {
} private static final String RESOURCE = "config.xml";
private static SqlSessionFactory sqlSessionFactory = null;
private static ThreadLocal<SqlSession> threadlocal = new ThreadLocal<SqlSession>();
static {
Reader reader = null;
try {
reader = Resources.getResourceAsReader(RESOURCE);// 读取映射文件
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
sqlSessionFactory = builder.build(reader);
} catch (IOException e) {
// TODO Auto-generated catch block
throw new ExceptionInInitializerError("初始化MyBatis错误");
} } public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory;
} public static SqlSession getSession() { SqlSession session = threadlocal.get(); // 如果session为null,则打开一个新的session if (session == null) {
session = (sqlSessionFactory != null) ? sqlSessionFactory
.openSession() : null;
threadlocal.set(session);
}
return session;
} public static void closeSession() { SqlSession session = (SqlSession) threadlocal.get();
threadlocal.set(null);
if (session != null) {
session.close();
}
}
}
Mybatis核心类生命周期和管理的更多相关文章
- React源码剖析系列 - 生命周期的管理艺术
目前,前端领域中 React 势头正盛,很少能够深入剖析内部实现机制和原理.本系列文章希望通过剖析 React 源码,理解其内部的实现原理,知其然更要知其所以然. 对于 React,其组件生命周期(C ...
- React 源码剖析系列 - 生命周期的管理艺术
目前,前端领域中 React 势头正盛,很少能够深入剖析内部实现机制和原理. 本系列文章 希望通过剖析 React 源码,理解其内部的实现原理,知其然更要知其所以然. 对于 React,其组件生命周期 ...
- ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理
在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行代码就展示了一个基本工作原理.然而,要将这样的解决方案运用到实际生产环境,还有很 ...
- java类生命周期,类的“加载,连接,初始化,使用,卸载过程”详解
“ 如果说核心类库的 API 比做数学公式的话,那么 Java 虚拟机的知识就好比公式的推导过程” 每本Java入门书籍在介绍Java这门语言的时候都会提到Java跨平台,“一次解释,到处运行的特点“ ...
- (转)JVM类生命周期概述:加载时机与加载过程
原文地址: http://blog.csdn.net/justloveyou_/article/details/72466105 JVM类加载机制主要包括两个问题:类加载的时机与步骤 和 类加载的方式 ...
- JVM类生命周期概述:加载时机与加载过程
一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用.事实上,虚拟机把描述类的数据从Class文件 ...
- MyBatis 作用域和生命周期
理解到目前为止所讨论的类的作用域和生命周期是非常重要的.如果使用不当可导致严重的并发性问题. SqlSessionFactoryBuilder 这个类可以在任何时候被实例化.使用和销毁.一旦您创造了 ...
- spring容器对bean生命周期的管理三中方式
spring容器对bean的生命周期管理主要在两个时间点:bean的初始化完成(包括属性值被完全注入),bean的销毁(程序结束,或者引用结束)方式一:使用springXML配置中的init-meth ...
- 【Android】11.1 Activity的生命周期和管理
分类:C#.Android.VS2015: 创建日期:2016-02-21 一.基本概念 1.必须理解这些方法,否则你编的程序根本就没法在实际项目中使用 当然,如果仅仅是为了玩玩,或者仅仅是作为例子为 ...
随机推荐
- java核心-多线程(4)-线程类基础知识
1.并发 <1>使用并发的一个重要原因是提高执行效率.由于I/O等情况阻塞,单个任务并不能充分利用CPU时间.所以在单处理器的机器上也应该使用并发. <2>为了实现并发,操作系 ...
- python中groupby函数详解(非常容易懂)
一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[ ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-eject
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- C++获取文件夹中所有文件
获取文件夹中的文件,用到过很多次,每次用的时候都要去查下,很烦,所以想自己写下,当然,借鉴了很多其他大佬的博客 主要实现的函数,如下: void getFiles( string path, vect ...
- bzoj 2796: [Poi2012]Fibonacci Representation
结论貌似是,,,肯定只有没有重复的数字.http://hzwer.com/6426.html 一开始猜的是贪心,感觉也是可以的啊...(想想都有道理,然而看到是神奇的(dp类)记忆化搜索,直接虚的不敢 ...
- python面试题整理(二)
1.进程,线程,协程定义,有什么区别 进程是操作系统分配资源的最小单位,一个进程对应一块CPU 线程是进程中的某一个控制单元,是CPU调度的最小单元,线程之间相互独立,进程结束线程也会结束,一个进程至 ...
- exec()函数问题
源代码: 在网上也搜索了答案 比较详细的答案是: <?php exec("lsof -i:80",$out,$status); 结果: var_dump($out); arr ...
- 面向对象设计思想和MVC设计模式
虽然之前学习Java时有接触过面向对象的设计思想,但因当时Java没学好.所以导致这两天讲php的面向对象设计时,感到没有头绪,这也反应了我练习少和逻辑能力的不足.而MVC设计思想 面向对象就是要将系 ...
- 三十九、SAP中多语言的处理
一.点击菜单翻译 二.选择目标语言 三.输入需要翻译的内容,并保存 四.我们切换到英语模式登录 五.查看我们的代码 六.输出结果如下,多语言特征就显示了
- 十五、SAP自定义结构体
一.SAP的结构体是以BEGIN OF开始,以END OF结尾,代码如下: 二.输出结果如下