在WeX5中的baas目录下,提供了默认的Action能力,SQLQuery数据查询功能。可以通过简单的数据库语句,实现对数据的过滤,排序等功能。再通过前端的调用,使数据灵活的显示在Web页面中。下面,我们就来介绍一下SQLQuery的使用方法:

准备工作:

首先我们需要在baas目录下新建一个文件,在新建的文件中创建一项服务服,服务创建好之后,我们需要建立一个新的Action,选择好我们需要的数据库名称和数据库表之后,在继续新增一个Action,在实现中我们利用action:common/CRUD/sqlQuery来进行设置数据。

在SQLQuery中有两种形式的参数分别为private(私有参数)和public(公有参数)。其中private是Baas中定义Action需要给出参数值,例如countSql、DB、tablename和sql四个参数;public是由前端给定的参数。

private(私有参数)

  • countSql:获取数据总条数的sql语句。(格式类似sql,支持“:”和“::”
  • db:指定sql执行的数据源名称。
  • tableName:数据库表名。
  • sql:查询使用的sql语句。sql参数可以通过特殊的格式,引用variables中的变量或其它的public参数, 分别是“:”单冒号写法 和 “::”双冒号写法。sql语句中,必须指定除limit之外的所有sql选项,如select, from, where, order by, group by等等
    “:”单冒号是variables中的变量;“::”双冒号可以引用其它的public参数。

    我们介绍一下单冒号于双冒号的区别及其具体用法。

    1、(单冒号的写法):name—-一个:的方式,这种是值参数,类似于我们通常的的sql中的“?”,如:
    sql参数:select * from abc(表名) where name=:name
    前端js:this.comp(“data1”).filters.setVar(“name”,’liming’);
    最终服务端按 select * from abc where name=?, ‘liming’执行。
    其中“:”后面的参数变量,是前端传过来的变量,可以随意起名字,但是要前端变量,要与后台单冒号后面的参数保持一致。

    2、(双冒号的写法) ::filter—-两个“::”的方式, 通过这种方式,可以将指定的public参数直接添加到相应的sql中,如:
    sql参数:select * from abc where ::filter ::orderBy
    前端js:
    var data1 = this.comp(“data1”);
    data1.setFilter(“filter1″,”name=’liming'”);
    data1.setOrderBy(“age”,0);
    最终服务端按select * from abc where name=’liming’ order by age DESC执行。
    “::”后的变量名必须是public参数名,一般常用的就是::filter和::orderBy两个。

    下面举例说明一下filter和orderBy 的用法。

    :var1与::filter

    :var1 静态过滤数据,如sql参数 :

    SELECT u.fID,u.fType,u.fClass,u.fDescription,u.fCreateTime,u.fMoney,u.fDate FROM account as u WHERE 
     (0=:useSearch) or (u.fType LIKE :var1 OR u.fClass LIKE :var1 OR u.fDescription LIKE :var1) 
    

    前端调用方法:

     data.filters.setVar("var1",'%'+searchVal+'%');
     data.filters.setVar("useSearch",searchVal?1:0); 
    

    该方法只能在sql中指定好过虑条件的格式,通过前端传递过虑条件的值。

    ::filter 动态过滤数据,如sql参数 :

    SELECT u.fID,u.fType,u.fClass,u.fDescription,u.fCreateTime,u.fMoney,u.fDate FROM account as u WHERE ::filter
    

    前端调用方法:

    var select =this.getElementByXid("select2").value;
    var data = event.source;
    data.setFilter("filter1", "u.fType like '%"+ select +"%'"); 
    

    该方法可以动态的设置过虑条件,进行数据的查询,

    orderBy 与 :: orderBy

    orderBy: 在数据库中排序,为静态排序 使用 order by 字段名 DESC/ASC 即可做到排序
    ::orderBy,动态对数据进行排序,可以利用前端的 data.setOrderBy(relation, type)方法调用,实现对数据的动态排序,如:

    var select =this.getElementByXid("select2").value;
    data.setOrderBy(select,1);	//0:DESC 倒叙/1:ASC 正序
    

    public(公有参数), filter、limit、offset、orderBy可以从前端直接设置使用,我们主要说一下variables(条件变量)和自定义属性var-XXX的用法。
    首先,variable同样也是有前端传过来的参数,只是这个参数一般是比较复杂的JSON格式的对象,或者复杂的字符串类型,比较不方便操作。那我们可以自定义一个以var-打头的条件参数,来替代复杂的variable,使参数数据更方便操作。var-XXX是一个Integer类型的数据,默认值为0。

public(公有参数)

public(公有参数)通过前端的方法传递参数,其中包括filter、limit、orderBy、offset、variables等,当然我们在这里也可以自行命名参数。前端参数除了limit之外,其它的public参数如何要生效,必须在参数sql中通过“::”的方式引用。