所谓分页,从数据库中分,则是封装一个分页类。利用分页对象进行分页。

但,分页往往带查询条件。

分页类的三个重要数据:【当前页码数】,【数据库中的总记录数】,【每页显示的数据的条数】

原理: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中带查询条件的分页的更多相关文章

  1. Thinkphp 带查询条件数据分页

    //查询条件中如果有中文 $keyword= urldecode(I("request.keyword")); if ($keyword!=""){ $Mode ...

  2. thinkphp带查询条件的分页

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  3. exp导出一个表中符合查询条件的数据

    原文地址:exp导出一个表中符合查询条件的数据 作者:charsi 导出一个表中的部分数据,使用QUERY参数,如下导出select * from test where object_id>50 ...

  4. JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法

    本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...

  5. Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询

    在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...

  6. JPA或Hibernate中使用原生SQL实现分页查询、排序

    发生背景:前端展示的数据需要来自A表和D表拼接,A表和D表根据A表的主键进行关联,D表的非主键字段关联C表的主键,根据条件筛选出符合的数据,并且根据A表的主键关联B表的主键(多主键)的条件,过滤A表中 ...

  7. hibernate 中HQL查询

    由于比较简单,在此处只写一些HQL语言. 表关系,多对一. CREATE TABLE `user` ( `id` ) NOT NULL AUTO_INCREMENT, `uname` varchar( ...

  8. JavaWeb_(Hibernate框架)Hibernate中数据查询语句HQL基本用法

    HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. ...

  9. Hibernate中Hql查询

    这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...

随机推荐

  1. unity中制作模拟第一人称视角下的指南针

    private int zRotation; public GameObject obj; public void Update() { //obj = GameObject.Find("C ...

  2. 使用laravel搭建CURD后台页面

    配置即一切 一切皆于需求,后台从0开始搭建,但是写了一两个页面后发现太多的是对单表的增删改查操作,于是就想到了,能不能做一个快速搭建的后台.想到一句话,配置即一切.如果一个CURD后台能只进行配置就自 ...

  3. zookeeper:shell操作以及可视化工具的使用

    1.zkcli.sh基本使用 1-1 查看节点 进入zk的bin目录下执行./zkCli.sh ls命令可以查看节点,/zookeeper/quota是默认的节点 1-2新增节点 create key ...

  4. elasticsearch基本操作之--使用QueryBuilders进行查询

    /** * 系统环境: vm12 下的centos 7.2 * 当前安装版本: elasticsearch-2.4.0.tar.gz */ QueryBuilder 是es中提供的一个查询接口, 可以 ...

  5. 双引号与尖括号的区别 and 相对路径与绝对路径

    包含头文件的时候,如果包含的是自己写的头文件是用" " .如果是包含系统的头文件,一般用<>. 相对路径与绝对路径

  6. 以黄门镇黄湾村某一扶贫文档为例——将Excel数据填入到已存在的Word模板

    傻瓜可以写出机器读得懂代码,但写出让人能读懂的代码的是优秀程序员 作用:通过Excel文件中的一列数据作为文件名创建Word文档,并将Excel中的一行数据填一表,实现自动化 Excel的VBA宏代码 ...

  7. 线程queue与进程queue

    进程queue: from multiprocessing import Queue,Process def func(qq): qq.put('function:我要放数据,给你来取...') if ...

  8. asp.net mvc 获取ajax的 request payload 参数

    注意事项: 传输的格式要设置城:"contentType": "application/x-www-form-urlencoded"

  9. ubuntu14.04下搜狗输入法不能输入中文问题解决

    解决方法如下:   一.重启搜狗输入法 通过下面的两个命令重启搜狗输入法 ~$ killall fcitx  ~$ killall sogou-qinpanel   二.检查修复安装依赖 ~$ sud ...

  10. <Java><Multi-thread><Lock interface>

    Overview 介绍java的lock interface. Motivation java拥有像synchronized这样的内置锁,那为什么还需要lock这样的外置锁呢? 首先,性能不是选择sy ...