温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mybatis的运行原理和查询实现

发布时间:2021-06-22 15:15:26 来源:亿速云 阅读:126 作者:chen 栏目:大数据

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


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

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

3.MapperMethod调用execute方法传入sqlsession和方法参数,先通过sqlCommand判断当前语句的类型。这里我们先讲查询返回对象的情况,mybatis会通过MegthodSignature对象判断当前要执行的方法返回的条数和类型,去执行相对应的方法。首先调用convertArgsToSqlCommandParam对当前执行的方法参数的解析,接着调用defaultSqlSession.selectOne(command.getName(), param)的方法。这里的command.getName()的值是statementId也就是我们开发配置的namespace加对应语句的id
mybatis的运行原理和查询实现
这里来分析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会先查二级缓存,再查一级缓存)。
mybatis的运行原理和查询实现
进入doQuery方法,声明原生jdbc的Statement 对象。获取全局配置信息Configuration,new一个StatementHandler对,也就是mybatis的四大对象之一。
mybatis的运行原理和查询实现
prepareStatement方法主要获取connection,也就是数据库连接对象。最终调用底层的数据查询,并将查询接口交给ResultSetHandler进行封装。


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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI