MyBatis核心组件如下:
-
SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口) -
SqlSessionFactory:依靠工厂来生成SqlSession(会话) -
SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口 -
SQL Mapper:它是由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果
1、SqlSessionFactoryBuilder
SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个SessionFactory。它的作用就是一个构造器,一旦构建了SqlSessionFactory,它的作用就已经完结,这时就可以将它回收。所以它的生命周期只存在于方法的局部,它的作用就是生成SqlSessionFactory对象
2、SqlSessionFactory
SqlSessionFactory的作用是创建SqlSession,而SqlSession就是一个会话,相当于JDBC中的Connection对象。每次应用程序需要访问数据库,就要通过SqlSessionFactory创建SqlSession,所以SqlSessionFactory应该在MyBatis应用的整个生命周期中。而如果多次创建同一个数据库的SqlSessionFactory,则每次创建SqlSessionFactory会打开更多的数据库连接资源,那么连接资源就很快会被耗尽。因此SqlSessionFactory的责任是唯一的,它的责任就是创建SqlSession,所以应该采用单例模式。正确的做法应该是使得每一个数据库只对应一个SqlSessionFactory,管理好数据库资源的分配,避免过多的Connection被消耗
3、SqlSession
SqlSession是一个会话,相当于JDBC的一个Connection对象,它的生命周期应该是在请求数据库处理事务的过程中。它是一个线程不安全的对象,操作数据库需要注意其隔离级别和数据库锁等特性。此外,每次创建的SqlSession都必须及时关闭它,它长期存在就会使数据库连接池的活动资源减少,对系统性能的影响很大。它存活于一个应用的请求和操作,可以执行多条SQL,保证事务的一致性
4、Mapper
Mapper是一个接口,它的作用就是发送SQL,然后返回结果,或者执行SQL从而修改数据库的数据,因此它应该在一个SqlSession事务方法之内,是一个方法级别的东西。它就如同JDBC中的一条SQL语句的执行,它最大的范围和SqlSession是相同的