QueryBuilder 前端构造SQL条件的插件使用方法

页面引入JS等:

1 <script type="text/javascript" src="/qysds-jx/pages/gzrw/js/jquery.js"></script>
2 <script type="text/javascript" src="/qysds-jx/pages/gzrw/js/bootstrap.min.js"></script>
3 <script type="text/javascript" src="/qysds-jx/pages/gzrw/js/sql-parser.js"></script>
4 <script type="text/javascript" src="/qysds-jx/pages/gzrw/js/doT.js"></script>
5 <script type="text/javascript" src="/qysds-jx/pages/gzrw/js/jQuery.extendext.min.js"></script>
6 <script type="text/javascript" src="/qysds-jx/pages/gzrw/js/query-builder.js" charset="UTF-8"></script>

除query-builder.js外 其他均为依赖js
一般我们只需要使用两个按钮就好了。获取sql,重置。

1 <button class="btn btn-danger reset">Reset</button>
2
3 <button class="btn btn-primary parse-sql" data-stmt="false">SQL</button>

在自己的js里面给这俩按钮绑定事件:

 1 //绑定重置事件
 2 $(‘.reset‘).on(‘click‘, function() {
 3 $(‘#builder‘).queryBuilder(‘reset‘);
 4 $(‘#result‘).addClass(‘hide‘).find(‘pre‘).empty();
 5 });
 6
 7 //绑定生成sql事件
 8 $(‘.parse-sql‘).on(‘click‘, function() {
 9 var res = $(‘#builder‘).queryBuilder(‘getSQL‘, $(this).data(‘stmt‘), false);
10 var SQL = res.sql + (res.params ? ‘\n\n‘ + JSON.stringify(res.params, undefined, 2) : ‘‘);
11 this.conditionSql = SQL;
12 $(‘#result‘).removeClass(‘hide‘).find(‘pre‘).html(SQL);
13 });

下面是以前做过的一个使用插件的Demo,看下就知道怎么使用了

  1 /**
  2  * 构造查询条件的入口在   insertFileds(array) 这个方法;
  3  *
  4  * 根据前面的数据格式 可改变参数的形式,具体数据对象的属性也可以变,
  5  *
  6  */
  7 $(document).ready(function() {
  8   demo.init();
  9 });
 10
 11 demo = {
 12   el: null, //dom对象
 13   builder: null, // sql解析器
 14   conditionSql: null,
 15   init: function() {
 16     this.el = $(‘#builder‘);
 17     if (Query.Builder) {
 18       this.builder = new Query.Builder(this.el);
 19     }
 20
 21     demo.bindEvents();
 22     demo.insertFileds();
 23     /**
 24      * 除上面的方法  还可以
 25      *
 26      * var option = this.builder.getOption();
 27      *
 28      * ... 对这个option的filter进行注入
 29      *
 30      * 然后 this.builder.render(option);
 31      */
 32   },
 33   /**
 34    * 注入可选择的列
 35    * @param  {[type]} array [description]
 36    * @return {[type]}       [description]
 37    */
 38   insertFileds: function(array) {
 39     //临时造的假数据
 40     var array = [{
 41       "table": "wd_swjg",
 42       "tableName": "税务机关表",
 43       "field": "swjg_dm",
 44       "mc": "税务机关代码",
 45       "type": "string"
 46     }, {
 47       "table": "wd_yf",
 48       "tableName": "维度月份表",
 49       "field": "yf_id",
 50       "mc": "月份代码",
 51       "type": "string"
 52     }, {
 53       "table": "wd_yf",
 54       "tableName": "维度月份表",
 55       "field": "scjlrq",
 56       "mc": "生成记录日期",
 57       "type": "date"
 58     }, {
 59       "table": "qysds_szsb_2014hy",
 60       "tableName": "企税年报主表",
 61       "field": "zs",
 62       "mc": "总数",
 63       "type": "number"
 64     }];
 65     this.builder.addFilters(array);
 66     this.builder.render();
 67   },
 68   /**
 69    * 绑定页面事件
 70    * @return {[type]} [description]
 71    */
 72   bindEvents: function() {
 73
 74     //绑定重置事件
 75     $(‘.reset‘).on(‘click‘, function() {
 76       $(‘#builder‘).queryBuilder(‘reset‘);
 77       $(‘#result‘).addClass(‘hide‘).find(‘pre‘).empty();
 78     });
 79
 80     //绑定生成sql事件
 81     $(‘.parse-sql‘).on(‘click‘, function() {
 82       var res = $(‘#builder‘).queryBuilder(‘getSQL‘, $(this).data(‘stmt‘), false);
 83       var SQL = res.sql + (res.params ? ‘\n\n‘ + JSON.stringify(res.params, undefined, 2) : ‘‘);
 84       this.conditionSql = SQL;
 85       $(‘#result‘).removeClass(‘hide‘).find(‘pre‘).html(SQL);
 86     });
 87   },
 88   /**
 89    * 获取查询条件sql
 90    * @return {[type]} [description]
 91    */
 92   getConditionSql: function() {
 93
 94     return this.conditionSql;
 95   }
 96
 97
 98 }
 99 Query = {};
100
101 /**
102  * sql解析器
103  * @param {[type]} obj [description]
104  */
105 Query.Builder = function(obj) {
106   this.el = obj;
107   this.init();
108 }
109
110 Query.Builder.prototype = {
111   el: null,
112   option: null,
113   /**
114    * 目前支持的sql计算方式
115    * @type {Array}
116    */
117   operators: [{
118     type: ‘equal‘,
119     optgroup: ‘basic‘
120   }, {
121     type: ‘not_equal‘,
122     optgroup: ‘basic‘
123   }, {
124     type: ‘in‘,
125     optgroup: ‘basic‘
126   }, {
127     type: ‘not_in‘,
128     optgroup: ‘basic‘
129   }, {
130     type: ‘less‘,
131     optgroup: ‘numbers‘
132   }, {
133     type: ‘less_or_equal‘,
134     optgroup: ‘numbers‘
135   }, {
136     type: ‘greater‘,
137     optgroup: ‘numbers‘
138   }, {
139     type: ‘greater_or_equal‘,
140     optgroup: ‘numbers‘
141   }, {
142     type: ‘between‘,
143     optgroup: ‘numbers‘
144   }, {
145     type: ‘not_between‘,
146     optgroup: ‘numbers‘
147   }, {
148     type: ‘begins_with‘,
149     optgroup: ‘strings‘
150   }, {
151     type: ‘not_begins_with‘,
152     optgroup: ‘strings‘
153   }, {
154     type: ‘contains‘,
155     optgroup: ‘strings‘
156   }, {
157     type: ‘not_contains‘,
158     optgroup: ‘strings‘
159   }, {
160     type: ‘ends_with‘,
161     optgroup: ‘strings‘
162   }, {
163     type: ‘not_ends_with‘,
164     optgroup: ‘strings‘
165   }, {
166     type: ‘is_empty‘
167   }, {
168     type: ‘is_not_empty‘
169   }, {
170     type: ‘is_null‘
171   }, {
172     type: ‘is_not_null‘
173   }],
174   init: function() {
175     this.initOption();
176     //this.render();
177   },
178   getOption: function() {
179     return this.option;
180   },
181   setOption: function(data) {
182     this.option = data;
183     return this;
184   },
185   /**
186    * 构造filter   根据具体的数据格式 改写此方法
187    * @param {[type]} array [description]
188    */
189   addFilters: function(array) {
190     var tempArray = [];
191     for (var i = 0, j = array.length; i < j; i++) {
192       var obj = array[i];
193       var template = new Query.filter();
194       //这块可以前面构造的数据格式跟后面的一直就不需要挨个赋值了
195       template.id = obj.table + "." + obj.field;
196       template.label = obj.tableName + "." + obj.mc;
197       template.type = obj.type == "number" ? "double" : "string";
198       tempArray.push(template);
199       delete template;
200     }
201     if (tempArray.length > 0) {
202       this.option.filters = tempArray;
203     }
204
205   },
206   /**
207    * 展现页面
208    * 支持自定义 option
209    * @param  {[type]} option [description]
210    * @return {[type]}        [description]
211    */
212   render: function(option) {
213     //var option = option || this.option;
214     var option = $.extend({}, this.option, option);
215     this.el.queryBuilder(option);
216   },
217   /**
218    * 初始化 option  只有基本的属性
219    * @return {[type]} [description]
220    */
221   initOption: function() {
222     this.option = {
223       allow_empty: true,
224       sort_filters: true,
225       plugins: {
226         ‘bt-tooltip-errors‘: {
227           delay: 100
228         },
229         ‘filter-description‘: {
230           mode: ‘inline‘
231         } //关于规则的描述插件 删除旁边蓝色的按钮  mode是显示的方式
232
233       },
234       operators: this.operators,
235       filters: [{
236         id: ‘name‘
237       }]
238     };
239   }
240 }
241
242 /**
243  * 过滤器抽象出来的对象 后续属性可增加
244  * @type {Object}
245  */
246 Query.filter = function() {
247   var filter = {
248     id: "", //不配置field 这个就是字段名字, 建议拼成 table.field
249     label: "", //下拉列表展现   建议拼成 表名-字段名(中文)
250     type: "", //目前就double 和 string 好了
251     value_separator: ‘,‘,
252     description: function(rule) {
253       if (rule.operator && [‘in‘, ‘not_in‘].indexOf(rule.operator.type) !== -1) {
254         return ‘如果多个值,请使用\‘, \‘分隔。‘;
255       }
256     }
257   }
258   return filter;
259 }

注: querybuilder 是不支持ie8的。 但是我们可以下下载谷歌内核,来安装到ie8

然后在页面指定使用谷歌内核来渲染页面即可。

<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=IE8">

原文地址:https://www.cnblogs.com/haoerlv/p/8295412.html

时间: 2024-10-23 14:09:18

QueryBuilder 前端构造SQL条件的插件使用方法的相关文章

Web前端开发人员实用Chrome插件收集

越来越多的前端开发人员喜欢在Chrome里开发调试代码,Chrome有许多优秀的插件可以帮助前端开发人员极大的提高工作效率.尤其Chrome本身是可以登录的,登录后你所有的插件都会自动同步到每一个登录后的Chrome的,非常方便啊. Postman - REST Client Postman是Ajax开发的神器,对于Restful开发方式特别有帮助,可以用来模拟各种请求来测试API的正确性,比如用来模拟Ajax请求.它还支持认证,比如简单的用户名/密码,或者Oauth1.0.Rest Conso

PerfMap – 显示前端网站性能的热力图插件

PerfMap 是用来分析前端性能,基于资源定时 API 生成网页资源加载的前端性能热图.热图的颜色和第一个毫秒值指示在什么时候页面的图像加载完毕,这是用户体验的一个很好的指标.括号中的第二个值是浏览器加载特定图像的时间. Github主页     插件下载 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[源码下载] 精心挑选的优秀jQuery Ajax分页插件和教程 12个让人惊叹的的创意的 404 错误页面设计 让网站动起来!12款优秀的 jQuery 动画插件 十分惊艳的8个 H

HDU 1198 Farm Irrigation(并查集,自己构造连通条件)

Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11188    Accepted Submission(s): 4876 Problem Description Benny has a spacious farm land to irrigate. The farm land is a rectangle

一个类文件搞定SQL条件映射解析,实现轻量简单实用ORM功能

个人觉得轻简级的ORM既要支持强类型编码,又要有执行效率,还要通俗易懂给开发者友好提示,结合Expression可轻松定制自己所需要功能. 表达式解析代码: 1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.Data.Common; 5 using System.Linq; 6 using System.Linq.Expressions; 7 using S

防止sql注入的三种方法

常用的避免SQL注入的三种方法 一,存储过程 在学习数据库视频的时候接触过,它是存储在数据库中的一些事先编译好的指令.在用的时候不用重新编写,直接调用就好了.所以,使用它可以大大提高程序的执行效率. 那么,如果创建一个存储程序并使用它呢?这是我们今天要解决的问题 1.创建过程 可编程性--下拉菜单--存储过程--右键--查询菜单--指定模板参数的值--新建查询--输入语句--查询菜单中的分析检查语法是否正确--执行 2.具体创建语法 在创建存储程序时,为了应对各种变换的数据,通常会涉及到带参数的

SQL Server 常用命令使用方法

(1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]" sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]" sql="select * from 数据表

Java实现文本文件按条件过滤的简便方法

程序开发中经常会碰到处理文本文件中数据的情况,这里通过一个例子来看用java实现文本文件按条件过滤的方法:从文本文件employee.txt中读取员工信息,从中找出1981年1月1日(含)之后出生的女员工. 文本文件empolyee.txt的格式如下: EID   NAME       SURNAME        GENDER  STATE        BIRTHDAY        HIREDATE         DEPT         SALARY 1       Rebecca  

jQuery插件制作方法详解

jQuery插件制作方法详解 jquery插件给我的感觉清一色的清洁,简单.如Jtip,要使用它的功能,只需要在你的元素的class上加 上Jtip,并引入jtip.js及其样式即可以了.其他事情插件全包.我喜欢jquery的一个重要原因是发现她已经有了很多很好,很精彩的插件.写一 个自己的jQuery插件是非常容易的,如果你按照下面的原则来做,可以让其他人也容易地结合使用你的插件. jquery插件给我的感觉清一色的清洁,简单.如Jtip,要使用它的功能,只需要在你的元素的class上加上Jt

ORACLE获取SQL绑定变量值的方法总结

  本文总结一下ORACLE数据库中如何获取SQL绑定变量值的方法,在SQL优化调优过程中,经常会用到这方面的知识点.在此梳理.总结一下,方面日后查找.翻阅. 方法1:查询V$SQL V$SQL视图中的BIND_DATA字段用来存储绑定变量的值,但是从这个视图查询绑定变量的值,有很大的局限性: 1: 它的记录频率受_cursor_bind_capture_interval隐含参数控制,默认值为900,表示每900秒记录一次绑定值,也就是说在900内,绑定变量值的改变不会反应在这个视图中.除非你调