Mybatis生命周期

Mybatis API

1,mybatis-config.xml:系统核心配置文件

2,mapper.xml:SQL映射文件

3,SqlSessionFactoryBuilder:创建session工厂类。用过即丢,只存在于方法体内(局部变量)

4,SqlSessionFactory:session工厂类,创建过程比较耗资源,所以一般只创建一个。一般定义为静态的,一加载就执行,只执行一次。

5,SqlSession:session类,包含了执行SQL所需的所有方法,SqlSession对象是单线程对象,不能共用,只能自己使用,它对应一次会话,一旦关闭了就需要重新创建。

生命周期

生命周期就是每一个对象应该存活的时间,比如一些对象一次用完后就要关闭,使之被Java虚拟机销毁,以避免继续占用资源,所以根据每一组件的作用去确定其生命周期。

1,SQLSessionFactoryBuilder生命周期

这个对象的作用就是创建SqlSessionFactory,创建成功后,这个对象就失去了作用,所以一般将它定义为一个局部变量,用完直接销毁就行。

2,SqlSessionFactory生命周期

这个对象可以理解为是一个数据库连接池,它的作用是用来创建SqlSession对象。因为mybatis本质其实就是java的数据库操作,也就是jdbc操作。所以SqlSessionFactory应该存在于整个mybatis整个应用中。所以,可以理解为SqlSessionFactory的生命周期,就等同于mybatis应用的生命周期。

由于SqlSessionFactory是一个连接池,所以它占着数据库链接的资源,如果创建了多个SqlSessionFactory,那么就会存在多个连接池,这个肯定是不行的。因此一般情况下,应该让SqlSessionFactory对象为类变量(定义为静态的)或是单例。

3,SqlSession生命周期

这个对象相当于一个数据库连接,也就是之前的Connection对象,它可以在一个事务中执行多条SQL语句,然后通过它的commit/rollback方法,提交或回滚事务。所以它应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,关闭调用close方法。

这里需要注意一点,调用close方法关闭这条连接时,其实底层并没有关闭这条连接,而是将它还给了SqlSessionFactory。参考连接池关闭连接时,其实是归还连接理解。

4,Mapper生命周期

Mapper是一个接口,它是由SqlSession创建的,所以它的最大生命周期应该最多和SqlSession保持一致。SqlSession关闭之后,Mapper对应的数据库连接资源也会消失,所以说它的生命周期应该小于等于SqlSession的生命周期,它应该存在于一个请求中。

上一篇:myBatis--缓存


下一篇:Mybatis