执行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的,在子类中间实现了。

相关文章
|
8天前
|
前端开发 JavaScript 数据处理
在JavaScript中,异步函数是指那些不会立即执行完毕,而是会在未来的某个时间点(比如某个操作完成后,或者某个事件触发后)才完成其执行的函数
【6月更文挑战第15天】JavaScript中的异步函数用于处理非同步任务,如网络请求或定时操作。它们使用回调、Promise或async/await。
21 7
|
7天前
|
存储 算法 Swift
Swift开发——循环执行方式
Swift语言中的循环主要包括`for-in`和`while`结构。`for-in`适用于遍历数字区间、字符串和字典,支持使用`stride`函数定制步进。字典遍历时,可以用二元元组`(k, v)`访问键值对。`while`循环有标准形式和`repeat-while`形式,确保至少执行一次循环体。程序示例展示了`for-in`和不同`while`结构的用法,包括计算阶乘、奇数和、加密字符串以及最大公约数和最小公倍数。
10 0
Swift开发——循环执行方式
|
1月前
|
Java Spring 容器
面试题:怎样为组件在创建的时候指定执行一个函数,在销毁的时候也先执行一个函数
面试题:怎样为组件在创建的时候指定执行一个函数,在销毁的时候也先执行一个函数
43 0
|
11月前
|
Java
线程池的核心参数及执行原理你知道嘛?
线程池是一种管理和复用线程的机制,它可以提高线程的利用率和系统的性能。
297 0
|
Python
Python编程 顺序执行与程序的主入口
Python编程 顺序执行与程序的主入口
105 0
|
Java 调度
多线程执行顺序以及run方法的调用
多线程执行顺序以及run方法的调用
多线程执行顺序以及run方法的调用
|
1月前
|
弹性计算 运维 Serverless
基于函数计算搭建的异步任务执行框架
本文介绍基于函数计算实现的异步任务执行框架(编程语言:Python3),把跟阿里云资源开通相关的API封装到一个独立的模块,提供标准的API跟企业内部在用的ITSM或OA进行集成,降低客户对接API门槛,更快上阿里云。
基于函数计算搭建的异步任务执行框架
|
SQL Java 开发者
执行doQuery方法|学习笔记
快速学习执行doQuery方法
205 0
执行doQuery方法|学习笔记
|
程序员 Scala 开发者
函数(方法)的调用机制|学习笔记
快速学习函数(方法)的调用机制。
79 0
函数(方法)的调用机制|学习笔记
|
Java Android开发
JobService源码探究之 onStartJob()里执行耗时逻辑导致Job可能被强制销毁
JobService源码探究之 onStartJob()里执行耗时逻辑导致Job可能被强制销毁