千家信息网

mybatis的运行原理和查询实现

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要讲解了"mybatis的运行原理和查询实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"mybatis的运行原理和查询实现"吧!mybat
千家信息网最后更新 2024年11月11日mybatis的运行原理和查询实现

这篇文章主要讲解了"mybatis的运行原理和查询实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"mybatis的运行原理和查询实现"吧!


mybatis接口是编程是利用jdk动态来实现的
1.代理对象不管执行哪个方法都会执行mapperProxy的invoke方法,判断当前执行器的方法是否是Object类的方法,因为代理对象的方法一部分是从需要代理的接口中实现过来的,另一部分是Object里面的方法比如equals、toString等方法。


2.接着将Method包装成MapperMethod对象,该对象包含sqlCommand和MegthodSignature两个对象,sqlCommand(在初始该对象传入Configuration,接口的Class对象,Method进行初始化,调用自身的resolveMappedStatement方法获取拼接statementId,即接口的全路径名+方法名,调用Configuration.getMappedStatement方法获取MappedStatement对象,该对象维护了一条节点的封装,这边很容看出sqlCommand初始化传入这三个参数的作用了,MegthodSignature存储了当前要调用方法的详细信息。

3.MapperMethod调用execute方法传入sqlsession和方法参数,先通过sqlCommand判断当前语句的类型。这里我们先讲查询返回对象的情况,mybatis会通过MegthodSignature对象判断当前要执行的方法返回的条数和类型,去执行相对应的方法。首先调用convertArgsToSqlCommandParam对当前执行的方法参数的解析,接着调用defaultSqlSession.selectOne(command.getName(), param)的方法。这里的command.getName()的值是statementId也就是我们开发配置的namespace加对应语句的id

这里来分析selectList方法,截图如下:
首先通过statement,(其实就是我们刚刚上面所说的statementId)从configuration获取MappedStatement对象。MappedStatement包装当前运行方法对应的sql语句以及其类型。接着调用executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER)
进一层包装执行方法的参数,逻辑分页对象以及MappedStatement对象。传入该方法中,调用CachingExecutor这个执行器里面query方法,判断当前是否有配置缓存。没有缓存默认调用SimpleExecutor里面的query方法。继续查看simpleExecutor.query方法,该方法会先从本地缓存中也就是一级缓存中查询当前的要查询的接口。mybatis通生成缓存key来唯一判断当前的查询是否和之前的查询一致,一致则从缓存中取。(分析到这里我们可以发现mybatis会先查二级缓存,再查一级缓存)。

进入doQuery方法,声明原生jdbc的Statement 对象。获取全局配置信息Configuration,new一个StatementHandler对,也就是mybatis的四大对象之一。

prepareStatement方法主要获取connection,也就是数据库连接对象。最终调用底层的数据查询,并将查询接口交给ResultSetHandler进行封装。


感谢各位的阅读,以上就是"mybatis的运行原理和查询实现"的内容了,经过本文的学习后,相信大家对mybatis的运行原理和查询实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

方法 对象 查询 缓存 接口 运行 原理 也就是 参数 类型 语句 代理 包装 学习 配置 一致 信息 内容 就是 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库登录密码为啥可以有几个 网络安全素材绘画 杭州地铁网络安全知识竞赛 关于网络安全的对偶句100字 微软服务器不行是电脑的问题吗 韩国指纹数据库 建瓯手机应用软件开发 施工中如何保证通信网络安全运行 中国银行汇丰银行软件开发 安徽服务器虚拟化哪家好 哪里买书软件开发 网络暴力对网络安全的危害 网络安全工资标准2019 网络安全课程学习 饥荒冰箱返鲜mod云服务器 胖熊数据库图片 软件开发应用与实践 恒指网络安全股吧 软件开发公司拓客渠道 台州市五金行业erp软件开发 南宫市网络安全和信息化委员会 足浴软件开发咨询 ctf网络安全大赛奖 网络安全工作经费投入情况 南京银联软件开发答疑解惑 经济参考网网络安全 大厂县网络安全和信息化 邮件服务器凡垃圾协议 万国觉醒如何去到其他的服务器 淮北oa管理软件开发需要多少钱
0