分頁及查詢引數傳遞問題分享
一、問題:經常碰到查詢問題,查詢引數需要放在request中,並保證無論是第一次Post,還是以後分頁時的get,都能正確取到這些值。於是做了一個小工具,讓這種操作更方便,並可用於hql查詢(不用hql這功能也可,它還不完善)
二、需要支援:
1、JSON:http://www.json.org/,到這裡找forJava的,包名為org.json
2、JDK5
三、程式碼:
web中的一小段程式碼:
利用上面的工具,可以在連線中建立查詢字串,例如?index=1¶m={"name":"Json"},點選連線,param後的JSON串會被組裝成查詢物件。
下面這些是給hql查詢用的。
//這個是在QueryComponent中欄位上設定的註釋,不加此註釋將不作為查詢用。並針對like查詢的%問題,left表示左側有%,no表示此欄位不使用like匹配
二、需要支援:
1、JSON:http://www.json.org/,到這裡找forJava的,包名為org.json
2、JDK5
三、程式碼:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface QueryParam {} /** * JSON 拆解、裝配工具 */ public class JsonUtil { private static final Log LOG = LogFactory.getLog(JsonUtil.class); private static final DateFormat dateFormat = DateFormat .getDateTimeInstance(DateFormat.FULL, DateFormat.FULL); /** * 將JSON字串裝配成物件 * * @param jsonString * JSON字串 * @param object * 被裝配的目標物件 */ public static void assemble(String jsonString, Object object) { try { JSONObject json = new JSONObject(jsonString); Field fields[] = object.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); QueryParam param = field.getAnnotation(QueryParam.class); if (param == null) { continue; } if (JSONObject.NULL == json.get(field.getName())) { field.set(object, null); continue; } Type type = field.getType(); //雖然我知道可以用其它形式書寫下面這些,不過就這麼幾個,將就一下吧 if (type == Integer.class) { field.set(object, json.getInt(field.getName())); } else if (type == Double.class) { field.set(object, json.getDouble(field.getName())); } else if (type == Long.class) { field.set(object, json.getLong(field.getName())); } else if (type == Boolean.class) { field.set(object, json.getBoolean(field.getName())); } else if (type == Date.class) { String dateString = json.getString(field.getName()); field.set(object, dateFormat.parse(dateString)); } else { field.set(object, json.getString(field.getName())); } } } catch (JSONException e) { LOG.debug(e); } catch (IllegalArgumentException e) { LOG.debug(e); } catch (IllegalAccessException e) { LOG.debug(e); } catch (ParseException e) { LOG.debug(e); } } /** * 將物件拆解成JSON字串 * * @param object * 被拆解的物件 * @return JSON字串 */ public static String disassemble(Object object) { try { Field fields[] = object.getClass().getDeclaredFields(); JSONStringer json = new JSONStringer(); JSONWriter writer = json.object(); for (Field field : fields) { field.setAccessible(true); QueryParam param = field.getAnnotation(QueryParam.class); if (param == null) { continue; } Type type = field.getType(); if (type == Date.class) { Date date = (Date) field.get(object); writer.key(field.getName()).value(dateFormat.format(date)); } else { writer.key(field.getName()).value(field.get(object)); } } writer.endObject(); return writer.toString(); } catch (JSONException e) { LOG.debug(e); } catch (IllegalArgumentException e) { LOG.debug(e); } catch (IllegalAccessException e) { LOG.debug(e); } return null; } } <p class="indent"> |
web中的一小段程式碼:
//這些都需要您從request裡取得 //QueryComponent queryComponent //String param if (params != null) { // get提交 JsonUtil.assemble(params, queryComponent); setQueryComponent(queryComponent); } else { // post提交 if (queryComponent != null) { params = JsonUtil.disassemble(queryComponent); } } request.setAttribute("params", params); <p class="indent"> |
利用上面的工具,可以在連線中建立查詢字串,例如?index=1¶m={"name":"Json"},點選連線,param後的JSON串會被組裝成查詢物件。
下面這些是給hql查詢用的。
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Hql { /** * hql查詢語句 */ public abstract String hql(); } <p class="indent"> |
//這個是在QueryComponent中欄位上設定的註釋,不加此註釋將不作為查詢用。並針對like查詢的%問題,left表示左側有%,no表示此欄位不使用like匹配
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface HqlParam { public enum like { left, right, all,no; } public abstract HqlParam.like like() default HqlParam.like.no; } <p class="indent"> |
相關文章
- 批次分頁查詢問題?
- Android 頁面跳轉傳遞引數及頁面返回接收引數Android
- 分頁查詢的排序問題排序
- 分頁查詢的排序問題(二)排序
- 請問大哥,jdon的分頁標籤怎麼傳遞多個引數?
- 二維陣列作為引數傳遞問題陣列
- rake 任務引數傳遞問題解決
- 請教批次分頁查詢的問題
- 函式引數傳遞及返回函式
- 引數傳遞
- C#頁面間的引數傳遞C#
- 引數傳遞中編碼問題(Get/Post 方式)(一)
- 引數傳遞中編碼問題(Get/Post 方式)(二)
- 請教一個JSF引數傳遞的問題JS
- Java高頻面試題分享(四)——方法的引數傳遞機制Java面試題
- JNI傳遞引數
- Mybatis引數傳遞MyBatis
- Flutter:學會在頁面間傳遞引數Flutter
- MongoDB分頁查詢的方法及效能MongoDB
- MongoDB 分頁查詢的方法及效能MongoDB
- mybatis 傳遞多個引數 --解決mybatis查詢使用多個引數方法--javabean傳統方法和map方法MyBatisJavaBean
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- SpringBoot分頁查詢 頁碼問題導致返回結果數量為0Spring Boot
- ajax使用url傳遞中文引數亂碼問題解決
- JSP中四種傳遞引數中文亂碼問題JS
- 請教一個在Tiles中引數傳遞的問題
- 關於分頁查詢結果的快取問題快取
- Python語法—函式及引數傳遞Python函式
- 繼承中引數傳遞及呼叫順序繼承
- .net如何實現頁面間的引數傳遞
- React事件傳遞引數React事件
- 路由元件傳遞引數路由元件
- vue + axios 實現分頁引數傳遞,高階搜尋功能實現VueiOS
- 批次查詢的翻頁問題
- 將函式作為引數傳遞解決非同步問題函式非同步
- JS的方法引數傳遞(按值傳遞)JS
- Elasticsearch 分頁查詢Elasticsearch
- ssh 分頁查詢