SQLquery
在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中通过“::”的方式引用。
- 关于SQLquery demo链接 http://bbs.wex5.com/forum.php?mod=viewthread&tid=92168&extra=page%3D1