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

TUserDaoImpl---dao层的实现
package com.pers.hoobey; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import java.util.List; /**
* Created by hoobey on 2017/9/7.
*/
public class TUserDaoImpl implements TUserDao {
@Override
public TUser busOper(TUser bean, int oper) {
Session s = HibernateSessionFactory.getSession();
Transaction tx = s.getTransaction();
TUser user = new TUser();
try {
tx.begin();
user = bean;
//evict变为脱管状态,脱管对象通过session的save,update,saveOrUpdate,lock等方法变回持久化对象
s.evict(bean);
if (oper == -) {
s.delete(bean);
} else if (oper == ) {
s.update(bean);
} else if (oper == ) {
s.save(bean);
} else {
user = (TUser) s.get(TUser.class, bean.getId());
}
tx.commit();
} catch (Exception ex) {
ex.printStackTrace();
tx.rollback();//事务回滚
return null;
}
s.evict(bean);
s.close();
return user;
} /**
* 使用hibernate提供的分页功能,得到分页显示的数据
* select * from t_user limit 0,3;
* 0=offset
* 3=pageSize
*/
@SuppressWarnings("unchecked")
@Override
public List<TUser> queryByPage(String hql, int offset, int pageSize) {
Session session = HibernateSessionFactory.getSession();
Transaction tx = null;
List<TUser> list = null; try {
tx = session.beginTransaction(); Query query = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize); list = query.list(); tx.commit(); } catch (Exception e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
HibernateSessionFactory.closeSession();
}
return list;
} /**
* 通过hql语句得到数据库中记录总数
*/
@Override
public int getAllRowCount(String hql) {
Session session = HibernateSessionFactory.getSession();
Transaction tx = null;
int allRows = ;
try {
tx = session.beginTransaction(); Query query = session.createQuery(hql); allRows = query.list().size(); tx.commit(); } catch (Exception e) {
if (tx != null) {
tx.rollback();
} e.printStackTrace();
} finally {
HibernateSessionFactory.closeSession();
} return allRows;
}
}
.PageBean--每一页显示的信息内容
package com.pers.hoobey;
import java.util.List;
/**
* Created by hoobey on 2017/9/7.
* (每一页所需要的内容都存放在这个PageBean里面),里面用来存放网页每一页显示的内容
*/
public class PageBean {
private List<TUser> list; //通过hql从数据库分页查询出来的list集合 private int allRows; //总记录数 private int totalPage; //总页数 private int currentPage; //当前页
/**
* 得到总页数
*
* @param pageSize 每页记录数
* @param allRows 总记录数
* @return 总页数
*/
public int getTotalPages(int pageSize, int allRows) {
int totalPage = (allRows % pageSize == ) ? (allRows / pageSize) : (allRows / pageSize) + ; return totalPage;
} /**
* 得到当前开始记录号
*
* @param pageSize 每页记录数
* @param currentPage 当前页
* @return
*/
public int getCurrentPageOffset(int pageSize, int currentPage) {
int offset = pageSize * (currentPage - ); return offset;
} /**
* 得到当前页, 如果为0 则开始第一页,否则为当前页
*
* @param page
* @return
*/
public int getCurPage(int page) {
int currentPage = (page == ) ? : page; return currentPage;
} public List<TUser> getList() {
return list;
} public void setList(List<TUser> list) {
this.list = list;
} public int getAllRows() {
return allRows;
} public void setAllRows(int allRows) {
this.allRows = allRows;
} public int getTotalPage() {
return totalPage;
} public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
} public int getCurrentPage() {
return currentPage;
} public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
} }
.TUserServiceImpl---service层实现
package com.pers.hoobey; import java.util.Iterator;
import java.util.List; /**
* Created by hoobey on 2017/9/7.
*/
public class TUserServiceImpl implements TUserService {
private TUserDaoImpl tUserDaoImpl = new TUserDaoImpl(); /**
* pageSize为每页显示的记录数
* page为当前显示的页数 从0开始
*/
@Override
public PageBean getPageBean(int pageSize, int page) {
PageBean pageBean = new PageBean(); String hql = "from TUser limit "; int allRows = tUserDaoImpl.getAllRowCount(hql);//总记录数 int totalPage = pageBean.getTotalPages(pageSize, allRows);//总页数 int currentPage = pageBean.getCurPage(page);//当前页 int offset = pageBean.getCurrentPageOffset(pageSize, currentPage);//当前页是 从1开始 要减去1 默认从0开始

//此处就隐含了分页查询 比对 select * from user limit "+(pageNo-1)*pageSize+","+pageSize;
List<TUser> list = tUserDaoImpl.queryByPage(hql, offset, pageSize);
/*打印输出看一波 非常正确 所有的数据都存进了pageBean*/
Iterator<TUser> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println("查询当前分页显示的数据是:"+iterator.next().toString());
}
System.out.println("总记录数:"+allRows);
System.out.println("当前页面是:"+currentPage);
System.out.println("总页数是:"+totalPage); pageBean.setList(list);
pageBean.setAllRows(allRows);
pageBean.setCurrentPage(currentPage);
pageBean.setTotalPage(totalPage); return pageBean;
}
}
.TUserAction--action的定义
package com.pers.hoobey; import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import org.hibernate.Criteria;
import org.hibernate.Session; import javax.servlet.http.HttpServletRequest;
import java.util.List; public class TUserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private TUser user;
private List<TUser> dataobject;//保存所有TUser数据集合 TUserDaoImpl tUserDaoImpl = new TUserDaoImpl(); TUserServiceImpl tUserServiceImpl = new TUserServiceImpl();
private int page;
//查询所有
public String execute() throws Exception {
Session session = HibernateSessionFactory.getSession();
Criteria query = session.createCriteria(TUser.class);
this.dataobject = (List<TUser>)query.list();
for(TUser user : dataobject){
System.out.println("id="+user.getId()+"name="+user.getName());
}
session.close();
return SUCCESS;
}
// 增加数据
public String addLine() throws Exception {
System.out.print(user.getName());// user里面有内容
user = tUserDaoImpl.busOper(user, );
if (user == null)
return ERROR;
return SUCCESS;
}
//修改数据
public String updLine() throws Exception{
user= tUserDaoImpl.busOper(user, );
if(user==null) return ERROR;
return SUCCESS;
}
//删除数据
public String delLine() throws Exception{
user= tUserDaoImpl.busOper(user, -);//设计的很巧妙
if(user==null) return ERROR;
return SUCCESS;
}
//当前页数显示数据
public String PageAll() throws Exception{
//表示每页显示3条记录,page表示当前网页
System.out.println("点击首页链接,进来了,返回出pageBean对象");
PageBean pageBean = tUserServiceImpl.getPageBean(, page);
System.out.println(page); HttpServletRequest request = ServletActionContext.getRequest(); request.setAttribute("pageBean", pageBean);//通过struts.xml的配置把pageBean值送到jsps/Alldata.jsp return SUCCESS;
} public TUser getUser() {
return user;
} public void setUser(TUser user) {
this.user = user;
}
public List<TUser> getDataobject() {
return dataobject;
} public void setDataobject(List<TUser> dataobject) {
this.dataobject = dataobject;
} public int getPage() {return page;} public void setPage(int page) {this.page = page;}
}
.Alldata.jsp--页面信息显示
<%@ page language="java" import="java.util.*,com.pers.hoobey.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
TUser user = new TUser();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript"> function validate() {
var page = document.getElementsByName("page")[].value; if (page > <s:property value="#request.pageBean.totalPage"/>) {
alert("你输入的页数大于最大页数,页面将跳转到首页!"); window.document.location.href = "TUserAction"; return false;
} return true;
} </script>
</head>
<body>
HQL 查询结果显示如下:
<h1><font color="blue">分页查询</font></h1>
<hr>
<br>
<table align="center">
<tr>
<td>序号</td>
<td>姓名</td>
<td>操作1</td>
<td>操作2</td>
</tr>
<%--#request.pageBean.list 数据从TUserServiceImpl获取存入到PageBean--%>
<s:iterator value="#request.pageBean.list" id="tUser">
<tr>
<td><s:property value="#tUser.id" /></td>
<td><s:property value="#tUser.name" /></td>
<!-- 修改不同id对应的数据 -->
<td><a href="<%=request.getContextPath() %>/edit.jsp?user.id=<s:property value="#tUser.id" />">修改</a></td>
<td><a href="delline.action?user.id=<s:property value="#tUser.id" />">删除</a></td>
</tr>
</s:iterator>
</table>
<%--进行分页的页面布局--%> <center> <font size="">共<font color="red"><s:property value="#request.pageBean.totalPage" /></font>页 </font>&nbsp;&nbsp;
<font size="">共<font color="red"><s:property value="#request.pageBean.allRows" /></font>条记录</font><br><br> <s:if test="#request.pageBean.currentPage == 1">
首页&nbsp;&nbsp;&nbsp;上一页
</s:if> <s:else>
<%--进入此展示页面 必须点击首页链接 才会触动action去执行逻辑函数--%>
<a href="TUserAction.action">首页</a>
&nbsp;&nbsp;&nbsp;
<a href="TUserAction.action?page=<s:property value="#request.pageBean.currentPage - "/>">上一页</a>
</s:else> <s:if test="#request.pageBean.currentPage != #request.pageBean.totalPage">
<a href="TUserAction.action?page=<s:property value="#request.pageBean.currentPage + "/>">下一页</a>
&nbsp;&nbsp;&nbsp;
<a href="TUserAction.action?page=<s:property value="#request.pageBean.totalPage"/>">尾页</a>
</s:if> <s:else>
下一页&nbsp;&nbsp;&nbsp;尾页
</s:else> </center>
<br> <center> <form action="TUserAction" onsubmit="return validate();">
<font size="">跳转至</font>
<input type="text" size="" name="page">页
<input type="submit" value="跳转">
</form> </center>
</body>
</html>

hibernate和struts实现分页的更多相关文章

  1. hibernate和struts2实现分页功能

    1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO { public List<Person> queryB ...

  2. hibernate与struts框架实现增删改查

    这里配置hibernate与struts不再过多赘述,配置搭建前文已经详细讲解,配置如下: hibernate.hbm.xml配置: <?xml version="1.0" ...

  3. 解决hibernate对Sql Server分页慢的问题

    一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...

  4. 关于使用MyEclipse自动生成Hibernate和Struts出现的jar不兼容的问题(antlr.collections.AST.getLine()I)

    今天做Hibernate和Struts2结合的练习,使用MyEclipse自动创建Hibernate和Struts的相关配置文件和jar包,写完一个查询方法后,准备测试一下结果,简单的查询那种,很诡异 ...

  5. Hibernate和Struts分页查询

    分页查询数据库方法 /** * 分页查询方法 * @param sql,pageNO,maxResult * @return List */ public List<Object> que ...

  6. Struts+Hibernate+jsp页面 实现分页

    dao层数据库代码: package com.hanqi.dao; import java.util.ArrayList; import java.util.List; import org.hibe ...

  7. Hibernate+jsp+struts+spring做增删该查,

    同样还是web项目,这里只做了一张表,做一个测试,例子.主要是建Hibernate 的时候要非常注意,有时间了整理一下建Hiberbnate 的时候需要注意的事项 这里我是建了5个包,其实只要四个就好 ...

  8. 【Spring实战-3】Spring整合Hibernate、Struts

    作者:ssslinppp      1. 摘要 版本: Spring4.0.4:Hibernate4.3.5:struts2.3.16: 主要介绍了如下内容: 项目结构的规划: Spring下整合Hi ...

  9. hibernate、struts、spring mvc的作用

    Hibernate工作原理及为什么要用?原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提 ...

随机推荐

  1. Linux内核:分析coredump文件 - 内核代码崩溃

    转自:http://blog.csdn.net/guowenyan001/article/details/12975221 一.分析Core文件 1.1 找到core文件目录,启动mycrash:my ...

  2. SharePoint Set-SPUser 命令拒绝访问

    · 前言 最近碰到一个问题,由于User Profile Service服务有问题,用户信息无法更新.所以,想到Set-SPUser命令可以更新,于是乎找到这个命令,但是更新的时候发现拒绝访问的错误. ...

  3. JavaScript中 location.host 与 location.hostname 的区别

    JavaScript 中,大多数情况下,我们不会发现 location.host 与 location.hostname 的区别,因为大多数情况下,我们的网页用的是 80 端口. 他们的区别: loc ...

  4. BZOJ 3172 [Tjoi2013]单词 AC自己主动机(fail树)

    题意:链接 方法:AC自己主动机与fail树性质 解析:复习AC自己主动机的第一道题?(真正的第一题明明是又一次写了遍hdu2222! ) 这题说实话第一眼看上去就是个sb题,仅仅要建出来自己主动机. ...

  5. unity 打包资源及网络请求资源包

    第一步 导包 在Assets新建一个Editor目录 新建一个Test类 using UnityEngine; using System.Collections; using UnityEditor; ...

  6. C# 异步编程Task整理(二)异常捕捉

    一.在任务并行库中,如果对任务运行Wait.WaitAny.WaitAll等方法,或者求Result属性,都能捕获到AggregateException异常. 可以将AggregateExceptio ...

  7. Photoshop 使用阈值调整色阶

    1. 阈值原理 阈值的定义其实就是“临界点”,即过了这个临界点是一种情况(比如黑色),没有超过这个临界点是另外一种情况(比如白色),所以图像上只有黑.白两种情况出现.临界点的值由你定义: 阈值实际应用 ...

  8. JavaScript:Events

    ylbtech-JavaScript:Events 1.返回顶部 JavaScript 事件参考手册 事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行. 事件句柄 HTML 4.0 的新 ...

  9. 一幅画<十六芒星盾>---程序员or艺术家

    画上是一面含有16个尖角的铜盾,这是我用程序算法生成的图像中最震撼的一幅.图像生成出来后,我看了好久,一边看一边想我的人生转向问题:我是不是该离开苦逼又屌丝的程序界,混入高端大气上档次的艺术圈? 说要 ...

  10. Android 资源混淆 AndResGuard MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...