结合拦截器描述mybatis启动流程
简介
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语句
结合拦截器描述mybatis启动流程的更多相关文章
- Struts2学习---拦截器+struts的工作流程+struts声明式异常处理
这一节我们来看看拦截器,在讲这个之前我是准备先看struts的声明式异常处理的,但是我发现这个声明式异常处理就是由拦截器实现的,所以就将拦截器的内容放到了前面. 这一节的内容是这样的: 拦截器的介绍 ...
- mybatis拦截器 修改mybatis返回结果集中的字段的值
项目中使用了shardingJDBC,业务库做了分库,公共库没在一起,所以导致做码值转换的时候,需要在实现类里面做转码,重复的代码量大,故考虑用mybatis拦截器,将码值转换后再做返回给实现类. ...
- 玩转SpringBoot之整合Mybatis拦截器对数据库水平分表
利用Mybatis拦截器对数据库水平分表 需求描述 当数据量比较多时,放在一个表中的时候会影响查询效率:或者数据的时效性只是当月有效的时候:这时我们就会涉及到数据库的分表操作了.当然,你也可以使用比较 ...
- 基于mybatis拦截器分表实现
1.拦截器简介 MyBatis提供了一种插件(plugin)的功能,但其实这是拦截器功能.基于这个拦截器我们可以选择在这些被拦截的方法执行前后加上某些逻辑或者在执行这些被拦截的方法时执行自己的逻辑. ...
- mybatis拦截器使用
目录 mybatis 拦截器接口Interceptor spring boot + mybatis整合 创建自己的拦截器MyInterceptor @Intercepts注解 mybatis拦截器入门 ...
- Mybatis拦截器实现原理深度分析
1.拦截器简介 拦截器可以说使我们平时开发经常用到的技术了,Spring AOP.Mybatis自定义插件原理都是基于拦截器实现的,而拦截器又是以动态代理为基础实现的,每个框架对拦截器的实现不完全相同 ...
- Mybatis那些事-拦截器(Plugin+Interceptor)
作者:yhjyumi的专栏 数据权限实现(Mybatis拦截器+JSqlParser) Mybatis的拦截器实现机制,使用的是JDK的InvocationHandler. 当我们调用Paramete ...
- 详解Mybatis拦截器(从使用到源码)
详解Mybatis拦截器(从使用到源码) MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能. 本文从配置到源码进行分析. 一.拦截器介绍 MyBatis 允许你在 ...
- 使用MyBatis拦截器后,摸鱼时间又长了。🐟
场景 在后端服务开发时,现在很流行的框架组合就是SSM(SpringBoot + Spring + MyBatis),在我们进行一些业务系统开发时,会有很多的业务数据表,而表中的信息从新插入开始,整个 ...
- MyBatis拦截器原理探究
MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis 允 ...
随机推荐
- AutoLayout与UIbutton
1.UIButton贴近右边,高度固定,宽度跟随标题变化 class TestButton: UIButton { } class ViewController: UIViewController { ...
- 音视频-YUV数据格式
一.YUV格式 1)kCVPixelFormatType_420YpCbCr8PlanarFullRange = 'f420' 对应YUV I420格式 2)kCVPixelFormatType_42 ...
- Kettle调优教程(推荐收藏)
1.调整JVM大小 linux文件路径:data-integration/spoon.sh windows路径: -Xms1024m:设置JVM初始内存为1024m.此值可以设置与-Xmx相同,以避免 ...
- kettle从入门到精通 第六十四课 ETL之kettle kettle中执行SQL脚本步骤,使用需当心
1.群里有不定时会有同学反馈执行SQL脚本步骤使用有问题,那么咱们今天一起来学习下该步骤.trans中的执行SQL脚本有两方面功能,使用时需小心,不然很容易踩坑. 官方定义: 翻译: 您可以使用此步骤 ...
- ubuntu server 安装慢 安装卡
无论是桌面版本ubuntu,还是server 版本,都喜欢在安装过程中联网下东西: 默认的软件包镜像地址下载非常慢,你自身的网络再差点,可能会安装好几个小时. 解决方案: 方案1: 安装前拔网线. 方 ...
- vitepress使用createContentLoader时遇到["vitepress" resolved to an ESM file. ESM file cannot be loaded by `require`.]报错
在使用vitepress构建一个所有博客的概览页的时候,使用到了createContentLoader这个api,但是在index.data.ts中定义并导出后,在md文件中调用遇到了下面这个问题: ...
- 接口签名规则和Java实现签名和验签代码
接口签名规则和Java实现签名和验签代码 签名规则 签名生成的通用步骤如下: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用U ...
- python 日志写入文件
import logging fmt = "%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s" ...
- vue目录文件结构
my-vue-app/ ├── node_modules/ # 依赖的第三方模块 ├── public/ # 公共文件,不会被打包 │ ├── index.html # 应用的入口 HTML 文件 │ ...
- 《Objective-C Direct Methods》学习笔记
原文通过对Objective-C发展史.Objective-C中Runtime的动态派发,C语言的直接派发进行铺垫介绍,引出了direct methods这个"新特性"(文章写于2 ...