mybatis几个常用类的范围和生命周期

发布时间:2023年12月21日

备注:如果使用了依赖注入的框架,那么就不需要自己明确关注这几个类的生命周期。

  • SqlSessionFactoryBuilder:这个类是用来创建SqlSessionFactory实例的,创建完成以后就可以扔掉,没有必要继续保留。因此SqlSessionFactoryBuilder 实例最好的范围是函数范围(即作为一个函数的局部变量)。
  • SqlSessionFactory:一旦创建,SqlSessionFactory实例就需要在应用的的执行期间存在。好的实践是在应用运行期间不要重复创建多个SqlSessionFactory实例。因此SqlSessionFactory实例最好的范围是应用的范围,例如,可以通过单列模式(Singleton pattern)来创建SqlSessionFactory的实例。
  • SqlSession:每个线程应该有自己的SqlSession实例。在线程之间共享SqlSession实例不是线程安全的。因此SqlSession最好的范围是请求(request )或者方法范围。不要在一个静态属性、甚至实例属性中引用SqlSession的实例。不要在任何管理范围(managed scope)引用SqlSession的实例,例如HttpSession。对于HTTP的处理,可以在收到http请求以后,创建一个SqlSession实例,返回http响应以后,关闭SqlSession。关闭可以采用如下的语法:
try (SqlSession session = sqlSessionFactory.openSession()) {
  // do work
}
  • Mapper 实例:Mapper 是接口,用来绑定到映射声明(mapped statements),通过SqlSession来获得。因此,从技术上说,Mapper 实例的最大范围和SqlSession的范围相同。但是,Mapper 实例最好的范围是方法范围。Mapper 实例不需要显式关闭。例如:
try (SqlSession session = sqlSessionFactory.openSession()) {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  // do work
}
文章来源:https://blog.csdn.net/panghuangang/article/details/135101834
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。