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

  • 相关阅读:
    api自动化工具集成metersphere
    gitlab+github使用记录
    docker基本操作
    linux指标分析
    python的break和continue
    linux基本性能指标语法
    jmeter标准流程设置
    postman
    jmeter本地启动
    对浮动的一些个人理解
  • 原文地址:https://www.cnblogs.com/WJQ2017/p/7680488.html
Copyright © 2011-2022 走看看