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的查询操 ...
随机推荐
- Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url
Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url 1.1. 原理流程1 2. Invoke1 3. StrutsX2 1.1. 原理流程 读取struts配 ...
- js 正则匹配 域名【host】
如果直接在js中是可以直接取到hostname的,以下方式是通过正则匹配: var url = "http://www.cnblogs.com/cench" var reg = / ...
- lua string库
--lua中字符串索引从前往后是1,2,……,从后往前是-1,-2……. --string库中所有的function都不会直接操作字符串,只返回一个结果. -------------------- ...
- 在freemarker文件中,html标签获取后台的值
1.<#assign a='3333' /> 2.<input type="text" id="name" name="name&q ...
- oracle中提高order by的性能
1.如果order by columnA,那么在where查询条件中添加条件columnA=value,则oracle内部会过滤order by排序,直接用索引(可以通过execution plan查 ...
- oracle字符乱码的解决方法
原因分析: 客户端字符集就是为了让数据库知道我们传递过去的字符是属于哪种字符集,以便于Oracle在存储字符时进行相应的编码映射(查看客户端字符集通过查找注册表中的NLS_LANG键).在客户端查询数 ...
- 你不知道的Google Search
0.导读 这篇文章讲了这三个事儿: 如何訪问Google?----------什么?不是直接输入地址么? Google的地址是什么? ------ 你在逗我?难道不是www.google.com? G ...
- 转载 jenkins执行selenium 测试 浏览器不显示解决方法
原文地址: http://blog.csdn.net/achang21/article/details/45096003 The web browser doesn't show while run ...
- 安装virtualBox 增强包
1 在原始操作系统安装. 2 打开USB设置. 3 运行虚拟机中的Linux中,Device->install guest additions 再安装增强包. 4 插入U盘,如果这时可以看到U盘 ...
- Office Web Apps Server 2013与PDF(二)
在上一篇文章(Office Web Apps Server 2013与PDF(一))中,曾经介绍了Office Web Apps Server 2013在更新后,可以直接对PDF文档进行在线的查看.不 ...