hibernate分頁sql
⑴ 用了hibernate是不是就不用寫sql語句了,直接調用裡面封裝好的分頁還要自己再寫嗎
hibernate有一個跟sql非常類似的語句 叫HQL語句,所以。。你還是得寫。但是hibernate提供了很多方便的方法
⑵ hibernate 處理分頁數據問題
如果用戶的分數沒有事先計算好的話,這樣分頁確實是會對性能有一定的影響,但是也沒什麼大事,因為分頁本身就是要減少計算,減少查詢,提高性能。每頁都規定好固定的條數了,再連接查詢下也無所謂性能問題。但我建議你使用視圖查詢會更合適一些,這樣只對不同表的不同欄位查詢,性能會有所提高。
⑶ hibernate訪問oracle分頁SQL語句rownum子查詢問題
第一個是從第幾條開始,第二個是每頁幾條。
你看看你資料庫裡面的數據夠不夠分頁,你這樣只寫兩句就分頁是不夠的。
page = Paginator.showPage(, hql, paramValues, pageCurrent, pageSize);
/*
* 利用hql實現翻頁
*/
public static Page showPage(PersistentBaseDao p, String hql,
Object[] paramValues, int pageCurrent, int pageSize) {
// 入口參數校驗(無)
if (p == null) {
// log.debug("Paginator.p.hql is Empty");
}
if (hql.equals("") || hql == null) {
// log.debug("Paginator.showPage.hql is Empty");
}
if (p == null) {
// log.debug("Paginator.showPage.p is Empty");
}
PersistentBaseDao = (PersistentBaseDao) p;
// 如果當前頁大於>總的頁數,則讓當前頁等於總頁數
int tempPageCount =0;
if (paramValues == null) {
tempPageCount = .getPageCount(hql, (Object[]) null, pageSize);
} else {
tempPageCount= .getPageCount(hql, paramValues, pageSize);
}
if (pageCurrent > tempPageCount) {
pageCurrent = tempPageCount;
}
// 如果當前頁大於<1,則讓當前頁等於1
if (pageCurrent < 1) {
pageCurrent = 1;
}
// 調用.serarch()方法
if (paramValues == null) {
page = .search(hql, pageCurrent, pageSize);
} else {
page = .search(hql, paramValues, pageCurrent, pageSize);
}
// 為page對象設置當前頁的屬性
page.setPageCurrent(pageCurrent);
// 將page對象放在request對象中
return page;
}
/*
* 利用List實現翻頁
*/
@SuppressWarnings("unchecked")
public static Page showPage(List list, int pageCurrent, int pageSize) {
// 入口參數校驗(無)
if (list.isEmpty()) {
// log.debug("Paginator.showPage.list is Empty");
}
// 如果當前頁大於>總的頁數,則讓當前頁等於總頁數
if (pageCurrent > page.getPageCount()) {
pageCurrent = page.getPageCount();
}
// 如果當前頁大於<1,則讓當前頁等於1
if (pageCurrent < 1) {
pageCurrent = 1;
}
List ls = new ArrayList();
// 根據得到的list轉化為page對象
if (list.size() % pageSize == 0) {
page.setPageCount((list.size() / pageSize));
} else {
page.setPageCount((list.size() / pageSize) + 1);
}
page.setPageCurrent(pageCurrent);
page.setRecordCound(list.size());
int stag = (pageCurrent - 1) * pageSize;
int etag = pageCurrent * pageSize;
for (int i = stag; i < list.size() && i < etag; i++) {
ls.add(list.get(i));
}
page.setDataList(ls);
return page;
}
⑷ hibernate如何處理不同資料庫帶來的分頁操作呢MySQL中使用Limit,而Oracle中使用 rowNum,求大神詳解
你只要符合他的hql語句規范, 他會根據你配置方言自動翻譯成需要的sql語句, 所以你不用管, 這些已經在他底層實現了, MysqlDialect, OracleDialect, 你可以去看一下這個源碼,比如Oracle中:
java">=newStringBuilder(sql.length()+100);
if(hasOffset){
pagingSelect.append("select*from(selectrow_.*,rownumrownum_from(");
}
else{
pagingSelect.append("select*from(");
}
pagingSelect.append(sql);
if(hasOffset){
pagingSelect.append(")row_)whererownum_<=?andrownum_>?");
}
else{
pagingSelect.append(")whererownum<=?");
}
if(isForUpdate){
pagingSelect.append("forupdate");
}
returnpagingSelect.toString();
}
你如果問的是hibernate是如何實現分頁的,那麼可以看一下他的文檔,或者參考下面的文章:
http://my.oschina.net/kkdo/blog/724623
⑸ hibernate中分頁查詢怎麼做的
public List<ComUserEntity> FindAll(final int page,final int pagesize) {//page是第幾頁 pagesize是 每頁多少個
return this.getHibernateTemplate().execute(
new HibernateCallback<List<ComUserEntity>>() {
@Override
public List<ComUserEntity> doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery("from ComUserEntity"); //查詢的JavaBean為 ComUserEntity
query.setFirstResult((page-1)*pagesize); //設置 查詢起點
query.setMaxResults(page*pagesize); //查詢終點 忘了是 pagesize 還是 page*pagesize了
return query.list();}
}
);
}
⑹ hibernate分頁查詢的時候是把數據全部查出來嗎還是需要那一頁查那一頁呢
當然是查詢每頁需要的數據了,hibernate分頁查詢是與基於sql語句的簡單分頁查詢道理是一樣的,有setFirstResult(int arg)設置起始數據位置,setMaxResults(int arg);設置當前頁所顯示的最大數據量,依賴前台傳回的頁碼變數進行數據交替從而實現分頁
⑺ hibernate的sqlquery分頁,尾頁會出現上一頁的數據
您好
估計是你的起始頁沒有控制住,showPage這個值應該沒有變化或影響的。
debug一下,看看翻頁的時候的時候,showPage這個值有沒有變化。
希望對你有幫助。
⑻ Hibernate的分頁bug
感覺你的這個設計上就錯了,hibernate有自己的分頁處理,沒必要再轉成jdbc做,如果轉成jdbc的話,不同的資料庫處理是不一樣的,比如說oracle查詢5-10條的記錄是用rownum,mysql用top,mysql中用limit,都是不一樣的
--------------------------------------
Query q = s.createQuery(hql);
if(argsMap!=null && argsMap.size()>0){
for(int i=0;i<argsMap.keySet().toArray().length;i++){
q.setParameter((String) argsMap.keySet().toArray()[i],argsMap.get(argsMap.keySet().toArray()[i]));
}
}
//如果傳入的pageSize=0則返回全部
if (pageSize != 0) {
// System.out.println(start + "*to*" + end);
q.setFirstResult(start);
q.setMaxResults(end - start);
}
results = q.list();
這是我們項目中的分頁片段,
hql = "from UserVo u";像這樣就可以了
⑼ hibernate中分頁查詢怎麼做的
Hirbernate ,它自帶分頁API
例如:
Query q = sess.createQuery("from XXX");
q.setFirstResult(20);設置起始行
q.setMaxResults(10);每頁條數
List cats = q.list(); //得到每頁的數據
⑽ hibernate+struts2分頁查詢的問題,永遠都是第一頁,為什麼第一條sql語句對,第二條變樣了
因為sql server 沒有直接的分頁功能,hibernate 採用了top的方式進行間接的分頁方式,第一頁top pageSize,第二頁 top pageSize*2,但前pageSize條記錄被丟棄了,第二頁的數據是從pageSize+1開始取的.
同理,第三頁的數據查詢了pageSize*3條數據,前pageSize*2條記錄丟棄,只要pageSize*2+1到pageSize*3之間的數據...