简介
mybatis的启动入口一般有两个,在结合spring框架后由spring整合包下的SqlSessionFactoryBean启动
如果没有整合spring,则有XMLConfigBuilder启动
这两个启动入口都会初始化Configuration对象,该对象是mybatis配置文件的对象形式,我们实现的mybatis拦截器在此时被装载到configuration中
启动过程
一、SqlSessionFactoryBean在类加载完成后调用后置方法,执行buildSqlSessionFactory();该方法中初始化配置类configuration,在配置类初始化完成后,调用SqlSessionFactoryBuilder类的builder方法
二、SqlSessionFactoryBuilder.builder()方法中new DefaultSqlSessionFactory对象,使用配置类作为入参
三、SqlSession对象;
在MyBatis框架中,SqlSession
对象是核心的数据库会话管理器,它提供了执行持久化操作的方法和管理持久化操作的生命周期。具体来说,SqlSession
对象的作用包括以下几个方面:
-
数据库会话管理:
SqlSession
负责管理与数据库的连接,它是数据库操作的主要入口。在应用程序中,通过SqlSession
对象可以执行SQL语句,提交事务,关闭连接等操作。 -
SQL执行操作:
SqlSession
提供了执行SQL语句的方法,可以执行查询(select)、更新(update)、插入(insert)、删除(delete)等数据库操作。 -
事务管理: 在MyBatis中,
SqlSession
可以控制事务的生命周期。可以通过SqlSession
开启事务、提交事务或回滚事务,确保数据操作的一致性和完整性。 -
Mapper接口绑定: MyBatis通过
SqlSession
为Mapper接口提供了实现类(代理类)。Mapper接口定义了数据库操作的方法,而SqlSession
通过加载Mapper接口和XML映射文件,将Mapper接口与实际的SQL语句绑定在一起,从而可以执行Mapper接口中定义的方法对数据库进行操作。 -
资源管理:
SqlSession
在创建时会获取到数据库连接,在关闭时释放连接,确保资源得到合理的管理和释放,避免资源泄漏。 -
可以将sqlsession看成是对connection的升级
四、创建sqlsession对象,mybatis提供了从datasource和connection两种方式创建sqlsession的方法;这两个方式的区别在于是否需要手动管理数据库连接和事务;在获得事务工厂后,通过事务工厂和执行器Executor类型通过配置类的方法创建executor对象;
- 创建executor对象;executor对象封装了query和update等方法,事务操作和缓存也在该对象中管理;
- 关于拦截器,mybaits的拦截器可以对executor、statementhandler、pameterhandler和resultsethandler的方法进行拦截;在executor的创建过程中,我们自定义的拦截器会对executor增强;具体来说,就是我们定义的拦截器链会对executor对象轮流执行plugin方法,在plugin方法中执行Plugin类的wrap方法,在wrap方法中解析拦截器的配置,生成executor的代理对象(jdk动态代理)。在执行executor中定义的方法时,根据该方法是否被拦截决定由代理对象执行或者executor对象执行
五、生成statementhandler;statementhandler对象在executor对象执行方法时被创建,statementhandler完成参数绑定等工作,并执行sql语句