不同作用域生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题

# SqlSessionFactoryBuilder:

  • 创建SqlSessionFactory之后就不再需要它了
  • 所以最好的办法就是把它变为局部变量

SqlSessionFactory

  • 可以理解为数据库连接池
  • 因为在运行期间一直存在直到程序结束,没有理由丢弃它或者重新建立新的
  • 作用域应该是全局的(程序开始它就开始,程序结束它就结束),应该使用单例模式

单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

它的构造方法为私有,在外部是无法实例化它的

public class SingleObject {

   //创建 SingleObject 的一个对象
   private static SingleObject instance = new SingleObject();

   //让构造函数为 private,这样该类就不会被实例化
   private SingleObject(){}

   //获取唯一可用的对象
   public static SingleObject getInstance(){
      return instance;
   }

   public void showMessage(){
      System.out.println("Hello World!");
   }
}

public class SingletonPatternDemo {
   public static void main(String[] args) {

      //不合法的构造函数
      //编译时错误:构造函数 SingleObject() 是不可见的
      //SingleObject object = new SingleObject();

      //获取唯一可用的对象
      SingleObject object = SingleObject.getInstance();

      //显示消息
      object.showMessage();
   }
}

SqlSession:

  • 连接到连接池的一个请求
  • 不能共享
  • 作用域应该是请求或方法作用域,最好放在一个请求中,每次开启或关闭
  • 用完之后赶紧关闭,否则占用资源

醉后不知天在水,满船清梦压星河