现在的位置: 首页 > 综合 > 正文

LigerUI中根据表单查询条件进行查询,使用表格Grid展示

2013年12月20日 ⁄ 综合 ⁄ 共 2349字 ⁄ 字号 评论关闭

动态:更新几篇工作中ligerUI的文章。

目的:记录、累积经验;既作自己收藏、同也分享大家。

归档:最近几篇博客全部归档在《LigerUI—工作随记》中,方便查阅哈

博客中不更新控件js使用,因为都用具体的教程demo和api。稍后上传博客中~

在此写一些工作中使用,在api中没有找到,或没有在明显地方。

今天核心:LigerUI中根据表单查询条件进行查询,使用表格Grid展示

其实原型如下:

我们原来做法是怎么样的呢?

第一:不用LigerUI。

思路:实现这个原型,要写两个方法。

初次打开,全部查询。queryAll()方法。其次:带参数的查询方法queryAll(params)

这样的话,三层中肯定需要再增加queryAll(params)这个方法,并且还必须写sql语句。

第二:使用LigerUI。

一种:采用类似原始的JSP做法。

其中第一种方法中,写两个方法,也许是最直白的思维,但是可以再仔细想想,queryAll()和queryAll(params)区别在哪?比如:select * from user;  select * from user where id=? and name=?【当然,这个sql有点简单( ⊙ o ⊙ )】

仔细看看,其实第二个就比第一个多where查询而已。若用面向对象的思维来审视的话,“代码”大部分重复,就会有一种坏掉的味道。

代码重复,则会想到抽象;对于以上情况,则会想到合二为一。

呵呵,对于sql也是一样的。比如当传入的参数id和name不为null,则进行条件查询进行所谓第二个,否则进行第一个。

按照这种思路,则:

 List queryUsers(params){

       if (判断为null) 则select * from user;

       else  则  select * from user where id=? and name=?

}

以上是针对一个需求而言的抽象,若对于整个系统而言,当然也可以抽象出此类方法:

思路如下:

既然要抽象整个系统的公共方法,那么sql语句肯定也有动态传入。

动态sql语句可以写在配置文件中,比如按照某种格式写sql配置。【以下的?是参数传入】

比如:select * from  user where 1=1 { and id=? } {and name=?}

若id存在、name不存在:【id不存在、name存在】

select * from user where 1=1 and id=?【select * from user where 1=1 and name=?】

若id不存在、name不存在【都存在】

select * from user 【select * from user where 1=1 and id=? and name=?】

则1.sql截取到第一次带有{}

temp1=select * from user where 1=1

2.判断第一次遇到{}的,取对应的参数,是否为null,若为null,则游标进行前进,若不为null,则拼接此字符串

temp2=temp1+"and id=?"【temp2=select * from user where 1=1 and id=?】

3.继续向前。。。。类似第二步

这样,我们就可以按照格式,进行配置sql语句即可,然后按照约定进行传入参数了。

第二种:使用LigerUI自带固有的本领【where属性】。

where: f_getWhere()【其中f_getWhere是自定义函数】

 //过滤属性
 function f_getWhere(){
   //  alert(JSON.stringify(griddata));
   if (!assrRelation) return null;
     var clause = function (rowdata, rowindex)
     {
     	var dutyname=depart.getText(); //部门
     	var assrname=$("#assrname").val(); //考核人的姓名
     	var groupname=flag.getText(); //分组名称
        return ( (rowdata.DUTYNAME.indexOf(dutyname) > -1) && (rowdata.EMPEREALNAME.indexOf(assrname) > -1) && (rowdata.GROUPNAME.indexOf(groupname) > -1));
     };
     return clause;
 }

查询按钮的事件如下:

	$("#submit").ligerButton({
		click:function(){
			assrRelation.options.data = $.extend(true, {}, griddata);
			assrRelation.loadData(f_getWhere());
		}
	});

这里面需要有个问题注意:

因为where属性本质是从后台全取,然后再从中进行属性筛选。

所以必须保证拿到data,其中代码中的griddata是第一次展示grid,保存下来的gridata

在客户端进行查询匹配。从后台取出所有的,然后再前台进行刷选。

总的来说,查询分为几类:【针对一个模块,比如用户查询模块】

1.一个模块,几个需求几个方法。【查询所有、根据用户ID查询、根据用户名称查询……】

2.一个模块,一个公共代码方法【if  sql1 else sql2】

3.整个系统,提炼一个公共代码方法【见上文分析思想】

4.后台全拿过来,前台再筛【使用前端框架】

另外还有一种,后台框架具有特性,比如ibatis中:

根据自己固有的标签,来进行拼接sql,则不用自己封装公共方法【不用2、3】比如:

<dynamic>

       <isNotNull property="name" prepend="AND"> name=#name#</isNotNull>

</dynamic>

至于使用哪种形式,因事制宜。。。。。

抱歉!评论已关闭.