MyBatis 作用域(Scope)和生命周期
SqlSessionFactoryBuilder
SqlSessionFactoryBuilder的作用是创建SqlSessionFactory。一旦创建了SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder只能存在于创建SqlSessionFactory的方法中,最佳作用域是方法作用域(也就是局部方法变量)。
SqlSessionFactory
SqlSessionFactory可以被认为是一个数据库连接池,作用是创建SqlSession接口对象。因为MyBatis的本质是使用Java语言完成数据库操作,所以SqlSessionFactory一旦被创建就会在MyBatis应用的运行期间一直存在,不能被清除或重建。因此SqlSessionFactory的最佳作用域是应用作用域。因为SqlSessionFactory占有数据库的连接资源,如果创建多个SqlSessionFactory,那么就存在多个数据库连接池,不利于控制数据库资源,并会导致数据库连接资源耗尽,所以最好把SqlSessionFactory作为一个单例,也就是使用单例模式。
SqlSession
如果说SqlSessionFactory相当于数据库连接池,那么SqlSession就相当于一个数据库连接(Connection对象),代表一个请求。每个线程都有自己的SqlSession实例。SqlSession实例不是线程安全的,不能被共享,所以它的最佳作用域是方法作用域(也就是局部方法变量)。把关闭操作放到finally块中以确保每次都能执行关闭。示例如下:
SqlSession session = sqlSessionFactory.openSession();
try {
// do work
} finally {
session.close();
}
映射器实例(Mapper Instances)
Mapper代表某个请求中的一个业务处理步骤,是一个接口,绑定了映射语句的Mapper实例是从SqlSession中获得的。它的最佳作用域是方法作用域(也就是局部方法变量),生命周期小于或等于SqlSession的生命周期。示例如下:
SqlSession session = sqlSessionFactory.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
// do work
} finally {
session.close();
}
MyBatis各个组件的生命周期如下:
参考资料
《Java EE互联网轻量级框架整合开发SSM框架(Spring MVC+Spring+MyBatis)和Redis实现》 P55-57
MyBatis 作用域(Scope)和生命周期的更多相关文章
- Spring基础(8) : 延迟加载,Bean的作用域,Bean生命周期
1.延迟加载 <bean id="p" class="com.Person" lazy-init="true"/> @Confi ...
- Mybatis精讲(二)---生命周期
目录 回顾 SqlSessionFactoryBuilder SqlSessionFactory openSessionFromDataSource Executor SqlSession Mappe ...
- $scope 的生命周期
当Angular关心的事件发生在浏览器中时,比如用户在通过ng-model属性监控的输入字段中输入,或者带有ng-click属性的按钮被点击时,Angular的事件循环都会启动.这个事件将在Angul ...
- $scope的生命周期
model mutation 模型改变 model observation 模型观察 scope destruction scope结束 神奇的scope,一个angular应用只有一个scope,一 ...
- AngularJS $scope 继承性 作用 生命周期
一.基本概念 作用域是一个指向应用模型的对象,相当于MVVM中的ViewModel,能绑定数据(属性)和行为(方法),能监控表达式和传递事件,是实现双向绑定的基础,是应用在 HTML (视图) 和 J ...
- 详解Spring中Bean的作用域与生命周期
摘要:在利用Spring进行IOC配置时,关于bean的配置和使用一直都是比较重要的一部分,同时如何合理的使用和创建bean对象,也是小伙伴们在学习和使用Spring时需要注意的部分,所以这一篇文章我 ...
- C的变量类型、作用域与生命周期的总结
C的变量类型.作用域与生命周期的总结 最近在看"C Programing Language" (Kernighan, Ritchie)关于外部变量的讨论,之前在学C的时候对这些ex ...
- bean的作用域和生命周期
一.Bean作用域 二.生命周期 其中,这个类实现各种接口重写各种方法,会按bean的声明周期按序执行: 其中,自定义的初始化和自定义销毁的方法不是实现接口重写,而是成员方法,并且在装配bean即在x ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring Bean的生命周期
Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁. 而对于 protot ...
随机推荐
- IDEA快捷键之for循环
intelliJ生成for循环代码. 迭代器for循环 iter Iterate iterable | Array in J2SDK 5 syntax itar Iterate elements of ...
- asp.net core WebApi 快速入门
参考:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.1 官网的例子 直接 ...
- IDEA导入JAR的源代码
- 期货大赛项目|四,MVC的数据验证
上图先看下效果 样式先不说,先了解下数据验证是怎么实现的 一 必须是强类型的视图 二 这些显示提示的话语,都在强类型的实体中 三 必须使用Html.BeginForm或者Html.AjaxBeginF ...
- python之string模块常量:数字,26个字母,标点符号,空白
In [8]: import string In [9]: dir(string) In [10]: string.ascii_letters Out[10]: 'abcdefghijklmnopqr ...
- [转]利用ssh传输文件
利用ssh传输文件 http://www.cnblogs.com/jiangyao/archive/2011/01/26/1945570.html 在linux下一般用scp这个命令来通过ssh传输文 ...
- python编码,赋值和is的区别
1. == 与 is 的区别 赋值 == 比较值是否相等,is 比较,比较的是内存地址. 小数据池的作用是节省内存空间 数字的范围:-5 到 256 共用一个数据池 字符串范围:1.不能有特殊字符.2 ...
- TopCoder SRM502 Div1 1000 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-1000.html SRM502 Div1 1000 题意 从 [0,n-1] 中选择 k 个不同的 ...
- redics在windows平台下的使用
https://www.cnblogs.com/ding2011/p/4745732.html 一::下载 windows 下的redis: https://github.com/Service ...
- 初窥Java之四
一.条件判断之if判断 语法格式:if(结果为布尔类型的结果值){ 功能执行语句; }else if(结果为布尔类型的结果值){ 功能执行语句; } ....{ }else{ 功能执行语句: } 注意 ...