Mybatis系列--05-作用域和生命周期
作用域和生命周期
概述
本文主要讲SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession三个类对象的作用域和生命周期,如果使用错误会导致严重的并发问题,详见官网
SqlSessionFactoryBuilder
SqlSessionFactoryBuilder是用来构建SqlSessionFactory的,一旦SqlSessionFactory被创建,Builder就不在需要了,所以SqlSessionFactoryBuilder最佳作用域是方法作用域(即局部方法变量)。
SqlSessionFactory
SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由求其它或者新创建另一个实例,因此SqlSessionFactory的最佳作用域是应用作用域,最简单的是单例模式或者静态单例模式
SqlSession
每个线程都应该有它自己的SqlSession实例。SqlSession实例不是线程安全的,因此不能被共享,所以它的最佳作用域是请求作用域或方法作用域。绝对不能将SqlSession实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中,比如 Servlet 框架中的 HttpSession。 如果你现在正在使用一种 Web 框架,考虑将 SqlSession 放在一个和 HTTP 请求相似的作用域中。 换句话说,每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它。 这个关闭操作很重要,为了确保每次都能执行关闭操作,你应该把这个关闭操作放到 finally 块中。 下面的示例就是一个确保 SqlSession 关闭的标准模式:
try (SqlSession session = sqlSessionFactory.openSession()) {
// 你的应用逻辑代码
}
映射器实例
映射器是一些绑定映射语句的接口。映射器实例最好放在方法作用于内。
try (SqlSession session = sqlSessionFactory.openSession()) {
BlogMapper mapper = session.getMapper(BlogMapper.class);
// 你的应用逻辑代码
}
分类:
Mybatis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现