执行selectList方法|学习笔记

简介: 快速学习执行selectList方法

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术执行selectList方法学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15951


执行selectList方法

 

Default Sqlsession,我们讲其中一条命令就是他的 select,就是如果说那边的那个map method里头绑定的是一个 select的动作,那他最后会调到这个 select的命令。这个正中间啊对应的方法是 select list,他的第一个参数是 statements,第二个参数是它的参数,第三个参数是它的分页,它叫做 rowBound,就是你要返回结果中间的行的上下的边界,就是分页,这是他的 select list的这个方法。

进来以后,第一件就是看配置,因为他的所有东西都在配置里头,对于这个secssion来说,首先从他的这个配置信息中间把这个 statement变成一个map的船舰,这个 statement是什么?

是一个 ID,就是每一个注解,每个标签都有个 ID,所以他需要用这个 ID去得到在配置里头,这个 ID对应的那些信息是什么,这个对应的这个信息就是它的 segment的全部内容,那在看中间他有一个Map的statement的方法。然后把这个ID给他。

就会得到一个 market segment,这个就是在标签里定义的那个 statement的定义。拿到了这个 statement以后,则交给 executer去做执行。

这里我们收到他其实有多种 executer,每种 excuter的执行逻辑都不一样,我们挑一个最简单的就是那个 simple excuter,假如我们现在配的是最简单的simple excuse。就是返回这个 map statement,就去调 excuter的方法,然后把拿到的那个 ID对应的那个 statement的所有的信息,它的传递的参数。

他要返回的这个行的边界。最后一个是结果该怎么处理法,我们默认结果不作处理,所以代码中间它的结果也是一个常量,叫做 No result就是结果就是什么,结果就直接返回,不做任何处理去。去调这个 simple excuter的方法,在 simple

excuter 的方法中间,这个科学方法其实是写在它的父类里头,写在他的这个base excuter 里头,这个 base excuter中间的这个方法中间。

首先来说是要把这个 Parameter和在这个 map里面的这个S ql语句进行组合,最后变成我们可以运行的 Sql语句,因为我们知道在这个 map里面的那个数据的都写的是参数,所以说我们要把这个parameter和那个参数绑在一起,所以首先来做的就是利用他传递了这个 map statement的这个对象,来把这个参数和SQL语句绑定上去,所以他调他的这个 getBoundSql的方法把 parameter的传过来,返回的就是他绑好的 Sql语句,就是 boundsql。这是第一步,第二步,它去产生它的缓存的key,去计算它的缓存的key因为它有一级缓存,就是对于 simple,他都有一级缓存,所有都有缓存,所以大家算一下 key是什么,这是它的一个独立的方法,我们知道他的这个 key的计算是跟他的这个 statement的id有关,跟他的参数有关,就是它的传递的这个参数和值,还有他的 statement的id,会传出来它的这个缓存的参数是什么,至少我们知道他要把这个 map statement parameter,还有他要返回的 Bounds,因为返回这个语句是一样,这个 parameter是一样,但是它要返回的这个行数不一样的话,也没意义,所以 row bounds要返回来,还有他的这个处理的结果常量,最后是 bound的 SQL语句返回回来会产生参数 key,那拿他的 key以后,他首先会去缓存里查一下,那它的这个查询他又写了一个方法,这个方法叫做query的方法,参数是一样的,他写的这个方法里头,他先到他的 local cache里头,对于这个 basic speech来说,他都有一个本地缓存,首先到这个 logo cachr里头去看看这个对象有没有,这个如果 return是有值的话,就直接返回了,他就不会再往下执行了,如果是没有的,他则又写了一个方法,这个方法套了很多,这个方法叫做从数据库里去找,再从数据库里头去找的过程中间,他又在调自己的一个方法,这个方法是 protected的方法,叫做 do query,这个是真实的去做查询,参数

是跟前面一样的参数,查完了以后,然后把它调这个 logo开始的方法,把它put进去,key 这样的一个逻辑。

所以在这个父类里头可以看到它定义了说他的缓存机制,它定义首先它的这个statements parameter 是怎样转换的,那个 statement把它合到一起,最后变成我们要查询的这个 Sql语句,然后去产生它的这个 Key,然后用他的这个 Key去查一下他有没有,如果有的话就会直接返回,如果没有的话,它真的会到数据库里去找。

找的时候真的是去调 do query这个方法去找的,dp query 方法,在 base executer 中间是写的是 protected方法,而这个方法的实现是在底下的子类中间实现了,也就是在 simple里头直接去找,在这个 reuse的 executer也是看这个

statement 是否有缓存,缓存那就不要作预编译,直接拉出来去找,betis 的时候是批量去找,开启的时候是要到二级,缓存你再去找一遍,二级缓存里面有的话就返回,二级缓存没有的话,再看这个开启放的再由他去找。

所以这个 do query是在子类中间去实现不同的这个结果,最后得到这个值,再把它

放到这里然后回来,这是模板方法的模式。

这个 do query就是定义在父类中间是 protected的,在子类中间实现了。

相关文章
|
JavaScript 前端开发
js中模糊搜索 模糊匹配如何实现?
js中模糊搜索 模糊匹配如何实现?
|
5月前
|
传感器 芯片 内存技术
南京观海微电子---GPIO八种模式及工作原理(电路原理和三极管)
本文详细介绍STM32的GPIO接口类型、工作模式及初始化配置。涵盖普通GPIO、协议类、内存与模拟接口,解析八种GPIO模式(如浮空、上/下拉、推挽、开漏)及其应用场景,并对比F1与F4系列差异,配以框图与代码实例,全面掌握GPIO原理与使用方法。
南京观海微电子---GPIO八种模式及工作原理(电路原理和三极管)
|
8月前
|
存储 SQL JSON
MySQL数据类型全解析:如何正确选择字段类型
本文深入解析了MySQL中的各类字段类型选择,包括数值类型、字符串类型、日期时间类型等,通过实际案例对比不同选择的优劣,并提供了字段类型选择的实用指南和最佳实践。内容涵盖类型对比、示例代码、存储优化建议等,帮助开发者在设计数据库时做出高效、合理的类型选择,从而提升数据库性能与数据完整性。
|
数据采集 SQL 存储
【亲测有用】数据中台数据比对管理能力演示
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
存储 人工智能 运维
云监控 2.0:全栈智能可观测平台
云监控2.0是由阿里云智能集团资深产品专家司徒放分享的全栈智能可观测平台。该平台旨在解决传统监控系统的割裂问题,通过统一接入、存储和观测模型,实现基础设施、应用及用户体验的全面可观测。云监控2.0引入了智能体和大模型技术,支持全局搜索、问题排查和根因定位,大幅提升运维效率。未来将扩展更多智能洞察场景,并开放API供客户定制使用。
870 7
|
存储 Python 容器
`click`是一个用于构建命令行接口的Python包,它提供了简单、可组合的命令行解析器。
`click`是一个用于构建命令行接口的Python包,它提供了简单、可组合的命令行解析器。
|
存储 数据库 对象存储
新版本发布:查询更快,兼容更强,TDengine 3.3.4.3 功能解析
经过 TDengine 研发团队的精心打磨,TDengine 3.3.4.3 版本正式发布。作为时序数据库领域的领先产品,TDengine 一直致力于为用户提供高效、稳定、易用的解决方案。本次版本更新延续了一贯的高标准,为用户带来了多项实用的新特性,并对系统性能进行了深度优化。
339 3
|
缓存 Java 开发者
Java多线程并发编程:同步机制与实践应用
本文深入探讨Java多线程中的同步机制,分析了多线程并发带来的数据不一致等问题,详细介绍了`synchronized`关键字、`ReentrantLock`显式锁及`ReentrantReadWriteLock`读写锁的应用,结合代码示例展示了如何有效解决竞态条件,提升程序性能与稳定性。
951 6

热门文章

最新文章