这是一个简单的关于SQLquery的小的示例demo,它主要实现了利用前后端对数据进行动态的过滤,排序等功能,主要说明了 :filter ::filter 和orderby ::orderby的用法
SQLQuery(数据查询)在WeX5中的baas目录下,提供了默认的Action能力,SQLQuery数据查询功能。可以通过简单的数据库语句,实现对数据的过滤,排序等功能。再通过前端的调用,使数据灵活的显示在Web页面中。下面,我们就来介绍一下SQLQuery的使用方法: 首先我们需要在baas目录下新建一个文件,在新建的文件中创建一项服务服,务创建好之后,我们需要建立一个新的Action,选择好我们需要的数据库名称和数据库表之后,在继续新增一个Action,在实现中我们利用action:common/CRUD/sqlQuery来进行设置数据。 在SQLQuery中有两种形式的参数分别为private(私有的)和public(公有的)。其中private是SQLQuery中必填参数,他是SQL的必须参数,其中它包括countSql、DB、tablename和SQl四中属性。 1、countSql count可以获取到数据的总条数。 2、DB 数据源,用于选择当前所需要的数据库。 3、tableName数据库表名,用于选择当前所需要的数据库表 4、SQL SQL语句,使用SQL语句,对数据进行操作,比如过滤排序等。 Public(公有的)为SQLQuery的选填参数,它基本通过前端的方法传递参数,其中包括filter、limit、orderBy、offset、variables等属性,当然我们在这里也可以自行命名参数。通过前端的方法对数据进行过滤、排序、限制等。 在SQL中有两种参数的写法 分别是“:”但冒号写法 和 “::”双冒号写法。 单冒号写法是静态操作数据,它主要以SQL语句为主,在后端写好SQL语句,然后通后前端调用,实现对数据的操作。 双冒号写法是可以动态的操作数据,它主要通过前端的方法调用,动态的操作SQL的数据。灵活操作数据。
我们介绍一下单冒号于双冒号的区别及其具体用法。 1、(单冒号的写法):name----一个:的方式,这种是值参数,类似于我们通常的的sql中的?如:select * from abc(表名) where name=:name,前端设置通过data设置name='liming' data.filters.setVar("name",'liming');最终服务端按 select * from abc where name=?, 'liming'执行。 “:”后面的参数变量,是前端传过来的变量,可以随意起名字,但是要前端变量,要与后台单冒号后面的参数保持一致。 2、(双冒号的写法) ::filter----两个::的方式,这种参数将会拼到sql中去 如:select * from abc where ::filter ::orderBy,前端设置通过data设置filter, data.setFilter("filter1","name='liming'");data.setOrderBy("age",0); 最终服务端按select * from abc where name='liming' order by age DESC执行 “::”后面为Public提供的参数,一般常用的就是filter和orderBy两种。
下面举例说明一下filter和orderBy 的用法。因为MySql和Oracle默认已经定义好了Limit分页查询的能力,当然在其他数据库,同样也可以实现limit的功能,所以这里我们没有limit的用法,它在baasData属性中直接设置即可。 1、:filter与::filter :filter 静态过滤数据,主要写在 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 :filter OR u.fClass LIKE :filter OR u.fDescription LIKE :filter) 前端调用方法:data.filters.setVar("filter",'%'+searchVal+'%'); data.filters.setVar("useSearch",searchVal?1:0); 该方法只能在数据库中提前规定好过滤数据的规则。 ::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 +"%'"); 该方法可以动态的设置熟虑方法,进行数据的查询, 2、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。
案例压缩包:使用前注意说明内容
|