首页 > 其他分享 >结合拦截器描述mybatis启动流程

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

时间:2024-07-31 15:53:09浏览次数:12  
标签:拦截器 对象 流程 SqlSession executor 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语句

 

标签:拦截器,对象,流程,SqlSession,executor,mybatis,方法,数据库
From: https://www.cnblogs.com/aries-laosi/p/18334809

相关文章

  • 在Mybatis中不对select做任何改变,将物理删除的逻辑迁移到逻辑删除
    假设现在有一个已经完成或者已经到中期的项目,但是忘记做逻辑删除了,更改的办法如下第一步,在项目中添加如下的拦截器importcom.baomidou.mybatisplus.core.toolkit.PluginUtils;importcom.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;importlom......
  • 手写MyBatis 重要基本原理框架
    1.手写MyBatis重要基本原理框架@目录1.手写MyBatis重要基本原理框架1.1第一步:IDEA中创建模块1.2第二步:资源工具类,方便获取指向配置文件的输入流1.3第三步:定义SqlSessionFactoryBuilder类1.4第四步:分析SqlSessionFactory类中有哪些属性1.5第五步:定义JDBCTransaction1.6......
  • 搭建 STM32 网关服务器的全流程:集成嵌入式 C++、TCP/IP 通信、Flash 存储及 JWT 认证(
    引言随着物联网(IoT)技术的快速发展,基于STM32的服务器(类似网关)在数据采集、设备控制等方面的应用越来越广泛。本文将介绍搭建一个基于STM32的服务器所需的技术栈,以及详细的搭建步骤和代码示例。技术栈介绍在搭建基于STM32的服务器时,我们需要用到以下技术栈和组件:1.硬......
  • 当我们在 Whatsapp 流程中进行 data_exchange 时出现 Gettig 错误
    我在进行数据交换时遇到一个错误。我使用了facebook的data_exchange示例。我收到此错误我们无法解密您的有效负载。请检查您的加密/解密逻辑。这是我的解密代码,它工作正常。defdecrypt_request(self,encrypted_flow_data_b64,encrypted_aes_key_b64,in......
  • pig4cloud登录请求处理流程以及token的签发
    环境SpringBoot版本:2.7.16SpringSecurity版本:5.7.11pig4cloud版本:3.7.1-JDK8流程图概述登录请求过来之后还是先在DelegatingFilterProxy中跟踪,然后执行到FilterChainProxy;会通过请求路径进行匹配,找到对应能支持的SecurityFilterChain;然后获取到此SecurityFilterChain的......
  • 会议海报/论文海报编辑流程
    模板网站https://www.posterpresentations.com/free-poster-templates.html选择感兴趣的模板,下载对应的尺寸比如下载第一个,想要改变颜色设计的话,在ppt中最上面点击“设计-变体更多-颜色”,可以整体更改模板颜色  如果想要修改模板背景色之类的,比如改成白色,点击“视图-幻......
  • netty核心流程(一):服务端如何建立连接
    为了接收连接请求,Netty服务端应该做些什么事情?根据JavaNIO的知识,服务端在准备接收客户端连接之前做了下面几个工作,我们可以带着问题往下看。服务端对连接请求是如何初始化的?如何把用户定义的处理逻辑childHandler加入到Netty的处理流程里?如何在Socket上绑定一个端......
  • 借助流程表单设计器开源为流程化办公赋能
    在经济高速发展的今天,想要实现流程化办公和数字化转型,需要利用更优质的平台为其加油助力。低代码技术平台、流程表单设计器开源为各行各业流程化办公高效赋能,一起摆脱信息孤岛、部门沟通不协调等各种尖锐问题,借助流程表单设计器做好数据管理工作,为行业发展贡献整套低代码技术平台......
  • 最新基于多案例全流程防洪评价报告编制方法与水流数学模型建模实践技术应用
    随着社会经济的快速发展,我国河道周边土地开发利用率不断增大,临河建筑物与日俱增,部分河道侵占严重,导致防洪压力增大。加之部分河流沿岸临河建筑物设置混乱、布设不合理、阻水率增大、未经管理部门同意私设涉河建筑物等问题非常突出,已威胁到河道安全,使得河道防洪保障工作压力日益......
  • mybatis中映射和注解在数据库进行增删改查的方法
    此两种方法都是基于maven项目的基础上运行主要步骤如下:1、在mevan中的pom文件添加依赖文件: 2、在src目录下编写编写配置文件(mybatis-cfg.xml) 3、编写实体类(Student.java) 4、编写映射文件(StudentMapper.xml) 5、编写测试文件 6、调用JUnit5进行调试核心文件含义:......