命令执行过程
最后更新:2024-05-11 05:30:01
|
状态:未完成
DataSet querys(String src, ConfigStore configs, Object obj, String... conditions)
-
service中先检测src
table中有可能带<数据源>前缀,如<ds_crm>hr_user
如果检测到其他数据源,切换到绑定指定数据源的service - 把obj中的键值取出来合并到configs中
-
检测configs中有没有分页数据,如果有检测总行数是否需要缓存
就是总行数多长时间内只查询一次,没到时间取上次缓存的总行数 -
检测src类型,可能出现的类型
4.1:表名
4.2:XML中定义的sql或mybatis等第三方XML中定义的SQL
4.3:原生的SQL -
检测src中的主键
在src中可以通过<id,name>后缀的方式指定主键
这里的主键涉及到自增列的返回值
-
调用dao.querys
检测运行环境(DataRuntime),包括数据源,数据库类型
-
从DataRuntime中获取相应数据源(数据库)对应的adapter
调用adapter.querys -
dmListener.prepareQuery ,InterceptorProxy.prepareQuery
调用buildQueryRun创建查询命令Run
8.1检测类型:XML/TEXT/AUTO(TABLE)
8.2先把configs中的占位值取出,添加到run中
8.3添加conditions条件,其中可能出现GROUP ORDER HAVING
如果有${sql}的原样接收不处理
主要解析k:v的形式,解析过程中注意识别时间中的:
如果有|分隔的,先拆分开形成or
解析参数中的k,v是否需要解密(k不表示列,表示http中的key) ID:id++
解析必须参数++ID:id(+表示空值也可参与SQL,++表示遇到空值整个SQL中断执行)
解析k前缀,表示表名,或自定义SQL中的条件id
解析比较运算符除了k:v格式还需要解析K:>=v,k:<=v
[k]:[v] 前一个[]表示数据库中是1,2,3格式即find_in_set仅对myql生效,后一个[]表示值是数组,即生成in条件
8.4解析内置类.方法(参数)
8.5解析or
8.6解析默认值
8.7解析加密方式
8.8如果不是k:v格式,按原生SQL处理
-
检测是否可以执行,++开头的条件有值
DefaultDriverAdapter:1162