命令执行过程

最后更新:2024-03-12 11:08:34 | 状态:未完成
DataSet querys(String src, ConfigStore configs, Object obj, String... conditions)
  1. service中先检测src
    table中有可能带<数据源>前缀,如<ds_crm>hr_user
    如果检测到其他数据源,切换到绑定指定数据源的service
  2.  把obj中的键值取出来合并到configs中
  3. 检测configs中有没有分页数据,如果有检测总行数是否需要缓存
    就是总行数多长时间内只查询一次,没到时间取上次缓存的总行数
  4. 检测src类型,可能出现的类型
    4.1:表名
    4.2:XML中定义的sql或mybatis等第三方XML中定义的SQL
    4.3:原生的SQL
  5. 检测src中的主键
    在src中可以通过<id,name>后缀的方式指定主键
    这里的主键涉及到自增列的返回值
  6. 调用dao.querys
    检测运行环境(DataRuntime),包括数据源,数据库类型
  7. 从DataRuntime中获取相应数据源(数据库)对应的adapter
    调用adapter.querys
  8. 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处理
  9. 检测是否可以执行,++开头的条件有值
    DefaultDriverAdapter:1162
最近更新 搜索 提交