结合拦截器描述mybatis启动流程

简介

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语句

相关推荐
好好研究1 分钟前
Java基础学习(十三):IO流基础
java·开发语言·学习·io流
wuxinyan1232 分钟前
Java面试题52:一文深入了解Kubernetes 核心资源对象
java·kubernetes·面试题
Boop_wu4 分钟前
[Java EE进阶] 图书管理系统(2)
spring·java-ee·maven·mybatis·状态模式
SamDeepThinking8 分钟前
秒杀下单,用户点一下按钮,后端要过六道关卡
java·后端·架构
Sam_Deep_Thinking16 分钟前
适合中小型企业的出口入口网关微服务
java·微服务·架构
YaBingSec19 分钟前
玄机靶场—Apache-druid(CVE-2021-25646) WP
java·开发语言·笔记·安全·php·apache
叶小鸡23 分钟前
Java 篇-项目实战-天机学堂(从0到1)-day7
java·开发语言
何中应24 分钟前
记录一次Jenkins构建任务的坑
java·servlet·jenkins
雪碧聊技术28 分钟前
上午题_计算机系统
java·开发语言
月落归舟39 分钟前
JAVA基础之反射
java·反射