分页查询数据库方法
/**
* 分页查询方法
* @param sql,pageNO,maxResult
* @return List
*/
public List<Object> queryPageSql(String hql, int pageNo, int pageSize){
try{
Session session=HibernateUtil.getSession(); Query q=session.createQuery(hql);
//Hibernate查询起始位置
q.setFirstResult((pageNo-1)*pageSize);
//从起始位查询多少条数据
q.setMaxResults(pageSize); List<Object> list=(List<Object>)q.list(); return list; }catch(Exception e){ e.printStackTrace();
}finally{
HibernateUtil.closeSession(); } return null;
} 分页实体类PageModel,主要的分页查询方法pageQuery PACKAGE SSH.GX;
import java.util.List;
import ssh.Tb.User; public class PageModel {
private int totalRecords; //数据总条数
private int pageNo; //当前页
private int pageSize; //每页多少条
private List<Object> list;//查询到的数据集合
private int totalPageNo;//共多少页 /**
* 获取上一页
*/
public int getPreviousPageNo(){
if(pageNo>1){
return pageNo-1;
}else{
return 1;
} } /**
* 获取下一页
*/
public int getNextPageNo(){
if(pageNo>=getTotalPageNo()){
//如果总页数为0这返回1,否则返回总页数
return getTotalPageNo()==0?1:getTotalPageNo();
}else{
return pageNo+1;
}
} /**
* 获取分页集合函数
* @param pageModel
* @param hql
* @param pageTab
* @return PageModel
* @see pageTab控制查询的1:下一页;2:上一页;3:第一页;4:最后一页
*/ public PageModel pageQuery(PageModel pageModel,String hql,int pageTab){
HibernateDB hdb=new HibernateDB();
//查询数据的总条数并赋值给totalRecords变量
List<Object> lists=(List<Object>)hdb.querySql(hql);
totalRecords=lists.size(); //给没有查询条数赋值默认值
if(pageModel.getPageSize()==0){pageModel.setPageSize(5);} //执行获取下一页
if(pageTab==1){
//执行获取下一页
if(pageModel.getPageNo()==0){
pageModel.setPageNo(1);
}else{
pageModel.setPageNo(pageModel.getNextPageNo());
} }else if(pageTab==2){
//执行获取上一页
if(pageModel.getPageNo()==0)
pageModel.setPageNo(1);
else
pageModel.setPageNo(pageModel.getPreviousPageNo()); }else if (pageTab==3){
//获取第一页
pageModel.pageNo=1;
}else{
//获取最后一页
pageModel.pageNo=pageModel.getTotalPageNo();
} //查询分页数据
list=(List<Object>)hdb.queryPageSql(hql,pageModel.getPageNo(),pageModel.getPageSize()); return pageModel;
} public int getTotalRecords() {
return totalRecords;
} public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
} public int getPageNo() {
return pageNo;
} public void setPageNo(int pageNo) {
this.pageNo = pageNo;
} public int getPageSize() {
return pageSize;
} public void setPageSize(int pageSize) {
this.pageSize = pageSize;
} public int getTotalPageNo() {
return totalPageNo=(totalRecords + pageSize -1)/pageSize;
} public void setTotalPageNo(int totalPageNo) {
this.totalPageNo = totalPageNo;
} public List<Object> getList() {
return list;
} public void setList(List<Object> list) {
this.list = list;
} } Action类查询,必须使用spring配置文件将PageModel类注入到Action中。
/**
* 分页查询下一页
* @return
*/
public String nextQuery(){ pageModel.pageQuery(pageModel, "from User", 1); return "query";
} /**
* 分页查询上一页
* @return
*/
public String backQuery(){
pageModel.pageQuery(pageModel, "from User", 2);
return "query";
}
/**
* 分页查询第一页
* @return
*/
public String firstQuery(){
pageModel.pageQuery(pageModel, "from User", 3);
return "query";
}
/**
* 分页查询最后一页
* @return
*/
public String endQuery(){
pageModel.pageQuery(pageModel, "from User",4);
return "query";
} Struts.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 配置Struts支持动态Action, 必须存在 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- strict-method-invocation在2.5版本,为了限制DMI,
默认启用了严格的方法访问,不想启用要改为false,
如果启用严格访问模式,无法实现动态Action -->
<package name="mypackage" extends="struts-default" strict-method-invocation="false">
<action name="user*" class="ssh.action.UserAction" method="{1}">
<result name="success">
/jsp/mian.jsp</result>
<result name="login">
index.jsp
</result>
<result name="saveerror">/jsp/save.jsp</result>
<result name="query">/jsp/query.jsp</result>
</action> </package>
</struts> query.jsp页面显示 <table>
<s:iterator value="pageModel.list" id="u" >
<tr>
<td><s:property value="#u.id"/></td>
<td><s:property value="#u.username"/></td>
</tr>
</s:iterator>
<tr>
<td><s:a href="userfirstQuery">首页</s:a>
<s:a href="userbackQuery?pageModel.pageNo=%{pageModel.pageNo}">上一页</s:a>
<s:property value="pageModel.pageNo" />/<s:property value="pageModel.totalPageNo"/>
<s:a href="usernextQuery?pageModel.pageNo=%{pageModel.pageNo}">下一页</s:a>
<s:a href="userendQuery">末页</s:a></td>
<td></td>
</tr>
</table>

Hibernate和Struts分页查询的更多相关文章

  1. Java_Web三大框架之Hibernate+jsp+HQL分页查询

    分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...

  2. 分页查询——Hibernate Criteria实现一次查询取得总记录数和分页后结果集

    使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集 - bto310 - ITeye博客 https://bto310.iteye.com/blog/1 ...

  3. JPA分页查询与条件分页查询

    情有独钟的JPA 平时在写一些小项目时,比较喜欢引用 Spring Data Jpa,其实还是图他写代码快~在日常的开发工作中,分页列表查询基本是随处可见,下面一起看一下如何使用 jpa 进行多条件查 ...

  4. 用Hibernate和Struts2+jsp实现分页查询、修改删除

    1.首先用get的方法传递一个页数过去 2.通过Struts2跳转到Action 3.通过request接受主页面index传过的页数,此时页数是1, 然后调用service层的方法获取DAO层分页查 ...

  5. hibernate和struts实现分页

    仓促把功能进行实现一下  类与类之间也没有进行MVC式分开  重要的是逻辑 记录一下 希望其中的些许代码逻辑对你有用 TUserDaoImpl---dao层的实现 package com.pers.h ...

  6. 【java】spring-data-jpa 集成hibernate实现多条件分页查询

    初次接触spring-data-jpa,实现多条件分页查询. 基础环境 Spring Boot+spring-data-jpa+hibernate+mysql 1.接口 要继承这个接口,这个接口提供了 ...

  7. [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Hibernate分页查询小结

    通常使用的Hibernate通常是三种:hql查询,QBC查询和QBE查询: 1.QBE(Qurey By Example)检索方式 QBE 是最简单的,但是功能也是最弱的,QBE的功能不是特别强大, ...

  9. Hibernate第十篇【Hibernate查询详解、分页查询】

    前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式-.到目前为止,我们都是使用一些简单的主键查询阿-使用HQL查询所有的数据-.本博文主要讲解Hibernate的查询操 ...

随机推荐

  1. LeetCode226 InvertBinaryTree Java题解

    题目: Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 解答: 遍历每个节点  直接交换他们的 ...

  2. iOS GCD倒计时

    GCD倒计时的好处在于不用考虑是否定时器无法释放的问题,runloop的问题,还有精度更加高 使用GCD创建定时器方法 -(void)startCountDown:(NSInteger)maxTime ...

  3. prometheus监控方案

    简介 prometheus 是一个开源的系统监控和告警的工具包,其采用pull方式采集时间序列,通过http协议传输. 架构 每个应用都通过javaagent向外提供一个http服务暴露出自己的JMX ...

  4. [转]基于Python的接口测试框架

    http://blog.csdn.net/wyb199026/article/details/51485322 背景 最近公司在做消息推送,那么自然就会产生很多接口,测试的过程中需要调用接口,我就突然 ...

  5. ftp put get 的使用方法

    首先:ftp user@ip 登录到远程主机 成功后,输入ls,如下: ftp> ls 可以得到远程主机的本地目录. 一:get命令(从远程主机下载文件到本机): ftp> get (re ...

  6. C#:ref和out的联系及区别。

    总结以上四条得到ref和out使用时的区别是: ①:ref指定的参数在函数调用时候必须初始化,不能为空的引用.而out指定的参数在函数调用时候可以不初始化: ②:out指定的参数在进入函数时会清空自己 ...

  7. R语言数据分析系列之四

    R语言数据分析系列之四 -- by comaple.zhang 说到统计分析我们就离不开随机变量,所谓随机变量就是数学家们为了更好的拟合现实世界的数据而建立的数学模型.有了她我们甚至能够来预測一个站点 ...

  8. 股神小L 2016Vijos省选集训 day1

    股神小L (stock.c/pas/cpp)============================ 小L厌倦了算法竞赛,希望到股市里一展身手.他凭借自己还行的计算机功底和可以的智商,成功建立一个模型 ...

  9. [Catalan数]1086 栈、3112 二叉树计数、3134 Circle

    1086 栈 2003年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 栈是计算机中 ...

  10. EasyDSS+EasyNVR实现幼儿园直播/工地直播等分权限观看直播视频的功能

    在EasyNVR互联网直播服务器使用说明书中有关于EasyNVR分组的介绍: "EasyNVR的功能定位就是为视频应用层输出视频设备接入/标准视频输出的能力平台层,只做基础的视频通道接入.视 ...