简介

mybatis的启动入口一般有两个,在结合spring框架后由spring整合包下的SqlSessionFactoryBean启动

如果没有整合spring,则有XMLConfigBuilder启动

这两个启动入口都会初始化Configuration对象,该对象是mybatis配置文件的对象形式,我们实现的mybatis拦截器在此时被装载到configuration中

启动过程

一、SqlSessionFactoryBean在类加载完成后调用后置方法,执行buildSqlSessionFactory();该方法中初始化配置类configuration,在配置类初始化完成后,调用SqlSessionFactoryBuilder类的builder方法

二、SqlSessionFactoryBuilder.builder()方法中new DefaultSqlSessionFactory对象,使用配置类作为入参

三、SqlSession对象;

在MyBatis框架中,
SqlSession
对象是核心的数据库会话管理器,它提供了执行持久化操作的方法和管理持久化操作的生命周期。具体来说,
SqlSession
对象的作用包括以下几个方面:

  1. 数据库会话管理:
    SqlSession
    负责管理与数据库的连接,它是数据库操作的主要入口。在应用程序中,通过
    SqlSession
    对象可以执行SQL语句,提交事务,关闭连接等操作。

  2. SQL执行操作:
    SqlSession
    提供了执行SQL语句的方法,可以执行查询(select)、更新(update)、插入(insert)、删除(delete)等数据库操作。

  3. 事务管理: 在MyBatis中,
    SqlSession
    可以控制事务的生命周期。可以通过
    SqlSession
    开启事务、提交事务或回滚事务,确保数据操作的一致性和完整性。

  4. Mapper接口绑定: MyBatis通过
    SqlSession
    为Mapper接口提供了实现类(代理类)。Mapper接口定义了数据库操作的方法,而
    SqlSession
    通过加载Mapper接口和XML映射文件,将Mapper接口与实际的SQL语句绑定在一起,从而可以执行Mapper接口中定义的方法对数据库进行操作。

  5. 资源管理:
    SqlSession
    在创建时会获取到数据库连接,在关闭时释放连接,确保资源得到合理的管理和释放,避免资源泄漏。

  6. 可以将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语句

标签: none

添加新评论