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
的生命周期,它应该存在于一个请求中。