zoukankan      html  css  js  c++  java
  • 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块中以确保每次都能执行关闭。示例如下:

    1 SqlSession session = sqlSessionFactory.openSession();
    2 try {
    3   // do work
    4 } finally {
    5   session.close();
    6 }

     

      映射器实例(Mapper Instances)

      Mapper代表某个请求中的一个业务处理步骤,是一个接口,绑定了映射语句的Mapper实例是从SqlSession中获得的。它的最佳作用域是方法作用域(也就是局部方法变量),生命周期小于或等于SqlSession的生命周期。示例如下:

    1 SqlSession session = sqlSessionFactory.openSession();
    2 try {
    3   BlogMapper mapper = session.getMapper(BlogMapper.class);
    4   // do work
    5 } finally {
    6   session.close();
    7 }

       

      MyBatis各个组件的生命周期如下:

      

     

      参考资料

      MyBatis入门(官网)

      《Java EE互联网轻量级框架整合开发SSM框架(Spring MVC+Spring+MyBatis)和Redis实现》 P55-57

  • 相关阅读:
    gulp-css-spriter 将css代码中的切片图片合并成雪碧图
    通过JS模拟select表单,达到美化效果[demo]
    jQuery拖拽 & 弹出层
    sublime text 快速编码技巧 GIT图
    原生JS不到30行,实现类似javascript MVC的功能-minTemplate
    javascript拖拽原理与简单实现方法[demo]
    滚动焦点图实现原理和实践[原创视频]
    谈一谈值类型与引用类型和装箱与拆箱
    【原创】asp.net内部原理(三) 第三个版本 (最详细的版本)
    由JS函数返回值引发的一场”血案"
  • 原文地址:https://www.cnblogs.com/WJQ2017/p/7680488.html
Copyright © 2011-2022 走看看