Easyui的datagrid結合hibernate實現數據分頁 javascript
最近在學習easyui的使用,在學到datagrid的時候遇到了一些問題,終於抽點時間整理了一下,分享出來,請各位前輩高手多多指教! php
1、先來看看效果,二話不說,上圖直觀! java
2、easyui的datagrid的使用方法 spring
在這裏,datagrid的使用我不作過多講解,俺畢竟是初學者,不敢班門弄斧。因此就簡單帶一下。 json
①、在easyui的layout中的center中定義一個table,id爲「datagridTable」。 session
<div region="center" border="false"> 架構
<table id="datagridTable"></table> dom
</div> ide
②、使用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參數解釋
如圖:
寫下這篇文章,一是爲了本着分享精神能與你們共同窗習,探討和進步。二是爲了記錄一下學習筆記,以備往後只需,查閱方便。不正確指出,望你們多多批評指正。