结合拦截器描述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 允 ...
随机推荐
- c++ Primer Plus 第六版学习记录
立个flag,一天看20页,一个半月看完!!! 第一章 预备知识 高效简洁.面向对象.泛型编程 汇编不具有通用性,换一个处理器可能就要重新写一套! 编译器(是一个程序)负责解决这个问题,把一份高级语言 ...
- zookeeper:Unexpected exception, exiting abnormally ::java.io.EOFException
转载请注明出处: 服务器中断,重启服务器在重启kafka服务时,遇到如下报错: 2024-06-05 13:52:56,251 [myid:] - ERROR [main:ZooKeeperServe ...
- react的反向代理
在配置在src文件夹中setupProxy.js文件,并通过npm安装http-proxy-middleware,代理中间件模块 npm i -S http-proxy-middleware 配置反向 ...
- CF437E The Child and Polygon
The Child and Polygon 题解 这世界这么大,遇到了这个奇奇怪怪的题. 这道题其实可以很自然的联想到卡特兰数. 在卡特兰数的计数中,有这么一个意义:\(C_n\) 表示把有 \(n+ ...
- [SWPUCTF 2021 新生赛]easy_sql
这道题呢就是很简单的sql注入,我们直接用sqlmap来跑. 首先我们打开页面可以看见提示,参数为wllm **然后我们启动虚拟机,输入sqlmap的命令:sqlmap -u "url地址/ ...
- 蓝屏rtux64w10.sys
蓝屏rtux64w10.sys 环境: WIN10 + Realtek USB RTL8156B 2.5G网卡 表现: 局域网复制时,间隔性速度变为0,多次后,最终蓝屏. 解决方法: 更新驱动. 地 ...
- 微博Lite版安装
微博Lite版安装 前置条件,需要使用chrome,或chromium内核的浏览器. 1.浏览器输入:https://m.weibo.cn/ 2.在地址栏最右侧点击安装. --
- Vue3:介绍
Vue 3 相较于 Vue 2 在多个方面进行了改进和优化,主要优势包括但不限于以下几个方面: 响应式系统优化: Vue 3 引入了基于 Proxy 的响应式系统,取代了 Vue 2 中基于 Obje ...
- 消息sms 邮箱/手机号/push发送的方案 & 定时任务xxlJob灵活度 & 泛型和发送的模板类设计
消息sms 邮箱/手机号/push发送的方案 & 定时任务xxlJob灵活度 & 泛型和发送的模板类设计 1.消息sms 邮箱/手机号/push发送的方案 1.判断收件人地址是否为空, ...
- 三种方法教你下载 Windows 10 和 Windows 11 原生镜像
原文地址:https://itxiaozhang.com/three-methods-to-download-windows-10-and-windows-11-iso/ 本文配合视频食用效果最佳,视 ...