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中带查询条件的分页的更多相关文章
- Thinkphp 带查询条件数据分页
//查询条件中如果有中文 $keyword= urldecode(I("request.keyword")); if ($keyword!=""){ $Mode ...
- thinkphp带查询条件的分页
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- exp导出一个表中符合查询条件的数据
原文地址:exp导出一个表中符合查询条件的数据 作者:charsi 导出一个表中的部分数据,使用QUERY参数,如下导出select * from test where object_id>50 ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法
本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...
- Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询
在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...
- JPA或Hibernate中使用原生SQL实现分页查询、排序
发生背景:前端展示的数据需要来自A表和D表拼接,A表和D表根据A表的主键进行关联,D表的非主键字段关联C表的主键,根据条件筛选出符合的数据,并且根据A表的主键关联B表的主键(多主键)的条件,过滤A表中 ...
- hibernate 中HQL查询
由于比较简单,在此处只写一些HQL语言. 表关系,多对一. CREATE TABLE `user` ( `id` ) NOT NULL AUTO_INCREMENT, `uname` varchar( ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句HQL基本用法
HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. ...
- Hibernate中Hql查询
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
随机推荐
- 对象关系_many2many
jdbc: package demo.test.many2many; import java.util.HashSet; import java.util.Set; public class Stud ...
- Date和 Calendar
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- JAVA⑤
1.定义一个常量 * * 01.一旦被赋予初始值 不允许被改变 * 02.常量名全大写 * 03.如果有多个单词,每个单词使用_ 分割 2. == : * 01. 数值类型 使用的时候 比较的是 值 ...
- opencv测试代码
摄像头摄影 #include <iostream>#include <opencv2/opencv.hpp>using namespace cv;using namespace ...
- python nltk 安装及配置说明
本教程采用pip安装方式,前期需要在本机安装setuptools 及pip 网上铺天盖地的说了很多关于nltk的说明,特别是后期nltk_data 手动下载操作,多数都不好使,这里整理 用pip安装n ...
- EF-一对一关系
针对关系型数据库来说,需要明了每个对象之间的关系. 它们之间的关系有: 1.一对一(1:1):一个学生只能拥有一张身份证,一张身份证只能属于一个学生: 2.一对多(1:N):一个学生可以拥有几本书,而 ...
- HashMap实现原理分析--面试详谈
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1 ...
- awk使用教程
gawk - pattern scanning and processing language 基本用法:gawk [options] 'program' FILE ... program:PATTE ...
- 愛拼才會贏--IPA--闽南语
闽南语经典曲目.
- (Java学习笔记) Java Networking (Java 网络)
Java Networking (Java 网络) 1. 网络通信协议 Network Communication Protocols Network Protocol is a set of rul ...