• jxTMS设计思想之数据查询


    jxTMS是以低成本快速定制为核心诉求的、SaaS模式的二次开发平台:jxTMS简介
    本文是讲述jxTMS平台中数据访问部分是如何设计的,整个系列请访问:jxTMS设计思想

    数据查询

    数据库的增删改查操作中最特殊的就是查询操作了。因为查询有几个特殊的地方:

    • 条件查询,可以说,任何查询都是带条件的,没条件的查询没有意义,而和update中根据主键值就可以确定条件不同,查询的条件是根据业务需要动态的设置的

    • 多表联合查询,增删改都是对单表的操作,而查询大多数都需要对多个数据表进行联合查询

    • 查询出来的数据可能太多,所以需要分页,可能需要排序、可能需要分组等等

    • 由于数据库中的数据量可能会太大,为了压缩存储的压力,所以经常会用带语义的数字来代替文字描述,但这样的数字如果直接显示给用户,显然用户会看不懂。所以还需要在数据查询出来后进行语义转换或语义补充

    所以和增删改直接拼接相应的SQL语句不同,jxTMS针对查询设计了一个SelectSql的类,专门用来组装select语句。jxTMS将之称为一个数据源

    SelectSql主要针对多表联合查询和条件查询,支持设置多个数据表、设置多个条件。其支持三种条件:

    • 不同表中的列比较【当然,一般都是相等】,这主要是用于多表查询时做表间连接

    • 某表某列和某数值的比较,该数值在定义查询条件时静态指定

    • 某表某列和某变量的比较,变量值在执行查询时动态指定

    SelectSql有一个概念:条件链,用以简便的区分出or和and连接:同一个条件链是与【and】连接;不同的条件链之间是或【or】连接。默认是对零号链进行设置,也就是默认是and连接。

    在需要执行时,需要两步来处置:

    • 将指定的SelectSql克隆出一个新的SelectSql,用来根据业务需要增加临时的额外的查询条件,如【我的任务】在设计时想列表所有指派给自己执行的任务,但可以动态的增加条件查询某个时间段的任务、名字中含有某个关键字的任务等等

    • 将设置好查询条件的SelectSql创建一个执行体,然后如果在创建SelectSql时使用了需在执行时动态指定值的变量,则先要给这些变量赋值;之后如有必要则设置limit和offset【分页查询】;然后才开始执行实际的查询

    查询的执行过程是:

    • 根据SelectSql设置的信息生成一个select语句

    • 用此select语句从数据库中查询出一个结果集

    • 根据指定的结果类型,将结果集要么转换为数据对象的队列或一个json数组

    针对列表查询的优化

    大多数的业务活动,都包括两个入口:创建、列表查询。

    所以jxTMS针对列表查询做了特别优化,使得可以非常简便的开发一个带条件查询的、分页的列表查询功能。

    完成一个完整的列表查询功能,所需要的全部工作包括:

    • 定义一个带查询条件界面、分页的数据表

    • 定义一个数据源,以执行数据库查询

    • 根据用户输入的查询条件,对数据源添加查询条件

    • 如果数据源带有条件变量,则在投入执行前对相应的变量赋值

    • 如需分页,则先查询出符合条件的总行数发送到前端初始化分页控件

    • 执行查询

    • 如有需要,则逐行/逐对象来执行语义转换或语义补充

    低成本定制为核心述求的jxTMS,所以针对上述的列表查询工作流做了相应的优化。使得开发者可以非常简单的按需开发出自己的列表查询功能。

    列表查询的完整工作流的说明请参考:jxTMS在线编程手册之列表查询

    目前jxTMS已经开放个人注册试用,欢迎大家注册试用:

    注册到jxTMS

    下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:

    如何用jxTMS开发一个功能

    下面的系列文章讲述了jxTMS的一些基本功能:

    jxTMS的HelloWorld

  • 相关阅读:
    使用Python制作内马尔的胜利之舞代码版
    子组件向父组件传参的方式?
    CRC校验(模型、手算、程序编写)
    浏览器 Experimental third-party storage partitioning(实验性第三方存储分区)
    关于开发中对端口(port)的几点理解
    基于SSM的汽车养护管理系统
    【运维、实施必读】ansible使用playbook批量部署nginx等服务及常见错误排查
    从 0 到 1,开发一个智能问答机器人
    mysql刷题笔记
    计算机网络-网络文件共享协议
  • 原文地址:https://blog.csdn.net/jxandrew/article/details/126261553