基本构成:
SqlsessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlsessionFactory(工厂接口)。
SqlsessionFactory:依靠工厂来生成 Sqlsession(会话)。
Sqlsession:是一个既可以发送SQL去执行并返回结果,也可以获取 Mapper的接口。
SQLMapper:它是 My Baits新设计的组件,它是由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
生命周期:
SqlsessionFactoryBuilder与SqlsessionFactory与Sqlsession与SQLMapper的生命周期。
SqlsessionFactoryBuilder:
SqlsessionFactoryBuilder是利用XML或者Java编码获得资源来构建 SqlsessionFactory的,通过它可以构建SqlsessionFactory它的作用就是一个构建器,一旦我们构建了SqlSessionFactory,它的作用就已经完结,失去了存在的意义,这时我们就应该毫不犹豫的废弃它,将它回收。所以它的生命周期只存在于方法的局部,它的作用就是生成SqlSessionFactory对象。
SqlsessionFactory:
SqlsessionFactory的作用是创建 Sqlsession,而 SqIsession就是一个会话,相当于JDBC中的 Connection对象。每次应用程序需要访问数据库,我们就要通过 SqlsessionFactory创建 Sqlsession,但是SqlsessionFactory应该在 My Batis应用的整个生命周期中。因而SqlsessionFactory的创建应该采用单例模式。避免过多的 Connection被消耗。
Sqlsession:
Sqlsession是一个会话,相当于JDBC的一个 Connection对象,它的生命周期应该是在请求数据库处理事务的过程中。它是一个线程不安全的对象,在涉及多线程的时候我们需要特别的当心,操作数据库需要注意其隔离级别,数据库锁等高级特性。此外,每次创建的 Sqlsession都必须及时关闭它,它长期存在就会使数据库连接池的活动资源减少,对系统性能的影响很大。
SQLMapper:
Mapper是一个接口,而没有任何实现类,它的作用是发送SQL,然后返回我们需要的结果,或者执行SQL从而修改数据库的数据,因此它应该在一个 Sqlsession事务方法之内,是一个方法级别的东西。它就如同JDBC中的一条SQL语句的执行,它最大的范围和Sqlsession是相同的。尽管我们想一直保存着 Mapper,但是你会发现它很难控制,所以尽量在一个 Sqlsession事务的方法中使用它们,然后废弃掉。