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的一些基本功能: