Mybatis中重要组件的生命周期

在之前的章节中咱们讲了Mybatis一些次要组件的根本用法和配置形式,然而把握这些次要组件的生命周期也是十分重要的,不能只是单单理解根本的应用办法。这对于MyBatis应⽤的正确性和高性能是极其重要的,咱们必须把握他们

本单次要内容:

以下各组件的生命周期了解:

  • SqlSessionFactoryBuilder
  • SqlSessionFactory
  • SqlSession
  • Mapper

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder是利用XML或者Java编码取得资源来构建SqlSessionFactory
的,通过它能够构建多个SessionFactory。它的作⽤用就是一个构建器一旦咱们构建了SqlSessionFactory 它的作用就⼰经完结,失去了存在的意义,这时咱们就应该毫不犹豫的废除它,将它回收。

所以它的⽣命周期只存在于⽅法的部分,它的作用就是⽣成SqlSessionFactory对象

SqlSessionFactory

SqlSessionFactory的作用是创立SqlSession,而SqlSession就是一个会话,相当于JDBC
中的Connection对象。每次应用程序须要拜访数据库,咱们就要通过SqlSessionFactory创
建SqlSession,所以SqlSessionFactory应该在MyBatis利用的整个⽣命周期中。而如果咱们
屡次创立同一个数据库的SqlSessionFactory,则每次创立SqlSessionFactory会关上更更多的数
据库连贯(Connection)资源,那么连贯资源就很快会被耗尽(这就很重大!)

因而SqlSessionLFactory的责任是惟一的,它的责任就是创立SqlSession,所以咱们果决采纳单例模式。如果咱们采纳多例,那么它对数据库连贯的耗费是很大的,不利于咱们统⼀的治理,所以正确的做法应该是使得每⼀个数据库只对应一个SqlSessionFactory,治理好
数据库资源的调配,防止过多的Connection被占用,导致数据库连贯被占满.

SqlSession

SqlSession是⼀个会话,相当于JDBC的一个Connection对象,它的⽣命周期应该是
在申请数据库处理事务的过程中

它是一个线程不平安的对象,在波及多线程的时候咱们
须要特地的当心,操作数据库须要留神其隔离级别,数据库锁等⾼级个性。此外,每次创
建的SqlSession都必须及时敞开它,它长期存在就会使数据库连接池的流动资源缩小,对
零碎性能的影响很大。正如Mybatis源码浏览(一)中的代码⼀样,咱们往往通过finally语句块保障咱们正确
的敞开了SqlSession

Mapper

Mapper是个接⼝,⽽没有任何实现类,它的作⽤是发送SQL,而后返回咱们须要的后果 因而它的生命周期应该在⼀个SqlSession事务⽅法之内,它的最大范畴和SqlSession是雷同的

总结

有了下面的叙述后,咱们曾经分明了 Mybatis各组件的生命周期和分割:

关注公众号:java宝典