1. 程式人生 > >hibernate中帶查詢條件的分頁

hibernate中帶查詢條件的分頁

所謂分頁,從資料庫中分,則是封裝一個分頁類。利用分頁物件進行分頁。

但,分頁往往帶查詢條件。

分頁類的三個重要資料:【當前頁碼數】,【資料庫中的總記錄數】,【每頁顯示的資料的條數】

原理:select * from  【表名】 where   【欄位名】  like   【'%條件%'】    limit  【開始查詢的索引】,【每頁顯示的資料】

帶查詢條件的分頁分兩步

         (1)第一步:查詢出符合條件的資料的總條數 

                ---->select count(*) from 【表名】 where  【欄位名】 like 【條件】

         (2)第二步:提供三個重要資料,生成分頁物件,然後查詢資料庫中指定頁碼的資料

                ---->select * from  【表名】 where   【欄位名】  like   【'%條件%'】    limit  【開始查詢的索引】,【每頁顯示的資料】

hibernate框架下的分頁【帶查詢條件的分頁核心原始碼】

  (1)獲取符合條件的的資料的總記錄數的方法

  /**
     * 獲取資料庫中帶查詢條件的資料的記錄數
    * @Title: countByName 
    * @Description: TODO(這裡用一句話描述這個方法的作用) 
    * @param seachName 查詢條件
    * @return
    * @return Integer    返回符合條件的資料的總記錄數
    * @author 尚曉飛
    * @date 2014-7-1 上午9:22:14
     */
    public Integer countByName(final String seachName){
        return super.getHibernateTemplate().execute(new HibernateCallback<Integer>() {

            public Integer doInHibernate(Session session)
                    throws HibernateException, SQLException {
                    Query query=session.createSQLQuery("select count(*) from sys_user where  sys_user_name LIKE ?");
                        query.setParameter(0, "%"+seachName+"%");
                         Number number= (java.lang.Number) query.uniqueResult();
                         return number.intValue();

            }

            
        });
    }

(2)跟據符合條件的資料總記錄數,前臺提供的當前頁碼數,每頁顯示的資料條數,生成分頁物件

    //獲取分頁物件(當前頁碼數,符合條件的資料的總記錄數,每頁顯示的資料條數)
              this.page=new Page(num, countRecords, pageRecords);

(3)根據分頁物件,查詢條件,利用hibernate框架進行分頁(可以用sql語句分頁,此處用hql分頁,也是hibernate的分頁)

  /**
     * 
    * @Title: queryByQueryName 
    * @Description: TODO(這裡用一句話描述這個方法的作用) 
    * @param queryName 查詢條件的引數
    * @param firstResult 從第幾條資料開始查詢(分頁物件提供)
    * @param maxResult   每頁顯示的資料條數(分頁物件提供)
    * @return
    * @return List<SysUser>   返回指定頁碼的資料集合
    * @author 尚曉飛
    * @date 2014-7-1 下午5:02:07
     */
    @SuppressWarnings("unchecked")
    public List<SysUser> queryByQueryName( final String queryName,final Integer firstResult,final Integer maxResult){
        return (List<SysUser>)super.getHibernateTemplate().executeFind(new HibernateCallback<List<SysUser>>() {
            @Override
            public List<SysUser> doInHibernate(Session session)
                    throws HibernateException, SQLException {
                    Query query=session.createQuery("from SysUser where sysUserName like ?");//帶查詢條件的分頁hql語句

                            query.setParameter(0,"%"+queryName+"%");
                            query.setFirstResult(firstResult);//從第幾條資料開始查詢
                            query.setMaxResults(maxResult);//每頁顯示多少條資料
                            return query.list();

            }
        });
    }

(4)分頁類【僅供參考,省去set,get方法,程式碼簡單,思路重要】


public class Page{
    //每頁顯示資料條數
    private int pageSize;
    //當前頁碼數
    private int pageNum;
    //資料庫中總記錄數
    private int rowCount;
    
    //總頁數
    private int pageCount;
    //從多少條記錄開始查詢
    private int rowStart;
    
    //是否有上一頁
    private boolean hasPrevious=false;
    //上一頁
    private int previousPage;
    //首頁
    private int firstPage;
    
    //是否有下一頁
    private boolean hasNext=false;
    //下一頁
    private int nextPage;
    //末尾頁
    private int lastPage;
    
    //每頁顯示的頁碼數
    private int everyPageCount=10;
    //每頁開始的頁碼數
    private int everyPageStart;
    //每頁結束的頁碼數
    private int everyPageEnd;
    
    public Page(){}
    
    public Page(String pageSize, String pageNum, int rowCount) {
        this.pageSize=pageSize==null?10:Integer.parseInt(pageSize);
        this.pageNum=pageNum==null?1:Integer.parseInt(pageNum);
        this.rowCount=rowCount;
        
        
        
        //總頁數
        this.pageCount=(int)Math.ceil(this.rowCount*1.0/this.pageSize);
        //當刪除最後一頁資料時,會造成pageNum>pageCount,所以賦值。
        if(this.pageNum>this.pageCount){
            this.pageNum=this.pageCount;
        }
        
        //每次從第幾條記錄開始查  select * from onesong limit rowStart ,pageSize
        this.rowCount=(this.pageNum-1)*this.pageSize;
        
        
        //當頁碼數大於1則存在上一頁,和首頁
        if(this.pageNum>1){
            this.hasPrevious=true;
            this.previousPage=this.pageNum-1;
            this.firstPage=1;
        }
        
        //當頁碼數小於1則存在下一頁,和尾頁
        if(this.pageNum<this.pageCount){
            this.hasNext=true;
            this.nextPage=this.pageNum+1;
            this.lastPage=this.pageCount;
        }
        
        
        //每頁顯示的頁碼數的開始和結束
        this.everyPageStart=(this.pageNum-this.pageSize/2)<=0?1:(this.pageNum-this.pageSize/2);
        this.everyPageEnd=(this.everyPageStart+this.everyPageCount-1)>=this.pageCount?pageCount:(this.everyPageStart+this.everyPageCount-1);
    }

}

相關推薦

hibernate查詢條件

所謂分頁,從資料庫中分,則是封裝一個分頁類。利用分頁物件進行分頁。 但,分頁往往帶查詢條件。 分頁類的三個重要資料:【當前頁碼數】,【資料庫中的總記錄數】,【每頁顯示的資料的條數】 原理:select * from  【表名】 where   【欄位名】  like   【'%條件%'】    limit

Hibernate使用HQL進行查詢

第一步 建立query物件 Query query = session.createQuery("xxxxxx”); 第二步 設定開始位置和每頁顯示記錄數 設定開始位置,firstResult 的內

MVC+Bootstrap+Drapper使用PagedList.Mvc支持多查詢條件

pagedlist amp new 源代碼 post header this 當前 都是 前幾天做一個小小小項目,使用了MVC+Bootstrap,以前做分頁都是異步加載Mvc部分視圖的方式,因為這個是小項目,就隨便一點。一般的列表頁面,少不了有查詢條件,下面分享下Drap

FineReport生成查詢功能的報表

配置資料集 連線資料庫 點選定義資料庫連線: 設定資料庫連線基本引數: 驅動器:oracle.jdbc.driver.OracleDriver URL:jdbc:oracle:thin:@URL:PORT:SID 配置資料集

Hibernate查詢,返回new物件(注意這個新定義的類要有建構函式),使用sql條件查詢並且把結果顯示到一個物件的集裡面的解決方案

IIndexDaopackage com.ucap.netcheck.dao;import com.ucap.netcheck.combination.beans.IndexCombinationBean;import com.ucap.netcheck.common.P

extjs3 操作(查詢條件),獲取頁碼、開始行、大小

一、分頁操作 extjs3.x版本做分頁操作時,只需配置PagingToolbar 即可,總的來說還是比較方便的,但是預設情況下是不能進行帶查詢條件的分頁操作的,如何解決呢? //xxx表示檔名,xxx.js xxx.prototype.grid=function(){

【Layui】查詢條件

author:咔咔 wechat:fangkangfk   這個前端UI框架是真的讓人又愛又恨吶!想了很久的方案才行的通   這是全部原始碼: {include file="../../../application/admin/view/public/

【spring data jpa】帶有條件查詢和不條件查詢實現

一.不帶有動態條件的查詢 分頁的實現  例項程式碼: controller:返回的是Page<>物件 @Controller@RequestMapping(value = "/egg")  publicclass EggController {   @

JSP通用元件,查詢條件

—— 如果一段程式碼重複出現的次數多了,我們就需要把它獨立出來! 分頁功能的程式碼就是這樣的,在需要展示列表的頁面,我們基本都需要加上分頁功能,如果某天boss想要修改分頁功能的樣式~,天吶~~,我們不能去一個一個的改吧。 下邊給大家分享一個自己封裝的通用分

通用的可查詢條件的SQL語句的儲存過程(2)

程式碼二: CREATE PROCEDURE pagination @tblName varchar(255), – 表名 @strGetFields varchar(1000) = ‘*’, – 需要返回的列 @fldName varch

4 Springboot使用redis儲存集合資料,並模擬條件查詢讀取

前面幾篇講了使用redis儲存單個物件,自動快取、更新、刪除的做法,在實際專案中,更常用的是分頁查詢集合資料,條件查詢(譬如按照新增時間倒序排列)。 redis本身是不提供條件查詢的,因為是一個非關係型資料庫,那麼其實通過一些手段,也是能完成條件查詢的,尤其是有順序的條件查

MVC呼叫儲存過程實現查詢條件

alter procedure P_GetPagedUserInfoByCondition @PageSize int,--表示每頁要顯示的記錄數 @CurrentPageIndex int,--表示當前要顯示第幾頁的資料 @RecordCount int output,--表示滿足條

TP3.2第二查詢條件顯示(兩種解決辦法)

先看看手冊的....然而怎麼都不行,最後給成GET模式 直接ok帶入查詢條件如果是POST方式查詢,如何確保分頁之後能夠保持原先的查詢條件呢,我們可以給分頁類傳入引數,方法是給分頁類的parameter屬性賦值$count = $User->where($ma

Hibernate多表查詢

Session s=HibernateUtil.currentSession(); Transaction t=s.beginTransaction(); Query q=s.createQuery("from Trade t,Aclrole r where t.tra

Hibernate查詢方法總結(包括條件查詢、外來鍵id查詢

每天進步一點點,最近做專案用到了很多的hibernate的查詢方法。正好騰出時間來總結,希望對自己和他人都有幫助。 首先非常感謝施楊 's think out 和suntao1983做的總結,幫我解決的很多問題。 hibernate 的 六種基本查詢方法:分別是HQL查詢

bos 第4 (區域excel批量導入、區域通用查詢區的添加、區多條件查詢區導出excel)

sea htm 不能 長安 基金會 格式 address ret body BOS項目筆記 第4天 今天內容安排: 1、區域批量導入功能 jQuery OCUpload(一鍵上傳插件)、apache POI、pinyin4j 2、實現區域的分頁查詢 3、對分頁代碼重構

PHP連接數據庫實現多條件查詢功能——關於租房頁面的完整實例操作

ots cnblogs 信息 val 租房 btn earch 拼接 round 租房頁面如圖: 代碼如下: <!DOCTYPE html><html> <head> <meta charset="UTF-8"

8.修改 按條件查詢商品

edi spl stat htm != pic check ren lib 修改商品的原理圖 jsp頁面 edit.jsp <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib pre

springboot jpa mongodb 多條件查詢

sort ndt int integer mongod nbsp boot amp success public Page<Recorded> getRecordeds(Integer page, Integer size, Recorded recorded)

spring jpa 參數查詢(一)

entity ndb 情況 serializa cti rep ppi image repo 1、寫個接口繼承JpaRepository @NoRepositoryBean public interface BaseRepository<T,PK extends