Easyui的datagrid結合hibernate實現資料分頁

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   使用   sp   

最近在學習easyui的使用,在學到datagrid的時候遇到了一些問題,終於抽點時間整理了一下,分享出來,請各位前輩高手多多指教!

 1、先來看看效果,二話不說,直觀!

2、easyui的datagrid的使用方法

在這裡,datagrid的使用我不做過多講解,俺畢竟是初學者,不敢班門弄斧。所以就簡單帶一下。

①、在easyui的layout中的center中定義一個table,id為"datagridTable"。

<div region="center" border="false">     <table id="datagridTable"></table> </div>

②、使用javascript的方式讓這個table變為一個easyui的datagrid。當然也可以給這個table指定class屬性為“easyui-datagrid”,兩種方式都可以,蘿蔔白菜,各有所愛。由於datagrid和背景資料互動打交道的比較多,所以俺使用的功能比較好控制的javascript方式定義。

代碼如下,其中具體的屬性和方法請查看easyui文檔,官網地址:http://www.jeasyui.com/documentation/datagrid.php,標紅的部分為後台struts處理的Url和顯示分頁工具列的設定。 

<script type="text/javascript">          $(function() {              $("#datagridTable").datagrid({                  url : getUsers,                  title : 使用者列表,                  pagination : true,                  pageSize : 10,                  pageList : [ 10, 20, 30, 40 ],                  fit : true,//自適應視窗大小變化                  fitColumns : true,                  border : false,                  idField : id,                  columns : [ [ {                      title : 使用者編號,                      field : id,                      width : 100                  //寬度必須,數值隨便                  }, {                      title : 使用者名稱,                      field : username,                      width : 100                  }, {                      title : 使用者密碼,                      field : password,                      width : 100                  },{                      title:註冊時間,                      field:date,                      width:100                  } ] ],                  toolbar : [ {                      text : 增加,                      iconCls : icon-add,                      handler : function() {                      }                  }, -, {                      text : 刪除,                      iconCls : icon-remove,                      handler : function() {                      }                  }, -, {                      text : 編輯,                      iconCls : icon-edit,                      handler : function() {                      }                  } ]               //兩個[],實現多級表頭,合併儲存格的效果,產生不規則表頭                });  }); 

 ③、後台使用的是SSH(struts2+hibernate4+spring3.2),後台Action簡單寫了一下。

@Controller(value = "GetUserAction")  @Scope("prototype")  public class GetUserAction {      //使用spring的annotation注入      @Resource(name = "userDao")      private UserDao ud;      //page和rows屬性,是easyui分頁工具的屬性,名字固定,便於struts2的自動封裝和類型裝換,可以通過Firebug看到。      private int page;      private int rows;          //省略的set/get方法       public String getUsers() {          //存放資料的list          List<User> users = new ArrayList<User>();          //這個User是後來做資料過濾的時候封裝的過濾條件。          User u =new User();          //使用spring的BeanUtils工具,複製屬性到u裡面。          BeanUtils.copyProperties(this, u);          //背景getUsers方法,這裡我省略了service層,採用domain,action,dao,daoImpl架構,功能簡單,就沒加上service這一層。          users = (List<User>) ud.getUsers(page, rows, u);                     Map<String, Object> m = new HashMap<String, Object>();          //total是easyui分頁工具的總頁數。名字固定。        m.put("total", ud.getTotal(page, rows, u));          m.put("rows", users);          //自己寫了一個java對象轉換成json的工具類,俺用的是jackson,使用json-lib的同學可以自己寫一個。不過jaon-lib的轉換速度比較慢,沒有jackson快。          JSONParser.writeJson(m);          return "success";      }  } 

④、看一眼getUsers(int page,int rows,User u)和getTotal(int page,int rows,User u)方法

@Service("userDao")  public class UserDaoImpl implements UserDao {             //注入hibernate的sessionFactory,不多說。      @Resource(name = "sessionFactory")      private SessionFactory sessionFactory;       //過濾條件,動態拼接HQL語句。      public String addWhere(String hql, User u) {           if (u.getUsername() != null && !u.getUsername().trim().equals("")) {              hql += " where 1=1 and u.username like ‘%%" + u.getUsername()                      + "%%‘";          }          return hql;      };      //設定為唯讀事務      @Override     @Transactional(readOnly = true)      public List<?> getUsers(int page, int rows, User u) {           String hql = "from User u ";          hql = addWhere(hql, u);          Query query = sessionFactory.getCurrentSession().createQuery(hql);                    //hibernate的分頁就依靠這兩個set方法,詳情請查看API文檔。          query.setFirstResult((page - 1) * rows);          query.setMaxResults(rows);          //將結果以list返回。          return query.list();       }      //getTotal方法第一種寫法,使用HQL的count函數      @Override     @Transactional(readOnly = true)      public Long getTotal(int page, int rows, User u) {           String hql="   select count(*) from  User u";          hql=addWhere(hql, u);           Query query = sessionFactory.getCurrentSession().createQuery(hql);          //注意類型為Long。          return (Long) query.list().get(0);      }      /**      //getTotal方法的第二種寫法,不使用HQL的count函數。      @Override      @Transactional(readOnly = true)      public  List<?> getTotal(int page, int rows, User u) {          //不適用count,查詢所有的,action通過ud.getUsers(page,rows,u).size()獲得total。效能較差,畢竟我只要一個          //count數值,hibernate卻list所有的之後在求size()。         String hql=" from  User u";                  hql=addWhere(hql, u);           Query query = sessionFactory.getCurrentSession().createQuery(hql);           return query.list();      }      */ } 

⑤、到此,後台功能開發完成,部署,運行即可。

page,rows,total參數解釋

寫下這篇文章,一是為了本著分享精神能與大家共同學習,探討和進步。二是為了記錄一下學習筆記,以備日後只需,查閱方便。不正確指出,望大家多多批評指正。(我的CSDN部落格也有這篇文。。(⊙o⊙))

後續我將把JSONParser的代碼分享一下,用於將list轉換成標準的json格式。

 

本文轉自:http://my.oschina.net/sgl/blog/123403

源碼:https://code.csdn.net/Sgl731524380/easyui-pagination

Easyui的datagrid結合hibernate實現資料分頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.