执行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中模糊搜索 模糊匹配如何实现?
|
人工智能 Java API
Spring AI 抢先体验,5 分钟玩转 Java AI 应用开发
Spring Cloud Alibaba AI 以 Spring AI 为基础,并在此基础上提供阿里云通义系列大模型全面适配,让用户在 5 分钟内开发基于通义大模型的 Java AI 应用。
228071 138
|
8月前
|
人工智能 算法 JavaScript
步入足下新纪元:玩美移动虚拟试鞋 AI API 如何通过高精度追踪重塑鞋履电商?
玩美移动推出虚拟试鞋AI API,依托6DoF足部追踪、智能遮挡与PBR材质还原技术,实现高精度3D虚拟试穿。支持多平台集成,提升转化率、降低退货率,助力鞋履电商数字化升级。(238字)
582 1
|
7月前
|
存储 人工智能 安全
AI智能体的开发费用
2026年AI智能体开发成本两极分化:低代码工具使简单Agent成本降至5千-2万元,而复杂企业级系统仍需30万以上。费用涵盖开发、API、算力及维护,建议从中级智能体切入,结合开源平台与工作流模式降本增效。#AI智能体 #降本策略
|
存储 缓存 数据可视化
qml开发笔记(五): 可视化元素BorderImage、AnimatedImage、AnimatedSprite、SpriteSequence
qml开发笔记(五): 可视化元素BorderImage、AnimatedImage、AnimatedSprite、SpriteSequence
qml开发笔记(五): 可视化元素BorderImage、AnimatedImage、AnimatedSprite、SpriteSequence
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
7657 1
|
关系型数据库 MySQL 数据安全/隐私保护
mysql无法启动服务connect to server at ‘localhost‘ failed
mysql无法启动服务connect to server at ‘localhost‘ failed
|
Java Linux 开发工具
Linux安装Java
Linux安装Java
1325 0