關於通過easyui對mysql的模糊查詢以及按時間段查詢的個人見解
阿新 • • 發佈:2019-02-13
建表是使用easyui的datagrid來顯示查詢mysql的結果,系統是基於SSH框架建立
先來張圖看看介面
1、自定義easyui datagrid的工具欄
<div id="toolbar"> 查詢條件: <input id="content" class="blur-content" value="請輸入單據號或客戶姓名"/> 日期: <input id="begindate" type="text" class="easyui-datebox" currentText="今天" closeText="關閉" /> 到 <input id="enddate" type="text" class="easyui-datebox" currentText="今天" closeText="關閉" /> <input style="width:10px;visibility:hidden" /> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="searchOrder()">查詢</a> <br/> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-edit',plain:true" onclick="editOrder()">修改訂單</a> <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-delete',plain:true" onclick="deleteOrder()">刪除訂單</a> <a href="#" id="unchecked" class="easyui-linkbutton" data-options="iconCls:'icon-unchecked',plain:true" onclick="multipleChecked()">選擇多個商品</a> </div>
2、搜尋按鈕的程式碼
function searchOrder(){ //$.messager.alert('提示',"search","info"); var content = $.trim($('#content').val()); //獲取搜尋框的內,$.trim()可以消除前後空格 var begindate = $('#begindate').datebox('getValue'); //獲取查詢的起始日期 var enddate = $('#enddate').datebox('getValue'); //獲取查詢的終止日期 if(content=="請輸入單據號或客戶姓名"){content=null;} //當沒有輸入內容時設為null if(begindate==""){begindate=null;} if(enddate==""){enddate=null;} else{enddate=enddate+" 23:59:59";} //$.messager.alert('提示',content+"&"+begindate+"&"+enddate,"info"); $('#tbQueryList').datagrid('reload',{ //重新載入datagrid 'criteria.rows':16, //設定1頁的行數 'criteria.currentPage':1, //設定顯示第幾頁 'criteria.strVal1':content, 'criteria.strVal2':begindate, 'criteria.strVal3':enddate }); }
說明1:
else{enddate=enddate+" 23:59:59";}
上面這行程式碼是為了防止在mysql查詢時遺失截止日期當天的訂單
例如:在mysql查詢以下語句
SELECT SALES_ID,wms_client.CLIENT_ID,SALES_NUMBER,CLIENT_NAME,SALES_DATE,ORDER_TYPE,ORDER_STATUS, AMOUNT_COLLECTION,AMOUNT_ADVANCE,ACCOUNT_DATE,NOTES FROM wms_sales,wms_client WHERE wms_sales.CLIENT_ID = wms_client.CLIENT_ID AND SALES_DATE>='2013-01-01' AND SALES_DATE<='2013-02-01'
上面SQL語句查詢的結果只會顯示SALES_DATE從2013-01-01 00:00:00到2013-02-01 00:00:00的記錄,而把2013-02-01當天的記錄全都過濾掉,所以為了得到截止日期當天的記錄,將最後一行SQL語句改成
AND SALES_DATE<='2013-02-01 23:59:59'
說明2:
'criteria.strVal1':content,
'criteria.strVal2':begindate,
'criteria.strVal3':enddate
上面三行jQuery程式碼是將三個查詢條件(查詢內容,起始日期,截止日期)傳回後臺,載入相應的sql語句裡面
3、後臺action程式碼
public String getSalesList(){
if(criteria == null) criteria = new SimpleQueryCriteria();
super.queryForList(SqlConstants.GET_SALESLIST, SqlConstants.GET_SALESLIST_COUNT,criteria);
return SUCCESS;
}
criteria是一個分頁的工具類,SqlConstants是一個將sql語句對映成常量的類(其實就是起一箇中介的作用)
4、sqlmap程式碼(用iBatis動態SQL標籤)
<select id="getSalesList" resultClass="HashMap">
<![CDATA[
SELECT SALES_ID,wms_sales.CLIENT_ID,CLIENT_NAME,SALES_NUMBER,DATE_FORMAT(SALES_DATE,'%Y-%m-%d') AS SALES_DATE,
ORDER_TYPE,ORDER_STATUS,AMOUNT_COLLECTION,AMOUNT_ADVANCE,ACCOUNT_DATE,NOTES
FROM wms_sales,wms_client
WHERE (ORDER_STATUS='2' OR ORDER_STATUS='3')
AND wms_sales.CLIENT_ID=wms_client.CLIENT_ID
]]>
<isNotEmpty property="criteria.strVal1" prepend="AND">
<![CDATA[
CONCAT(SALES_NUMBER,CLIENT_NAME) LIKE concat('%',#criteria.strVal1#,'%')
]]>
</isNotEmpty>
<isNotEmpty property="criteria.strVal2" prepend="AND">
<![CDATA[
SALES_DATE >= #criteria.strVal2#
]]>
</isNotEmpty>
<isNotEmpty property="criteria.strVal3" prepend="AND">
<![CDATA[
SALES_DATE <= #criteria.strVal3#
]]>
</isNotEmpty>
<![CDATA[
ORDER BY SALES_ID LIMIT $criteria.index$,$criteria.rows$
]]>
</select>
說明1:
<isNotEmpty> 如果引數不為空則查詢條件有效。引數的資料型別為Collection String 時引數不為NULL或""。
prepend:可被覆蓋的SQL語句組成部分,新增在語句的前面。
property:被比較的屬性
如下所示:
<isNotEmpty prepend=”AND” property=”firstName” >
FIRST_NAME=#firstName#
</isNotEmpty>
說明2:
CONCAT(SALES_NUMBER,CLIENT_NAME) LIKE concat('%',#criteria.strVal1#,'%')
在mysql中concat 等同於字串連線符 ||,上述SQL語句相當於以下語句
SALES_NUMBER LIKE concat('%',#criteria.strVal1#,'%') OR CLIENT_NAME LIKE concat('%',#criteria.strVal1#,'%')
5、測試
由於是模糊查詢,所以只要銷售單編號和客戶姓名含有115的都會顯示