一.概括
本文主要運用springMVC+spring3.0+hibernate4+easyui來實現對datagrid的動態查詢。還是要從設計上說起,首先按我個人的理解,還是先完成后台的編寫,然后前台隨便貼一貼搞一搞就出來,后台首先考慮我查詢過后的數據還是要通過datagrid來體現,所以,只能在Controller上多加幾個參數,將添入的數據傳遞到后台,當然還是要從dao層開始,使用hibernate的模糊查詢,其實還是sql的基礎,再加上一些占位符就可以搞定了。上圖:
二.實現
2.1Dao層,這里主要的是占位符的運用,在hql上使用:name表示占位符,然后使用query.setParamerters 來將name添上。
1 public List<User> findBlur(int page, int rows, User u) { 2 String hql = "from User u where u.userName like :name and u.age like :age"; 3 Query query = this.sessionFactory.getCurrentSession().createQuery(hql); 4 query.setParameter("name","%"+u.getUserName()+"%");
//通過占位符,將%添加進去,實現模糊查詢 5 query.setParameter("age","%"+u.getAge()+"%"); 6 7 return query.setFirstResult((page-1) * rows).setMaxResults(rows).list(); 8 }
2.2 userManager。這里沒什么,只是調用dao罷了
1 public List<User> findBlue(int page, int rows, User u) { 2 return userDao.findBlur(page, rows, u); 3 }
2.3 Controller。這里主要是傳入的參數較多,因為也要實現分頁,過濾等復合功能,所以返回的時候就自己定義了一個pojo DataGrid類,最開始在實現的時候,發現點擊查詢后datagrid中才會有數據,但是在初始化的時候是沒有數據的。后來發現原來是前台傳值得時候name沒有初始化,是null,所以導致了這個問題。
1 @RequestMapping("/findBlur") 2 @ResponseBody 3 public DataGrid findBlur(int page , int rows , User u){ 4 System.out.println(u.getId()+"****"+u.getUserName()+"***"+u.getAge()); 5 //對傳遞過來的username和age進行一下處理,若都為NULL,則賦值“”
if(u.getUserName()==null && u.getAge()==null ){ 6 System.out.println("姓名年齡都為空"); 7 u.setUserName(""); 8 u.setAge(""); 9 } 10 //這里主要是對Datagrid進行初始化,因為前台需要的total和rows[]兩項 11 DataGrid dg = new DataGrid(); 12 List list = userManager.findBlue(page, rows, u); 13 Long total = userManager.getCountUsers(); 14 dg.setTotal(total); 15 dg.setRows(list); 16 return dg; 17 }
1 public class DataGrid { 2 3 private long total = 0L; 4 private List rows = new ArrayList(); 5 public long getTotal() { 6 return total; 7 } 8 public void setTotal(long total) { 9 this.total = total; 10 } 11 public List getRows() { 12 return rows; 13 } 14 public void setRows(List rows) { 15 this.rows = rows; 16 } 17 18 }
2.4 前台。datagrid中主要用到了load方法,這個方法可以直接向后台傳遞參數,然后再就是清空和查詢的按鈕功 能實現
1 //查詢功能實現 2 onBtnSearch = function(){ 3 var name = $('#Sname').val(); 4 var age = $('#Sage').val(); 5 $('#datagrid').datagrid('load',{ 6 userName: name, 7 age: age 8 }); 9 }; 10 //清除按鈕的功能 11 clearBtnData = function(){ 12 $('#Sname').val(''); 13 $('#Sage').val(''); 14 $('#datagrid').datagrid('load',{ 15 userName: "", 16 age: "" 17 }); 18 };
下面是兩個linkbutton
1 <td><a href="javascript:void(0);" class="easyui-linkbutton" onclick="onBtnSearch()">查詢</a></td> 2 <td><a href="javascript:void(0);" class="easyui-linkbutton" onclick="clearBtnData()">清空</a></td>
三.總結
歲月易老青春不再,清空不只是清空輸入框的數據,同時向后台傳遞name=“”,age=“”的模糊查詢,實現查詢所有用戶,其實在整個實現過程中,沒有特別大的難點,難得主要是在於知識上的整合,對於數據結構要有更深層次的理解,充分運用封裝性。