Hibernate和Struts分页查询
分页查询数据库方法
/**
* 分页查询方法
* @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分页查询的更多相关文章
- Java_Web三大框架之Hibernate+jsp+HQL分页查询
分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...
- 分页查询——Hibernate Criteria实现一次查询取得总记录数和分页后结果集
使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集 - bto310 - ITeye博客 https://bto310.iteye.com/blog/1 ...
- JPA分页查询与条件分页查询
情有独钟的JPA 平时在写一些小项目时,比较喜欢引用 Spring Data Jpa,其实还是图他写代码快~在日常的开发工作中,分页列表查询基本是随处可见,下面一起看一下如何使用 jpa 进行多条件查 ...
- 用Hibernate和Struts2+jsp实现分页查询、修改删除
1.首先用get的方法传递一个页数过去 2.通过Struts2跳转到Action 3.通过request接受主页面index传过的页数,此时页数是1, 然后调用service层的方法获取DAO层分页查 ...
- hibernate和struts实现分页
仓促把功能进行实现一下 类与类之间也没有进行MVC式分开 重要的是逻辑 记录一下 希望其中的些许代码逻辑对你有用 TUserDaoImpl---dao层的实现 package com.pers.h ...
- 【java】spring-data-jpa 集成hibernate实现多条件分页查询
初次接触spring-data-jpa,实现多条件分页查询. 基础环境 Spring Boot+spring-data-jpa+hibernate+mysql 1.接口 要继承这个接口,这个接口提供了 ...
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate分页查询小结
通常使用的Hibernate通常是三种:hql查询,QBC查询和QBE查询: 1.QBE(Qurey By Example)检索方式 QBE 是最简单的,但是功能也是最弱的,QBE的功能不是特别强大, ...
- Hibernate第十篇【Hibernate查询详解、分页查询】
前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式-.到目前为止,我们都是使用一些简单的主键查询阿-使用HQL查询所有的数据-.本博文主要讲解Hibernate的查询操 ...
随机推荐
- android studio改动module名称
新建一个android studio项目,默认Module名称是app 右键app选择Rename,或者Shift + F6也能够.重命名module名称 重命名为abc之后中,如图上面箭头所指的ap ...
- Python之比较运算符
python中的比较运算符有8个. 运算 | 含义=============< | 小于<= | 小于等于> | 大于>= |大于等于== | 等于!= |不等于is | 是i ...
- secureCrt Linux 文件传输
1.在secureCRT终端下输入rz命令,查看Linux是否安装rz文件传输服务 如果提示未安装则先安装rz服务:安装命令: apt-get install lrzsz 2.进入要上传的目的文件 ...
- Arbitrage - poj 2240 (Bellman-ford)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17374 Accepted: 7312 Description Ar ...
- erlang的md5加密
二话不说,直接上代码 -module(md5). -compile(export_all). md5(S) -> Md5_bin = erlang:md5(S), Md5_list = bina ...
- 微信小程序的官方文档
虽然不知道微信小程序今后的发展情况,不过做为一名it人员的我还是去了解它. 这是他的文档路径,里面有详细的使用和申请内测号的全部流程,这里就不再过多解释了. 看后那个开发小程序的文档记得分析你感觉微信 ...
- c#中关于compare比较的一点注意事项
一直没有太注意,今天发现在compare比较两个字符串的时候出了点小问题 如果我设置了两个字符串 一个是“2”,一个是“12” 那么在比较的时候 第一个会大于第二个: 如果第一个是“02”,第二个是“ ...
- [原创]关于absolute、relative和float的一些思考
absolute: 元素完全脱离文档流,不占文档流的位置,不使用top.left等属性时,仍然在原文档流位置上(但是不在文档流中,也不占用位置),设置了top.left等之后,向上寻找到第一个非sta ...
- netstat命令简单使用
1.适用范围 该命令用于打印网络连接.路由表.接口统计.伪装连接.多播成员等信息. (netstat已经过时,现在使用ss命令,所以本文不会作过多翻译,只着重一些重要部分) 2.语法概览 netsta ...
- Chrome Native Messaging 与本地程序之间的通信
最近项目上出现了web打印不稳定的问题,师父决定web调用本地打印程序,在查阅了相关资料和加了几个相关群咨询后得知新版的chrome不支持NNAPI了,最好用Native Messaging来处理,经 ...